HyperAI초신경
Back to Headlines

NVIDIA cuML로 스태킹과 하이퍼파라미터 최적화 15분만에 완성

21일 전

스택 일반화와 HPO: NVIDIA cuML을 활용해 15분 안에 정확도 최대화하기 머신 러닝(ML) 엔지니어들 사이에서 스택 일반화(Stacking Generalization)는 여러 모델을 결합하여 전반적인 예측 성능을 향상시키는 널리 사용되는 기술이다. 반면, 하이퍼파라미터 최적화(HPO)는 주어진 ML 알고리즘의 성능을 최대화하기 위해 가장 적합한 하이퍼파라미터 세트를 체계적으로 탐색하는 과정을 말한다. 스택 일반화와 HPO를 함께 사용할 때 가장 큰 도전 중 하나는 상당한 컴퓨팅 자원을 필요로 하는 점이다. 이러한 방법들은 여러 모델을 학습하고 각 모델마다 다양한 하이퍼파라미터 조합을 반복적으로 시도해야 하기 때문에, 특히 큰 데이터셋에서는 리소스와 시간이 많이 소요된다. 이 글에서는 GPU 가속 컴퓨팅을 활용해 이 파이프라인을 간소화하고, cuML 라이브러리를 이용해 15분 만에 작업을 수행하는 방법을 소개한다. cuML은 scikit-learn과의 제로 코드 변경 통합을 통해 기존 ML 워크플로에 GPU 가속을 적용할 수 있다. 코드 수정 없이도 같은 모델 정확도를 달성할 수 있으며, GPU 가속은 여러 HPO 시험을 동시에 실행할 수 있어 훈련 시간을 크게 단축시킨다. 우리는 사용한 스택 일반화 접근법, 그 구현 방식, 그리고 정확도 개선에 대해 먼저 논의한다. 그 다음, HPO가 최적의 하이퍼파라미터를 찾음으로써 전체 정확도를 어떻게 향상시키는지 설명한다. 스택 일반화는 많은 실험, 특히 Kaggle 경쟁에서 널리 사용되는 효과적인 앙상블 방법이다. 그러나 컴퓨팅 비용이 높아 실제 응용에서는 자주 사용되지 않는 경우가 많다. 우리는 이 기법을 구현하기 위해 Figure 1에서 보듯이, 랜덤 포레스트(Random Forest), K-최근접 이웃(KNN), 로지스틱 회귀(Logistic Regression) 등 세 가지 다른 모델을 베이스 모델로 사용했다. 이 베이스 모델들의 예측값은 KNN 메타모델로 전달되어, 최종 분류를 위해 결합된 출력을 바탕으로 결정되었다. 실험을 위해 1백만 개 샘플과 9개 특성을 포함하는 분류 데이터셋을 사용했다. 이를 통해 각 베이스 모델의 강점을 활용하고, 스택을 통해 전체 예측 정확도를 향상시킬 수 있었다. Figure 2에서 보듯이, 5-폴드 스트라티파이드 크로스밸리데이션을 통해 측정한 스택 일반화를 사용한 KNN 메타모델은 전체 예측 정확도를 0.28% 향상시켰다. 하이퍼파라미터 최적화를 통해 스택 앙상블의 성능을 더욱 향상시킬 수 있다. 우리는 각 베이스 모델 및 메타모델에 HPO를 적용했다. 최고 성능을 보인 베이스 모델의 아웃-오브-폴드(out-of-fold) 예측값을 스택하여 새로운 메타데이터셋을 생성했으며, 이 데이터셋은 KNN 메타모델의 HPO를 실행하는 데 사용되었다. HPO를 수행하기 위해 Optuna 라이브러리를 사용하여 분류 정확도를 최적화 기준으로 설정했다. cuML 커널을 %load_ext cuml.accel 명령어로 활성화하면, HPO 전체 프로세스가 GPU 가속을 통해 진행되며, scikit-learn과 동일한 구문을 사용할 수 있다. 아래 코드 스니펫은 로지스틱 회귀에 HPO를 적용하는 방법을 보여준다. Random Forest, KNN, KNN 메타모델에도 동일한 접근법을 적용할 수 있다. 전체 구현을 살펴보려면 동반 Jupyter 노트북을 확인하면 된다. ```python %load_ext cuml.accel cuML 라이브러리 불러오기 from sklearn.linear_model import LogisticRegression from sklearn.ensemble import RandomForestClassifier from sklearn.neighbors import KNeighborsClassifier 모델 학습 및 평가 함수 정의 def train_and_eval(C=1, penalty='l2'): lr = LogisticRegression(C=C, penalty=penalty, max_iter=20000, tol=1e-3) lr.fit(X_train_scaled, y_train_df) y_proba = lr.predict_proba(X_valid_scaled)[:, 1] # 정확도 점수 계산 score = cp.round(lr.score(cp.asnumpy(X_valid_scaled), cp.asnumpy(y_valid_df)) * 100, 2) return score 하이퍼파라미터 튜닝을 위한 Optuna 목적 함수 정의 def objective(trial): C = trial.suggest_float("C", 1e-2, 1e2, log=True) penalty = trial.suggest_categorical("penalty", ["l1", "l2"]) return train_and_eval(C, penalty) 정확도 점수를 최대화하기 위한 Optuna 연구 생성 lr_study = optuna.create_study( direction="maximize", study_name="optuna_logistic_acc_score", sampler=optuna.samplers.RandomSampler(seed=142), ) 정의된 목적 함수를 사용해 하이퍼파라미터 최적화 실행 lr_study.optimize(objective, n_trials=40) 최적의 하이퍼파라미터 세트와 해당 평가 점수 출력 print(f"Best params: {lr_study.best_params}") print(f"Best accuracy score: {lr_study.best_value}") ``` Figure 3에서 보듯이, 베이스 모델과 메타모델 모두 HPO를 적용함으로써, HPO가 없는 모델에 비해 예측 정확도가 1.44% 향상되었다. cuML 라이브러리를 활용한 GPU 가속의 장점 특히 HPO를 네 개의 서로 다른 모델에 적용할 때, cuML 라이브러리를 활용한 GPU 가속은 실행 속도를 크게 향상시키는 데 유용하다. CPU 기반 실행이 한 번의 반복에 약 5분이 소요되는 반면, GPU를 활용하면 각 모델당 약 5초 내에 약 40번의 반복을 완료할 수 있다. cuML은 scikit-learn 구문과의 호환성을 통해 개발자들이 제로 코드 변경으로 GPU 가속을 쉽게 적용할 수 있다. 시작하기 스택 일반화와 HPO를 통합하면 시스템의 정확도를 향상시킬 수 있다. 제안된 솔루션은 GPU 가속 cuML 라이브러리를 사용하여 스택 일반화 스택의 각 모델에 대한 깊은 HPO를 가능하게 한다. cuML 라이브러리의 scikit-learn 구문 호환성 덕분에 개발자들은 이 기술을 생산 환경에 원활하게 통합할 수 있다. 이러한 통합은 우수한 모델 개발을 촉진하는 것뿐만 아니라, 반복 프로세스를 가속화하여 실제 응용에서 더 빠른 실행과 향상된 모델 성능을 선사한다. 자신의 응용 프로그램에서 이 접근법을 시도하려면 최신 버전의 NVIDIA cuML을 다운로드하면 된다. 피드백은 Slack의 #RAPIDS-GoAi 채널에서 공유할 수 있다. 제로 코드 변경 cuML에 대해 자세히 알아보고 싶다면 NVIDIA cuML Brings Zero Code Change Acceleration to scikit-learn을 참고하면 된다. 이 기능의 추가 예제는 Google Colab 노트북에서 확인할 수 있으며, 최신 버전의 cuML은 제로 코드 변경 기능이 사전 설치되어 있다. 자율 학습과 인스트럭터 주도 코스는 DLI Learning Path for Data Science에서 제공된다. 산업 내부자의 평가와 회사 프로필 이 방법론은 스택 일반화와 HPO의 복잡성을 크게 줄이고, GPU 가속을 통한 효율적인 모델 훈련을 가능하게 한다. cuML의 사용은 머신 러닝 개발자들에게 실질적인 이점을 제공하며, 대규모 데이터셋에서도 빠르고 효과적인 모델 훈련을 지원한다. NVIDIA는 이러한 혁신적인 기술을 통해 데이터 과학과 머신 러닝 분야의 발전에 크게 기여하고 있다. cuML은 GPU 가속을 쉽게 적용할 수 있도록 설계되었으며, 기존 워크플로에 최소한의 변경으로 성능 향상을 실현할 수 있다.

Related Links