WandB란?
딥러닝 실험 과정을 손쉽게 Tracking하고, 시각화할 수 있는 Tool이다. 딥러닝에서 흔히 사용하는 Weights(가중치)와 Biases(편향)을 줄여서 wandb(Weights and biases)라고 부른다.
할 수 있는 일
- 학습 시 사용된 파라미터들을 저장할 수 있음
- 학습했던 각 실험들을 탐색하고, 비교하고, 시각화할 수 있음
- 학습 환경의 시스템을 어떻게 사용하고 있는지 분석할 수 있음
- 다른 사람들과 협업할 수 있음
- 과거 실험 결과들을 복제할 수 있음
- 하이퍼 파라미터 튜닝이 가능함
- 실험했던 모든 기록들을 영구적으로 저장할 수 있음
설치과정
먼저 wandb 홈페이지(https://wandb.ai/site)에 들어가서 회원가입을 한다.
그리고 Linux shell에서 wandb 라이브러리를 설치합니다.
pip install wandb
로그인을 하기 위해 터미널에 아래 명령어를 입력한다.
wandb login
wandb: You can find your API key in your browser here: https://app.wandb.ai/authorize
wandb: Paste an API key from your profile and hit enter:
**참고로 여기서 copy and paste할 때 paste한 내용이 안보이지만 paste 된 것이므로 paste후 바로 enter를 갈기면 된다.
해당 링크(https://wandb.ai/authorize)에 있는 API key값을 복사하여 명령어 창에 입력하면 초기 설정이 끝난다.
예제(Train)
VAE를 구현하면서 직접 구현한 코드의 일부 중 WandB 부분만 발췌한 것이다.
import wandb
...
config = {'input_dim' : 28*28,
'hidden_dim' : 500,
'latent_dim' : 10,
'batch_size' : 100,
'epochs' : 30,
'lr' : 0.01,
'best_loss' : 10**9,
'patience_limit' : 3} # hyperparameter
wandb.init(
# set the wandb project where this run will be logged
project = "VAE",
# track hyperparameters and run metadata
config = config
)
...
for epoch in tqdm(range(config['epochs'])):
...
wandb.log({"train_loss": train_loss/len(train_loader.dataset), "valid_loss": valid_loss/len(valid_loader.dataset)})\
...
wandb.finish()
wandb.init()
wandb.init()은 현재 실행하는 프로젝트를 wandb에 추적, 로깅을 시작한다.
wandb를 먼저 import 하고 코드의 시작 부분에 wandb를 초기화 해준다. class에 init과 비슷한 느낌
init 메소드의 parameter는 생략 가능하고, 아래 실행 이름 설정(run)은 필수가 아니기 때문에 마음대로 하면 된다.
**wandb documentation(https://docs.wandb.ai/ref/python/init)를 참고
wandb.config()
원하는 설정 값(아래에선 Hyperparameter 값)들을 wandb로 전달해준다.
wandb.log()
dictionary 형태의 data를 wandb로 전달해준다.
이제 실행시켜 보겠다.
실행시키시면 아래와 같이 명령창 마지막 즈음에 wandb: 🚀 View run ~ at 뒤에 링크가 나타난다.
링크를 클릭하시면 아래와 같은 화면을 볼 수 있다. 위에서 wandb.log로 전달한 loss값의 변화가 나타난다.
WandB 마스터가 되셨습니다! 끗