
이 노트북에서 다루는 내용

설치, 임포트, 로그인
0단계: W&B 설치
wandb는 pip을 사용해 쉽게 설치할 수 있습니다.
1단계: W&B 임포트 및 로그인
실험과 파이프라인 정의하기
wandb.init으로 메타데이터와 하이퍼파라미터 추적하기
config 사전(또는 비슷한 객체)에 저장해 두었다가
필요할 때 참조하는 것은 꽤 일반적인 워크플로우입니다.
이 예제에서는 소수의 하이퍼파라미터만 변경 가능하게 두고
나머지는 코드에 직접 지정합니다.
하지만 모델의 어떤 부분이든 config의 일부가 될 수 있습니다.
또한 일부 메타데이터도 포함합니다: MNIST 데이터셋과 합성곱
아키텍처를 사용하고 있습니다. 나중에 같은 프로젝트에서 예를 들어
CIFAR에 완전 연결(fully connected) 아키텍처를 사용해 작업하더라도,
이 정보가 run들을 구분하는 데 도움이 됩니다.
- 먼저
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 스텝마다
모델의 그래디언트와 파라미터를 기록합니다.
트레이닝을 시작하기 전에 이것만 호출해 주면 됩니다.
나머지 트레이닝 코드는 그대로입니다:
에포크와 배치를 반복하면서
forward와 backward 패스를 실행하고
optimizer를 적용합니다.
run.log()에 전달합니다.
run.log()는 문자열을 key로 사용하는 사전을 인자로 받습니다.
이 문자열들은 로깅되는 객체를 식별하고, 해당 객체들이 value를 이룹니다.
원한다면 현재 트레이닝에서 몇 번째 step인지도 함께 로깅할 수 있습니다.
추가 참고: 저는 모델이 지금까지 본 예제 개수를 사용하는 방법을 선호합니다.
이렇게 하면 배치 크기가 달라져도 비교하기가 더 쉽기 때문입니다.
하지만 원한다면 step 값이나 배치 개수를 그대로 사용할 수도 있습니다. 트레이닝 run이 길어지는 경우에는 epoch 단위로 로깅하는 것도 합리적일 수 있습니다.
테스트 로직 정의
(선택 사항) run.save() 호출하기
export하겠습니다.
그 파일 이름을 run.save()에 전달하면 모델 파라미터가 W&B의 서버에
저장됩니다. 이제 어떤 .h5나 .pb 파일이 어떤 트레이닝 run에
해당하는지 헷갈릴 일이 없습니다.
모델을 저장, 버전 관리, 배포하기 위한 더 고급 wandb 기능은
Artifacts tools를 참조하세요.
트레이닝을 실행하고 wandb.ai에서 메트릭을 실시간으로 확인하기
- Charts 탭: 트레이닝 전체에 걸쳐 모델 그래디언트, 파라미터 값, 그리고 loss가 로깅됩니다.
- System 탭: Disk I/O 사용량, CPU 및 GPU 메트릭(온도가 치솟는 것도 볼 수 있습니다) 등 다양한 시스템 메트릭이 포함됩니다.
- Logs 탭: 트레이닝 중 표준 출력으로 보내진 모든 내용의 복사본이 저장됩니다.
- Files 탭: 트레이닝이 완료되면
model.onnx를 클릭해 Netron model viewer에서 네트워크를 확인할 수 있습니다.
with wandb.init 블록이 종료되면,
셀 출력에 결과 요약도 함께 표시됩니다.
Sweeps로 하이퍼파라미터 테스트하기
- 스윕 정의하기: 검색할 파라미터, 검색 전략, 최적화 메트릭 등을 지정하는 사전 또는 YAML 파일을 만들어 정의합니다.
-
스윕 초기화하기:
sweep_id = wandb.sweep(sweep_config) -
스윕 에이전트 실행하기:
wandb.agent(sweep_id, function=train)

예제 갤러리
고급 설정
- Environment variables: 관리형 클러스터에서 트레이닝을 실행할 수 있도록 환경 변수에 API 키를 설정하세요.
- Offline mode:
dryrun모드를 사용해 오프라인으로 트레이닝하고, 나중에 결과를 동기화하세요. - On-prem: 자체 인프라의 프라이빗 클라우드 또는 에어갭 환경의 서버에 W&B를 설치하세요. 학계부터 엔터프라이즈 팀까지 모두를 위한 로컬 설치 옵션을 제공합니다.
- Sweeps: 튜닝을 위한 가벼운 도구를 사용해 하이퍼파라미터 탐색을 빠르게 설정하세요.