0. Introduction
모델링 과정은 항상 Trial Error다. 연구자가 직접 하든, AutoML로 하든, 여러 조건 아래에서 Loss와 Metric의 변화를 파악하고 최종 배포할 모델을 결정한다. 나는 모니터링 툴로 Tensorboard를 쓰고 있었는데, WanbB(Weights and Biases)가 편리하고, 다양한 기능을 지원한다고 해서 이번 프로젝트의 학습과정 모니터링 툴은 WandB를 사용해 보았다. 써본 기능 위주로 WandB에 대한 소개하며 어떤 장점이 있는지에 대해 다루어 보려 한다. (WandB에 대한 전반적인 소개보단, 사용후기에 가깝다)
1. What is WandB
WandB는 자신을 “Developer가 더 나은 모델을 더 빠르게 만들 수 있도록 하는 ML Platform”으로 정의하고 있다. 이에 어울리게 다양한 기능을 지원한다. Tensorboard와 겹치는 기능인 학습 모니터링을 지원하는 것을 물론이고 Hyper-Parameter Tuning 과 Dataset, Model Versioning을 지원한다. 또 클라우드 기반으로 실험을 관리한다는 장점이 있다.
2. WandB Feature
(사용해본 Feature에 대해서만 다룬다)
a. DashBoard
Project Chart Overview
Proejct Runs Table
Run Overview
Tensorboard가 지원하는 실험 모니터링 기능을 동일하게 지원하며, Project와 Run개념이 있어, 하나의 Project 아래에서 여러 Run을 관리 및 비교할 수 있다. 각 Run은 DashBoard Chart 외에도 Computing Resource 사용량, Model Graph, Logging Output, Config등 수많은 정보가 기록되어 있다. 대부분의 요소는 별도의 기록 과정 없이도, WandB가 알아서 기록해준다. 직접 각 Run을 살펴보며 왼쪽 버튼을 누르며 어떤 정보가 Logging 되는지 확인해보길 추천한다.
b. Sweep
WandB는 HyperParameter Tuning 및 시각화를 Sweep이라는 컴포넌트를 통해 지원한다. Sweep은 현재 Grid, Random, Bayes Optimization을 지원하고 있다. (예시 DashBoard)
3. Tutorial
간단한 Pseudo 예시를 통해 WandB를 사용하는 방법을 설명한다.
1.
2.
pip를 통해 설치하고 api key를 통해 Login한다.
pip install wandb
wandb login
Bash
복사
3.
실험 Code 시작부에 WandB init을 시켜준다. Config를 지정해 줄 수도 있다.
import wandb
wandb.init(project="Name", config={'lr' : 1e-4, 'dropout' : 0.5})
Python
복사
4. 학습 코드에 Logging을 넣어준다.
4. Review
새로운 프로젝트에 WandB를 사용해본 결과는 굉장히 만족스러웠다. 한 Project에서 여러 실험을 관리해야 하는 환경이면 도입을 고려해보아도 좋을 것 같다. Tensorboard와 Logging 방법도 비슷하고 공식 Document에 가이드도 잘 되어있어 한 번 사용해 보기도 좋다.
가장 만족한 부분은 Project 단위의 실험 관리이다. Project 초기엔 앞단(Data)의 변화가 잦고, 목표 Metric(Lower Bound)을 맞추기 위해 다양한 시도를 해봐야 해서 모델 구조나 전처리 코드를 자주 바꿔가며 실험했다. 이때 실험의 규모가 커지면 각 실험의 Log가 어떤 버전의 코드의 어떤 Config 아래에서 작성되었는지 파악하는 것이 어려워진다.
Tensorboard로 실험 과정 & 결과를 모니터링 하고, 내용에 대해서는 Git commit Key와 Config를 Logging Text로 저장하면 어느정도 추적이 가능했지만 (1) 그 시스템을 직접 개발해야 하는 것 (2) Tensorboard로 실험 번호 이름을 확인하고, 실험 Log를 찾아가서 정보를 확인하는게 별도의 프로세스인 점이 불편했다. 또 Tensorboard는 공유하려면 외부 접속 관련 Setting을 해주어야 하는데 이 부분도 상당히 귀찮은 부분이다.
WandB는 config를 설정해주면 알아서 실험의 컴포넌트로 관리해 주는 데다가, 각 Config 요소를 바탕으로 Project 내의 실험들에 대해 Summary까지 해준다. Tensorboard가 실험의 이름과 Logging된 Metric만 확인할 수 있는 것에 비해 훨씬 많은 정보가 제공되어 한 눈에 보고 결과를 해석하기 쉽다. 또 무조건 Cloud에서만 사용할 수 있는게 아니라, Private하게 WandB를 Hosting하는 방법도 있다. (설정이 귀찮아 보이긴 하지만)
아쉬운 점을 굳이 꼽자면, 오픈소스 프로젝트가 아니기에 Team Plan은 유료인 것 같다. 학술적인 목적이거나 오픈소스 프로젝트인 경우는 무료로 Team Plan을 지원해 주기도 하는 것 같다.
MLOps에 대한 관심이 늘어나면서 ML Project의 생산성을 올려주는 다양한 툴이 계속 나오고 있다. 다른 ML Pipeline(Ex: Data Versioning, Tuning, Serving)은 선택지가 많지만 실험 추적 및 학습 모니터링 부분에서는 WandB만한게 없는 것 같다.