Skip to main content

Weights & Biases로 더 빠르고 더 나은 모델 만들기

W&B를 활용해 Kaggle 리더보드에 오르는 방법을 확인하세요 이 글은 AI 번역본입니다. 오역 가능성이 있다면 댓글로 알려주세요
Created on September 15|Last edited on September 15
발표하게 되어 매우 기쁩니다 Weights & Biases 이제 Kaggle 커널에 기본으로 포함됩니다! 다음과 같은 팀과 사용자들이 이미 활용하고 있습니다 OpenAI 그리고 GitHubW&B는 머신러닝을 위한 새로운 모범 사례 표준의 일부입니다. 동료 Kaggle 사용자들이 W&B를 유용하게 느낄 이유와, 몇 줄의 코드만으로 프로젝트에 어떻게 통합할 수 있는지 간단히 소개하고자 합니다.


다음은 Kaggle 사용자에게 W&B가 특히 유용한 몇 가지 활용 사례입니다:
  1. 모델을 추적하고 비교하기: 가설을 빠르게 검증하고 신속하게 반복해 최적의 모델을 찾고 싶습니다.
  2. 디버깅을 위한 모델 성능 시각화: 모델이 실시간으로 어떻게 동작하는지 확인하고 문제를 해결하고 싶습니다.
  3. 효율적인 하이퍼파라미터 탐색: 누구보다 빠르게 최적의 모델을 찾고 싶습니다.
  4. 자원 효율적인 모델 학습: 모델 학습을 최대한 효율적으로 수행하고, 불필요한 비용을 지출하지 않길 원합니다.
  5. 모델 자랑하기: 내 모델과 핵심 인사이트를 팀원들과 Kaggle 커뮤니티에 공유하고 싶습니다.
우리 베타 사용자 두 명인 Carlo Lepelaars와 Mani Sarkar는 SoftBank Forex Algorithm Challenge에서 2,255팀 중 5위를 차지했고, 여기에서 다음을 발견했습니다 Weights & Biases 사용하기 모델 성능을 튜닝하는 데 매우 유용합니다.
로버트 루츠 Weights & Biases를 사용했습니다 모든 하이퍼파라미터 튜닝에 W&B를 활용해 최종적으로 전체 순위 36위를 기록했습니다 NFL 빅 데이터 볼 Kaggle 대회. 그는 이렇게 말했습니다. “W&B를 사용해 모델 성능을 빠르게 개선하고(리더보드 순위도 함께 끌어올리며) 나가는 속도에 놀랐습니다. 특히 스위프 시각화가 하이퍼파라미터 튜닝에 정말 큰 도움이 되었습니다.”
Weights & Biases를 활용해 Kaggle 리더보드에 오르는 방법을 좀 더 깊이 살펴보겠습니다.


1. 모델 추적 및 비교

Kaggler인 우리는 시간과 자원이 모두 제한되어 있습니다. 경쟁자들보다 더 빨리 우승 모델을 찾으려면 많은 빠른 실험을 돌려야 합니다. W&B를 사용하면 어디서든 라이브 대시보드에서 모델 성능, 예측 결과, 자원 사용량을 한눈에 추적할 수 있습니다.


시도한 지표, 모델과 하이퍼파라미터, 예측 결과와 관련 메모를 한곳에 모아 관리하는 중앙 저장소는 머신러닝 워크플로를 조망할 수 있는 조감도를 제공합니다. 즉, 모든 실험을 한 곳에서 확인할 수 있습니다.
진행 상황을 시각화하면서 다음과 같은 질문을 스스로 던질 수 있습니다. 내 모델은 충분히 잘 작동하고 있는가, GPU 자원을 과도하게 쓰고 있지는 않은가, 어떤 학습률이 가장 좋았는가, BatchNorm을 추가한 것이 도움이 되었는가? W&B는 wandb.save와 wandb.restore로 모델을 저장하고 복원합니다. 또한 모델과 함께 예측값도 기록할 수 있습니다.
이 기능이 정말 좋은 점은 모델을 다시 실행할 필요가 없다는 것입니다. 며칠, 몇 주, 심지어 몇 달이 지난 후에도 해당 모델의 성능을 바로 확인할 수 있습니다. 대회 최종 제출 마감 전에, 지난 몇 달 동안 학습한 모든 모델을 살펴보고 성능이 가장 뛰어난 모델의 예측 결과를 다운로드하면 됩니다.



모든 실험을 한곳에 모아 두면 모델을 만드는 데 사용된 모든 구성 요소를 체계적으로 추적할 수 있어 결과를 재현하기 쉬워지고, 동료 Kaggler들에게 모델이 어떻게 작동하는지 설명하기도 수월합니다.
이 정도 수준으로 모델 성능에 대한 인사이트를 확보하면, 다양한 모델 가설을 빠르게 반복 실험하고 어떤 하이퍼파라미터와 모델 아키텍처가 가장 잘 작동하는지 실시간으로 확인할 수 있습니다. 대시보드의 Run Compare 패널은 서로 다른 모델 실행 간에 무엇이 달라졌는지 보여주며, 프로젝트 페이지는 모든 모델의 성능을 하나의 그래프로 깔끔하게 비교해 제공합니다.





2. 디버깅을 위한 모델 성능 시각화


W&B가 모델에 대해 자동으로 생성하는 시각화 몇 가지를 간단히 소개합니다.
모델 성능과 학습 지표 시각화

모델 예측 시각화

GPU 사용량을 포함한 시스템 메트릭 시각화

소실·발산 그래디언트를 다루기 위한 그래디언트 시각화

포괄적이고 유연한 시각화 - 이미지, 비디오, HTML, 오디오, 3D 객체, 플롯, 테이블, 포인트 클라우드 로깅

여기에서 볼 수 있듯이, W&B는 메트릭과 예측을 구조화하고 학습 과정에 대해 실행 가능한 인사이트를 제공하는 방식으로 제시합니다. 예를 들어, 과적합 여부를 확인하기 위해 학습 손실과 검증 손실을 시각화하는 플롯을 빠르게 만들 수 있습니다.
이러한 포괄적인 시각화를 통해 W&B는 모델 내부를 들여다보고 성능을 디버그할 수 있도록 도와줍니다. 모델이 어디에서 실패하는지, 어디에서 가장 최적으로 동작하는지, 그리고 모델이 작동하지 않는 가장 흔한 상황이 무엇인지 파악할 수 있습니다.


3. 효율적인 하이퍼파라미터 탐색

모델에 가장 최적의 하이퍼파라미터를 찾는 일은 리더보드에서 금메달과 동메달을 가르는 차이가 될 수 있습니다. 하이퍼파라미터를 체계적으로 스윕하면 적은 노력으로도 우승 모델을 찾아낼 수 있는 강력한 방법입니다.
이 과정은 종종 엉망이 되기 쉽고, 시도한 하이퍼파라미터 값을 추적하기 위해 서둘러 만든 엑셀 스프레드시트와 종이에 휘갈겨 쓴 메모를 뒤섞어 쓰게 되곤 합니다. 가끔은 학습 스크립트를 작성하기도 하지만, 전반적으로 하이퍼파라미터 값을 시도해 보는 작업 자체가 꽤 번거롭습니다.



입력 W&B 스위프 이를 통해 시도할 하이퍼파라미터 값과 원하는 탐색 전략(그리드, 랜덤, 베이즈)을 사전 또는 YAML 파일로 정의할 수 있습니다. 몇 줄의 코드만 추가하면 W&B Sweeps가 하이퍼파라미터 공간을 자동으로 탐색하고, 이전과 동일하게 모든 모델 메트릭과 예측을 로깅해 줍니다.
이는 하이퍼파라미터 공간을 철저히 탐색하고 최적의 모델을 찾는 데 도움이 되며, 비용과 시간도 절약할 수 있게 해줍니다.


4. 자원 효율적인 모델 학습

GPU 자원은 비용이 많이 듭니다. 우리는 가능한 한 자원을 효율적으로, 즉 저렴하게 사용해서 Kaggle 대회에서 우승하려고 합니다. W&B의 깔끔한 System Metrics 탭을 통해 현재 얼마나 많은 자원을 쓰고 있는지 한눈에 확인할 수 있습니다.



이는 어떤 모델 실험이 가장 많은 자원을 소모했는지 한눈에 파악하고, 시도할 모델 유형과 하이퍼파라미터 범위를 제한하는 데 유용합니다. 예를 들어 배치 크기를 두 배로 늘리면 GPU 사용량이 네 배로 늘어난다는 사실을 깨달을 수도 있는데, 이는 결코 바람직하지 않습니다.
시스템 메트릭을 꼼꼼히 추적하면 시간과 자원을 모두 효율적으로 쓸 수 있습니다! 그리고 작은 방식이지만 지구를 아끼는 데도 보탬이 됩니다.


5. 내 모델 자랑하기

팀과 함께 대회에 참가하든, Kaggle 커뮤니티에 모델을 설명하는 멋진 커널을 작성하든, W&B의 Reports는 당신의 모델을 생동감 있게 보여 주는 데 도움이 됩니다. Reports는 모델을 위한 향상된 형태의 README처럼 사용할 수 있습니다. 제한적인 마크다운 README 파일이나 블로그 글로 결과를 전달하려 애쓰는 대신, 대화형 차트를 포함한 풍부한 리포트를 생성할 수 있습니다.



발견과 진행 상황을 공유할 리포트를 만들 수 있습니다. 예시는 다음과 같습니다 —

마지막으로, 모델 실행 기록을 하나의 프로젝트에 모아두면 팀원들과 협업하면서 각 접근 방식의 성능을 비교해 어떤 방법이 가장 잘 작동하는지 확인할 수 있습니다. 또한 여러분은 실시간 대시보드 팀원들이 무엇을 하고 있는지 파악할 수 있습니다. 여기에서 시도한 접근 방식에 대한 인사이트를 공유하고, 병목 지점을 이해하며, 마일스톤을 설정하고, 중앙화된 단일 진실 소스에서 진행 상황을 추적할 수 있습니다.


W&B로 모델을 시각화하는 일은 쉽습니다

몇 줄의 코드만으로 W&B를 코드에 통합할 수 있습니다.
아래 커널에서 전체 코드 버전을 확인할 수 있습니다. 이미 사용 중인 커널이 있다면 Docker 이미지만 ‘Latest Available’로 변경하면 됩니다.
  • wandb.init() – 새로운 W&B 실행(run)을 초기화합니다. 각 실행은 학습 스크립트의 단일 실행을 나타냅니다.
  • wandb.log() – 이미지, 동영상, 오디오 파일, HTML, 플롯, 포인트 클라우드 등의 커스텀 객체를 기록합니다.

import wandb
wandb.init(anonymous='allow', project="kaggle")

# Code to fetch and preprocess data

# Log any metric over any time period
for price in apple['close']:
wandb.log({"Stock Price": price})

먼저 실험 추적 라이브러리를 임포트하고 무료 W&B 계정을 설정하세요:
  • import wandb – wandb 라이브러리를 임포트합니다
  • callbacks=[wandb.xgboost.wandb_callback()] – wandb 콜백을 추가합니다 XGBoost 콜백, 또는
  • callbacks=[wandb.lightgbm.wandb_callback()] – wandb 콜백을 추가합니다 LightGBM 콜백
# Import wandb
import wandb
import xgboost as xgb
wandb.init(anonymous='allow', project="xgboost-dermatology")

# Code to fetch and preprocess data

# Add the wandb xgboost callback
bst = xgb.train(param, xg_train, num_round, watchlist, callbacks=
[wandb.xgboost.wandb_callback()])

scikit-learn 플롯을 Weights & Biases에 로깅하는 것은 간단합니다.
import wandb
wandb.init(project="visualize-sklearn")
# load and preprocess dataset
# train a model
단일 플롯 시각화
wandb.sklearn.plot_confusion_matrix(y_true, y_probas, labels)
또는 모든 플롯을 한 번에 시각화하세요
# Or visualize all plots at once:
# Visualize all classifier plots
wandb.sklearn.plot_classifier(clf, X_train, X_test, y_train, y_test, y_pred, y_probas, labels, model_name='SVC', feature_names=None)
# All regression plots
wandb.sklearn.plot_regressor(reg, X_train, X_test, y_train, y_test,
model_name='Ridge')
# All clustering plots
wandb.sklearn.plot_clusterer(kmeans, X_train, cluster_labels, labels=None,
model_name='KMeans')

  • import wandb – wandb 라이브러리를 임포트합니다
  • from wandb.keras import WandbCallback – wandb를 임포트합니다 Keras 콜백
  • wandb.init() – 새로운 W&B 실행(run)을 초기화합니다. 각 실행은 학습 스크립트의 단일 실행을 나타냅니다.
  • wandb.config – 모든 하이퍼파라미터를 config 객체에 저장합니다. 이렇게 하면 W&B 앱에서 하이퍼파라미터 값으로 실행(run)을 정렬하고 비교할 수 있습니다.
  • callbacks=[WandbCallback()] – 모든 레이어 차원과 모델 파라미터를 가져와 자동으로 W&B 대시보드에 로깅합니다.

# WandB – Import the W&B library
import wandb
from wandb.keras import WandbCallback

# Default values for hyper-parameters
defaults=dict(
dropout = 0.2,
hidden_layer_size = 32,
layer_1_size = 32,
learn_rate = 0.01,
decay = 1e-6,
momentum = 0.9,
epochs = 5,
)

# Initialize a new wandb run and pass in the config object
wandb.init(anonymous='allow', project="kaggle", config=defaults)
config = wandb.config

# Code to fetch and preprocess data

# build model
model = Sequential()
model.add(Conv2D(config.layer_1_size, (5, 5), activation='relu',
input_shape=(img_width, img_height,1)))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(config.dropout))
model.add(Flatten())
model.add(Dense(num_classes, activation='softmax'))

sgd = SGD(lr=config.learn_rate, decay=config.decay, momentum=config.momentum,
nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd, metrics=['accuracy'])

# Add WandbCallback() to the fit function
model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=config.epochs,
callbacks=[WandbCallback(data_type="image", labels=labels)])

추가 자료

Weights & Biases는 학계와 오픈 소스 프로젝트를 위해 언제나 무료입니다. 문의 사항이나 기능 제안이 있다면 carey@wandb.com 으로 이메일을 보내주세요. 추가 자료는 다음을 참고하세요:
  • 문서 Python 문서
  • 갤러리 W&B의 예시 리포트
  • 기사 블로그 글과 튜토리얼
  • 커뮤니티 - 최신 ML 소식을 받아보고, 궁금한 ML 질문을 마음껏 할 수 있도록 Slack 커뮤니티 포럼에 참여하세요

이 글은 AI 번역본입니다. 오역이 있을 수 있으니 댓글로 알려 주세요. 원문 보고서는 아래 링크에서 확인하실 수 있습니다: 원문 보고서 보기