카테고리 없음

[Weight & Bias] wandb를 이용하여 학습파이프라인 구축하기

uomnf97 2024. 2. 4. 23:54
안녕하세요! 제이덥입니다~
요즘 dacon에서 딥러닝 관련 대회에 참여하여 열심히 학습 파이프라인을 구축하고 있는데요.
학습파이프라인을 구축할 때 사용했던 Weight & Bias(wandb) 플랫폼이 무엇이고 이를 어떻게 활용할 수 있는지 포스팅하려고 합니다. 함께 살펴볼까요?

1️⃣ Weight & Bias란?

Weight & Bias(줄여서 wandb)는 AI developer platform으로 머신러닝/딥러닝 모델의 학습을 도와주는 다양한 기능(시각화, 로깅 등)을 제공합니다. 그리고 Weight & Bias에서 크게 W&B Models, W&B Prompts, W&B Prompts 총 세가지 형태로 기능을 나눌 수 있는데요. 

W&B Models 

머신러닝 실무자들을 위해 학습/미세 조정(fine-tuning)을 위한 다양한 기능을 제공합니다.

 

  • Experiments: 모델 학습의 실험 트랙킹(tracking)
  • Model Registry: 모델 프로덕션(model production) 중앙 관리
  • Launch: 워크 로드 확장 및 자동화 
  • Sweeps: 하이퍼 파라미터 튜닝과 모델 최적화

W&B Prompts 

OpenAI의 API 사용을 포함한 LLM 모델 디버깅 및 모니터링 기능을 제공합니다. 

W&B Platform 

모델의 결과를 추적하고 시각화 해주는 모든 W&B 플랫폼의 핵심 기능(core-block)입니다.

  • Artifacts: 모델의 학습 결과 트랙킹 및 버저닝
  • Tables: 표 데이터 시각화 및 조회
  • Reports: 협업 결과를 문서화

 

그리고 학습 파이프라인 구축을 위해서 이러한 기능들 중 sweep 기능을 활용해보도록 하겠습니다. 

 

2️⃣ wandb package 다운로드 & 계정 셍성

먼저 wandb는 python 언어를 통해 다룰 수 있는데요, pip 를 이용해서 라이브러리를 설치 해줍니다.

pip install wandb

 

설치가 완료 되었으면, wandb.ai 웹 사이트에 접속하셔서 Sign Up을 진행해주세요! 

https://wandb.ai/site

 

이후, SIGN-IN을 해주신 다음 우측 상단 프로필의 user settings를 클릭해주시고

 

Danger Zone에 있는 API Keys의 reveal을 클릭한다음 key를 개인 메모장에 옮겨 둡니다. 나중에 로그인을 하실 때 이 Key를 이용하니 꼭 private한 파일에 잘 저장해두시면 되겠습니다~

 

3️⃣ wandb sweep 살펴보기

wandb sweep은 하이퍼 파라미터를 튜닝 과정을 자동화합니다. 단순히 자동화를 해줄뿐만이 아니라 그리고 하이퍼 파라미터 튜닝 과정에 다양한 옵션을 주어 학습 방식에 따라 커스터마이징 해줄 수 있습니다. 또한 모델의 결과도 시각화하여 어떤 하이퍼 파라미터에서 최적화가 잘 되어있는지 빠르게 살펴 볼 수 있는데요. 이런 강력한 기능을 가진 sweep을 잘 활용하기 위해서는 sweep config 파일을 살펴봐야 합니다. 

 

sweep config 파일은 어떠한 방식으로 튜닝을 진행할지(method), 어떠한 지표를 사용할지(metric), 모델의 어떤 하이퍼 파라미터를 튜닝할 것인지(parameters)를 아래와 같은 방식으로 지정해줄 수 있습니다. 또한, 각 하이퍼 파라미터는 리스트 형태로 여러개의 선택지를 지정해줄 수 있습니다. 자세한 내용은 공식 문서를 통해 확인하시고 추가로 커스터마이징 해주실 수 있습니다. 

program: train.py
method: random
metric:
  goal: minimize
  name: loss
parameters:
  batch_size:
    distribution: q_log_uniform_values
    max: 256 
    min: 32
    q: 8
  dropout: 
    values: [0.3, 0.4, 0.5]
  epochs:
    value: 1
  fc_layer_size: 
    values: [128, 256, 512]
  learning_rate:
    distribution: uniform
    max: 0.1
    min: 0
  optimizer:
    values: ["adam", "sgd"]

 

4️⃣ Python 코드에 적용해보기 

저는 아래와 같이 모듈화를 진행하여 코드를 정리하였는데요. 이 중 train.py에서 하이퍼 파라미터 튜닝을 진행할 것이기 때문에 해당 파일에 wandb sweep을 적용하였습니다. 

 

따라서 train.py 파일에서 아래와 같이 wandb를 import하고 모듈에 wandb config파일을 인자로 넘겨줄 수 있도록 init함수를 수정했습니다.

 

 

그리고 아래와 같이 config 파일을 구성해주었습니다.

 

 

Referecne :

- https://docs.wandb.ai/guides