
이 노트북에서 다루는 내용

설치, 임포트 및 로그인
0단계: W&B 설치
wandb는 pip을 사용해 쉽게 설치할 수 있습니다.
1단계: W&B 임포트 및 로그인
실험 및 파이프라인 정의
wandb.init으로 메타데이터와 하이퍼파라미터 추적하기
config 딕셔너리(또는 유사한 객체)에 저장해 두고
필요할 때 꺼내 쓰는 워크플로우가 매우 일반적입니다.
이 예제에서는 소수의 하이퍼파라미터만 변경 가능하게 두고
나머지는 코드에 직접 정의합니다.
하지만 모델의 어떤 부분이든 config에 포함될 수 있습니다.
또한 일부 메타데이터도 포함합니다: 우리는 MNIST 데이터셋과 합성곱
아키텍처를 사용하고 있습니다. 나중에 같은 프로젝트에서, 예를 들어
CIFAR 데이터셋에 대해 완전 연결 아키텍처로 작업할 경우,
이 메타데이터가 서로 다른 실행을 구분하는 데 도움이 됩니다.
- 먼저
make를 사용해 모델과 관련 데이터, 옵티마이저를 만들고, - 그런 다음 그 방식에 따라 모델을
train한 뒤, - 마지막으로 학습이 어떻게 진행됐는지 확인하기 위해
test합니다.
wandb.init 컨텍스트 안에서 일어난다는 점입니다.
이 함수를 호출하면
여러분의 코드와 저희 서버 사이에 통신이 설정됩니다.
config 딕셔너리를 wandb.init에 전달하면
그 모든 정보가 즉시 저희 쪽에 기록되므로,
실험에서 사용하도록 설정한 하이퍼파라미터 값들을
항상 확인할 수 있습니다.
선택하고 기록한 값이 모델에서 실제로 사용되는 값과 항상 일치하도록 하려면,
객체의 run.config 사본을 사용할 것을 권장합니다.
아래의 make 정의를 확인해 예시를 살펴보세요.
추가 설명: 저희 코드는 별도의 프로세스에서 실행되도록 주의 깊게 설계되어 있어서
저희 쪽 문제
(예: 거대한 바다 괴물이 데이터 센터를 공격하는 경우와 같은 상황)로 인해
여러분의 코드에서 크래시가 발생하지 않도록 합니다.
문제가 해결되고, 예를 들어 크라켄이 심해로 돌아간 뒤에는
wandb sync로 데이터를 동기화할 수 있습니다.
데이터 로딩과 모델 정의
wandb 없이 구현했을 때와
다를 바가 없으므로 여기서는 길게 다루지 않겠습니다.
wandb 때문에 특별히 바뀌는 건 없으니,
여기서는 표준적인 ConvNet 아키텍처를 그대로 사용하겠습니다.
이 부분을 마음껏 바꿔 보면서 여러 실험을 시도해 보세요 —
모든 결과는 wandb.ai에 기록됩니다.
학습 로직 정의
model_pipeline에서 train을 어떻게 수행할지 정의할 차례입니다.
여기서는 두 가지 wandb 함수, watch와 log를 사용합니다.
run.watch()로 그래디언트를 추적하고 run.log()로 나머지를 기록하기
run.watch는 학습 중 매 log_freq 스텝마다
모델의 그래디언트와 파라미터를 기록합니다.
학습을 시작하기 전에 run.watch()만 한 번 호출하면 됩니다.
나머지 학습 코드는 그대로입니다:
에포크와 배치를 순회하면서
순전파와 역전파를 실행하고
optimizer를 적용합니다.
run.log()에 전달하면 됩니다.
run.log()는 key가 문자열인 딕셔너리를 인자로 받습니다.
이 문자열은 로깅되는 객체를 식별하며, 해당 객체들이 value가 됩니다.
또한 선택적으로, 현재 학습이 몇 번째 step인지도 함께 기록할 수 있습니다.
추가 참고: 저는 모델이 지금까지 본 예제(example) 수를 사용하는 편입니다.
이렇게 하면 배치 크기가 달라져도 비교가 더 쉽기 때문입니다.
물론 원시 step 수나 배치 개수를 사용해도 됩니다. 학습이 오래 진행되는 경우에는 epoch 단위로 로깅하는 것도 합리적일 수 있습니다.
테스트 로직 정의하기
(선택 사항) run.save() 호출하기
export하겠습니다.
해당 파일 이름을 run.save()에 전달하면 모델 파라미터가 W&B 서버에 저장되어,
어떤 .h5 또는 .pb 파일이 어떤 학습 실행과 대응되는지 헷갈릴 일이 없습니다.
모델을 저장, 버저닝, 배포하기 위한 더 고급 wandb 기능은
아티팩트 도구를 참고하세요.
훈련을 실행하고 wandb.ai에서 지표를 실시간으로 확인하세요
- Charts 탭: 훈련 내내 모델 기울기, 파라미터 값, 손실이 기록됩니다.
- System 탭: 디스크 I/O 사용량, CPU 및 GPU 메트릭(온도가 얼마나 올라가는지 확인해 보세요) 등 다양한 시스템 메트릭이 포함됩니다.
- Logs 탭: 훈련 중 표준 출력으로 기록된 모든 내용의 복사본이 저장됩니다.
- Files 탭: 훈련이 끝난 후
model.onnx를 클릭해 Netron model viewer로 네트워크를 확인할 수 있습니다.
with wandb.init 블록이 종료되면,
셀 출력에 결과 요약도 함께 표시됩니다.
Sweeps로 하이퍼파라미터 테스트하기
- sweep 정의: 탐색할 하이퍼파라미터, 검색 전략, 최적화 지표 등을 지정하는 딕셔너리 또는 YAML 파일을 생성합니다.
-
sweep 초기화:
sweep_id = wandb.sweep(sweep_config) -
sweep 에이전트 실행:
wandb.agent(sweep_id, function=train)
