
이 노트북에서 다루는 내용

설치, 임포트, 로그인
Step 0: W&B 설치
wandb는 pip를 사용해 쉽게 설치할 수 있습니다.
Step 1: W&B 임포트 및 로그인
실험과 파이프라인 정의하기
wandb.init()으로 메타데이터와 하이퍼파라미터 추적하기
config 딕셔너리
(또는 유사한 객체)에 저장해 두고
필요할 때마다 꺼내 쓰는 방식은
매우 일반적인 워크플로입니다.
이 예제에서는 일부 하이퍼파라미터만 바뀌도록 두고
나머지는 직접 하드코딩합니다.
하지만 모델의 어떤 부분이든 config에 포함할 수 있습니다.
메타데이터도 함께 포함합니다. 여기서는 MNIST 데이터셋과 합성곱
아키텍처를 사용합니다. 나중에 예를 들어
같은 프로젝트에서 CIFAR에 완전연결 아키텍처를 사용하게 되면
이 정보가 run들을 구분하는 데 도움이 됩니다.
- 먼저 모델과 관련 데이터, 그리고 옵티마이저를
make한 다음 - 그에 맞게 모델을
train하고 마지막으로 - 트레이닝이 어떻게 진행되었는지 확인하기 위해
test합니다.
wandb.init()의 컨텍스트 내에서
이뤄진다는 것입니다.
이 함수를 호출하면
사용자 코드와 W&B 서버 사이에 통신 경로가 설정됩니다.
config 딕셔너리를 wandb.init()에 전달하면
그 정보가 모두 즉시 로깅되므로,
실험에 사용할 하이퍼파라미터 값을
어떻게 설정했는지 항상 알 수 있습니다.
선택해 로깅한 값이 실제로 모델에 사용되는 값과 항상 일치하도록 하려면,
객체의 run.config 사본을 사용하는 것을 권장합니다.
몇 가지 예시는 아래 make의 정의를 확인하세요.
참고: 저희는 코드를 별도의 프로세스에서 실행하므로,
저희 측에 문제가 생기더라도
(예를 들어 거대한 바다 괴물이 데이터 센터를 공격하더라도)
사용자 코드가 중단되지 않습니다.
Kraken이 다시 깊은 바다로 돌아가듯 문제가 해결되면,
wandb sync로 데이터를 로깅할 수 있습니다.
데이터 로딩과 모델 정의
wandb가 없을 때와
달라지는 점은 없으므로 여기서는 자세히 다루지 않겠습니다.
wandb를 쓴다고 해서 달라지는 건 없으니,
표준 ConvNet 아키텍처를 그대로 사용하겠습니다.
이 부분은 이것저것 바꿔 보면서 여러 실험을 해 보는 것도 주저하지 마세요 —
모든 결과는 wandb.ai에 로깅됩니다.
트레이닝 로직 정의하기
model_pipeline에서 train을 어떻게 수행할지 정의할 차례입니다.
여기서는 wandb의 두 함수인 watch와 log를 사용합니다.
run.watch()로 그라디언트를 추적하고, 나머지는 모두 run.log()로 로깅하기
run.watch()는 모델의 그라디언트와 파라미터를
트레이닝 중 매 log_freq step마다 로깅합니다.
트레이닝을 시작하기 전에 이 함수를 호출하기만 하면 됩니다.
나머지 트레이닝 코드는 그대로입니다:
에포크와 배치를 순회하면서
forward 및 backward pass를 수행하고
optimizer를 적용합니다.
run.log()에 전달합니다.
run.log()는 키가 문자열인 딕셔너리를 받습니다.
이 문자열은 로깅할 객체를 식별하고, 해당 객체가 값이 됩니다.
현재 트레이닝의 몇 번째 step인지도 선택적으로 로깅할 수 있습니다.
참고: 저는 모델이 지금까지 본 예제 수를 사용하는 편입니다.
이렇게 하면 batch size가 달라도 비교하기가 더 쉽기 때문입니다.
물론 단순 step 수나 batch 개수를 사용해도 됩니다. 트레이닝 run이 더 길다면 epoch 기준으로 로깅하는 것도 의미가 있습니다.
테스트 로직 정의
(선택 사항) run.save() 호출
export하겠습니다.
해당 파일명을 run.save()에 전달하면 모델 파라미터가
W&B 서버에 저장되므로, 어떤 .h5 또는 .pb 파일이
어떤 트레이닝 run에 해당하는지 더 이상 놓치지 않게 됩니다.
모델을 저장하고, 버전 관리하고, 배포하는 더 고급 wandb 기능은
Artifacts 도구를 확인하세요.
트레이닝을 실행하고 wandb.ai에서 메트릭을 실시간으로 확인하세요
- 차트, 트레이닝 전반에 걸쳐 모델의 그라디언트, 파라미터 값, loss가 로깅되는 곳입니다
- 시스템, 디스크 I/O 사용량, CPU 및 GPU 메트릭(온도가 치솟는 것도 볼 수 있습니다) 등 다양한 시스템 메트릭이 포함되어 있습니다
- 로그, 트레이닝 중 표준 출력으로 전송된 모든 내용의 복사본이 있습니다
- 파일, 트레이닝이 완료되면
model.onnx를 클릭해 Netron model viewer에서 네트워크를 확인할 수 있습니다.
with wandb.init() 블록을 빠져나오면
셀 출력에도 결과 요약이 표시됩니다.
Sweeps로 하이퍼파라미터 테스트하기
- sweep 정의: 검색할 파라미터, 검색 전략, 최적화 metric 등을 지정하는 딕셔너리 또는 YAML 파일을 만듭니다.
-
sweep 초기화:
sweep_id = wandb.sweep(sweep_config) -
sweep agent 실행:
wandb.agent(sweep_id, function=train)
