[MLOps] Weight & Biases 소개 및 사용 방법

Page content

인프런 강의

1줄 요약

  • wandb로 MLOps를 배워봅니다.

References

초기 설정

  • 싸이트: https://wandb.ai/site

  • 회원가입을 한 뒤, 가장 먼저 나오는 화면은 아래 대시보드 입니다.

  • 참조: 필자는 Mac M1을 사용하는 중입니다.

Quick Start

  • 새로운 가상환경을 만들도록 하겠습니다. (필자는 virtualenv 사용합니다.)
$ pip install wandb
Collecting wandb
  Downloading wandb-0.10.31-py2.py3-none-any.whl (1.8 MB)
     |████████████████████████████████| 1.8 MB 464 kB/s 
.
.
.
Successfully installed GitPython-3.1.17 configparser-5.0.2 docker-pycreds-0.4.0 gitdb-4.0.7 pathtools-0.1.2 promise-2.3 psutil-5.8.0 sentry-sdk-1.1.0 shortuuid-1.0.1 smmap-4.0.0 subprocess32-3.5.4 wandb-0.10.31
  • 이번에는 로그인을 합니다.
$ wandb login
  • 이 때 터미널 창에 로그인 모드활성화가 되면서 URL이 하나 나타나게 됩니다.

  • 여기서 https://wandb.ai/authorize를 클릭하면 API 키값 화면이 나타납니다.

  • 초기 설정이 끝났습니다.

프로젝트 세팅

  • 가상환경 위에서 wandb init을 실행합니다.
  • 그리고 프로젝트 명을 기재합니다.
$ wandb init
This directory has been configured previously, should we re-configure it? [y/N]: y
Enter a name for your first project: temp
This directory is configured!  Next, track a run:
* In your training script:
    import wandb
    wandb.init(project="temp")
* then `python <train.py>`.
  • 그리고 홈페이지를 확인해봅니다.

Tutorial

tensorflow
keras
pandas
numpy
pillow
wandb
h5py
opencv-python
scikit-learn
  • 그리고, 설치를 진행합니다.
$ pip install -r requirements.txt
  • tutorial.py 소스코드는 아래와 같습니다.
import math
import random

# Start a new run, tracking hyperparameters in config
wandb.init(project="temp", config={
    "learning_rate": 0.01,
    "dropout": 0.2,
    "architecture": "CNN",
    "dataset": "CIFAR-100",
})
config = wandb.config

# Simulating a training or evaluation loop
for x in range(50):
  acc = math.log(1 + x + random.random()*config.learning_rate) + random.random() + config.dropout
  loss = 10 - math.log(1 + x + random.random() + config.learning_rate*x) + random.random() + config.dropout
  # Log metrics from your script to W&B
  wandb.log({"acc":acc, "loss":loss})
  • 위 파일을 작성한 뒤, 터미널을 실행합니다. 그런데, 에러가 생길 수가 있습니다.
$ python3 tutorial.py 
wandb: Currently logged in as: dschloe (use `wandb login --relogin` to force relogin)
wandb: Tracking run with wandb version 0.10.31
wandb: Syncing run sage-morning-2
wandb:  View project at https://wandb.ai/dschloe/basic-intro
wandb:  View run at https://wandb.ai/dschloe/basic-intro/runs/q0eccvb5
wandb: Run data is saved locally in /Users/evan/Desktop/mlops_wandb/wandb/run-20210529_104935-q0eccvb5
wandb: Run `wandb offline` to turn off syncing.

Exception in thread Thread-3:
.
.
.
    raise Exception("The wandb backend process has shutdown")
Exception: The wandb backend process has shutdown
>>> import wandb
>>> print(wandb.__version__)
0.10.31
  • pip 명령어를 활용하여 0.10.8로 업그레이드 하였습니다.
$ pip3 install --upgrade wandb==0.10.8
  • 이제 다시 실행합니다.
$ python3 tutorial.py
wandb: Currently logged in as: dschloe (use `wandb login --relogin` to force relogin)
wandb: wandb version 0.10.31 is available!  To upgrade, please run:
wandb:  $ pip install wandb --upgrade
wandb: Tracking run with wandb version 0.10.8
wandb: Syncing run vibrant-donkey-3
wandb: ⭐️ View project at https://wandb.ai/dschloe/temp
wandb: 🚀 View run at https://wandb.ai/dschloe/temp/runs/33aupjxx
wandb: Run data is saved locally in wandb/run-20210529_144202-33aupjxx
wandb: Run `wandb off` to turn off syncing.


wandb: Waiting for W&B process to finish, PID 26327
wandb: Program ended successfully.
wandb:                                                                                
wandb: Find user logs for this run at: wandb/run-20210529_144202-33aupjxx/logs/debug.log
wandb: Find internal logs for this run at: wandb/run-20210529_144202-33aupjxx/logs/debug-internal.log
wandb: Run summary:
wandb:          acc 4.58345
wandb:         loss 6.5208
wandb:        _step 49
wandb:     _runtime 1
wandb:   _timestamp 1622266923
wandb: Run history:
wandb:          acc ▁▁▂▃▄▅▄▄▆▅▆▆▆▆▅▆▆▇▆▆▇▆▆▇█▇▇██▇▇██▇█▇▇███
wandb:         loss █▇▆▅▄▅▄▅▅▄▃▃▄▄▄▃▃▃▂▃▂▃▂▂▂▃▃▂▂▂▂▂▂▂▁▂▁▂▂▁
wandb:        _step ▁▁▁▁▂▂▂▂▂▃▃▃▃▃▃▄▄▄▄▄▅▅▅▅▅▅▆▆▆▆▆▆▇▇▇▇▇███
wandb:     _runtime ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
wandb:   _timestamp ▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁
wandb: 
wandb: Synced 4 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)
wandb: 
wandb: Synced vibrant-donkey-3: https://wandb.ai/dschloe/temp/runs/33aupjxx
  • 정상적으로 잘 되는 것을 확인할 수 있었다. 마찬가지로 대시보드에서도 아래와 같이 확인할 수 있을 것이다.

소결

  • 지금까지 가장 wandb 튜토리얼의 기본적인 내용을 확인하였습니다.