메인 콘텐츠로 건너뛰기
머신 러닝 실험 추적, 데이터셋 버전 관리, 프로젝트 협업에 W&B를 사용하세요.
W&B를 사용할 때의 이점

이 노트북에서 다루는 내용

이 튜토리얼에서는 PyTorch 트레이닝 코드에 W&B를 통합해 실험을 추적하고, 메트릭과 그라디언트를 로깅하고, 모델 버전을 관리하는 방법을 설명합니다. 기존 PyTorch 파이프라인에 실험 추적을 추가할 때 활용하세요.
PyTorch와 W&B 인테그레이션 다이어그램
비디오 튜토리얼을 보며 따라 해보세요. Step으로 시작하는 섹션만 보면 기존 파이프라인에 W&B를 통합하는 데 필요한 내용은 충분합니다. 나머지는 데이터를 로드하고 모델을 정의하는 내용입니다.

설치, 임포트, 로그인

실험을 정의하기 전에 환경을 설정하고 W&B에 인증하세요.

Step 0: W&B 설치

시작하려면 pipwandb 라이브러리를 설치해야 합니다.

Step 1: W&B 임포트 및 로그인

W&B 서비스에 데이터를 로깅하려면 로그인해야 합니다. W&B를 처음 사용하는 경우 표시되는 링크를 통해 무료 계정에 가입하세요.

실험과 파이프라인 정의하기

W&B를 설치하고 세션 인증을 완료했으면, 실험 설정과 해당 설정을 사용할 트레이닝 파이프라인을 정의하세요.

wandb.init()으로 메타데이터와 하이퍼파라미터 추적하기

프로그래밍 방식으로는 먼저 실험을 정의하세요. 하이퍼파라미터는 무엇인가요? 이 run에 연결된 메타데이터는 무엇인가요? 이 정보를 config 딕셔너리(또는 유사한 객체)에 저장해 두고 필요할 때마다 꺼내 쓰는 방식은 일반적인 워크플로입니다. 이 예제에서는 일부 하이퍼파라미터만 바뀌도록 두고 나머지는 직접 하드코딩합니다. 모델의 어떤 부분이든 config에 포함할 수 있습니다. 이 예제에는 MNIST 데이터셋과 합성곱 아키텍처에 대한 메타데이터도 포함됩니다. 나중에 예를 들어 같은 프로젝트에서 CIFAR에 완전연결 아키텍처를 사용하게 되면 이 메타데이터가 run들을 구분하는 데 도움이 됩니다.
이제 전체 파이프라인을 정의해 보겠습니다. 이는 모델 트레이닝에서 매우 일반적인 흐름입니다:
  1. 먼저 모델과 관련 데이터, 그리고 옵티마이저를 make한 다음
  2. 그에 맞게 모델을 train하고 마지막으로
  3. 트레이닝이 어떻게 진행되었는지 확인하기 위해 test합니다.
다음 코드는 이 함수들을 구현합니다.
여기서 표준 파이프라인과 다른 유일한 점은 이 모든 과정이 wandb.init()의 컨텍스트 내에서 이뤄진다는 것입니다. 이 함수를 호출하면 사용자 코드와 W&B 서버 사이에 통신 경로가 설정됩니다. config 딕셔너리를 wandb.init()에 전달하면 그 정보가 모두 즉시 W&B에 로깅되므로, 실험에 사용할 하이퍼파라미터 값을 어떻게 설정했는지 항상 알 수 있습니다. 선택해 로깅한 값이 실제로 모델에 사용되는 값과 항상 일치하도록 하려면, W&B는 객체의 run.config 사본을 사용하는 것을 권장합니다. 몇 가지 예시는 아래 make의 정의를 확인하세요. 파이프라인을 정의했으므로, 다음 섹션에서는 각 step을 차례대로 구현합니다. 데이터와 모델 설정, 트레이닝, 그리고 테스트입니다.
참고: W&B는 W&B 측의 문제가 사용자 코드를 중단시키지 않도록 자체 코드를 별도의 프로세스에서 실행합니다. 문제가 해결되면 wandb sync로 데이터를 로깅할 수 있습니다.

데이터 로딩과 모델 정의

다음으로 데이터를 어떻게 로드할지와 모델이 어떤 형태인지 지정합니다. 이 부분은 중요하지만, wandb가 없을 때와 달라지는 점은 없습니다.
모델을 정의하는 부분은 wandb를 쓴다고 해서 달라지지 않으므로, 이 예제에서는 표준 ConvNet 아키텍처를 사용합니다. 이 코드는 자유롭게 바꿔 가며 실험해 보세요. W&B는 모든 결과를 wandb.ai에 로깅합니다.

트레이닝 로직 정의하기

이제 model_pipeline에서 train을 어떻게 수행할지 정의할 차례입니다. 여기서 W&B integration은 트레이닝이 진행되는 동안 그라디언트, 파라미터, 메트릭을 추적합니다. 여기서는 wandb의 두 함수인 watchlog를 사용합니다.

run.watch()로 그라디언트를 추적하고, 나머지는 모두 run.log()로 로깅하기

run.watch()는 모델의 그라디언트와 파라미터를 트레이닝 중 매 log_freq step마다 로깅합니다. 트레이닝을 시작하기 전에 run.watch()를 호출하세요. 로그 모드, 여러 모델, 성능 팁은 wandb.watch로 그라디언트와 모델 가중치를 로깅하려면 어떻게 하나요?를 참조하세요. 나머지 트레이닝 코드는 그대로입니다: 에포크와 배치를 순회하면서 forward 및 backward pass를 수행하고 optimizer를 적용합니다.
유일한 차이는 로깅 코드입니다: 이전에는 메트릭을 터미널에 출력했다면, 이제는 같은 정보를 run.log()에 전달합니다. run.log()는 키가 문자열인 딕셔너리를 받습니다. 이 문자열은 로깅할 객체를 식별하고, 해당 객체가 값이 됩니다. 현재 트레이닝의 몇 번째 step인지도 선택적으로 로깅할 수 있습니다.
참고: 모델이 지금까지 본 예제 수를 사용하면 batch size가 달라도 비교하기가 더 쉽지만, 단순 step 수나 batch 개수를 사용해도 됩니다. 트레이닝 run이 더 길다면 epoch 기준으로 로깅하는 것도 의미가 있습니다.

테스트 로직 정의

모델의 트레이닝이 끝나면 이를 테스트합니다: 예를 들어 프로덕션의 새로운 데이터에 실행해 보거나, 직접 엄선한 예제에 적용할 수 있습니다. 또한 테스트는 트레이닝된 모델을 저장하기에 자연스러운 시점이기도 합니다.

선택 사항: run.save() 호출

지금은 모델의 아키텍처와 최종 파라미터를 디스크에 저장해 두기에도 좋은 시점입니다. 폭넓은 호환성을 위해 모델을 Open Neural Network eXchange (ONNX) 형식으로 export하세요. 해당 파일명을 run.save()에 전달하면 모델 파라미터가 W&B 서버에 저장되므로, 어떤 .h5 또는 .pb 파일이 어떤 트레이닝 run에 해당하는지 더 이상 놓치지 않게 됩니다. 모델을 저장하고, 버전 관리하고, 배포하는 더 고급 wandb 기능은 Artifacts 도구를 확인하세요.

트레이닝을 실행하고 wandb.ai에서 메트릭을 실시간으로 확인하세요

이제 전체 파이프라인을 정의하고 W&B 코드 몇 줄을 추가했으니, 완전히 추적되는 실험을 실행할 준비가 되었습니다. W&B는 몇 가지 링크를 제공합니다. 문서, 프로젝트의 모든 Runs를 정리하는 Project 페이지, 그리고 이번 run의 결과가 저장되는 Run 페이지입니다. Run 페이지로 이동하여 다음 탭을 확인하세요:
  1. Charts: 모델 그라디언트, 파라미터 값, loss가 트레이닝 전반에 걸쳐 로깅됩니다.
  2. System: 디스크 I/O 사용량과 CPU 및 GPU 메트릭을 포함한 system 메트릭이 표시됩니다.
  3. Logs: 트레이닝 중 표준 출력으로 전송된 모든 내용의 복사본이 있습니다.
  4. Files: 트레이닝이 완료되면 model.onnx를 클릭해 Netron model viewer에서 네트워크를 확인할 수 있습니다.
run이 완료되어 with wandb.init() 블록이 종료되면, W&B는 셀 출력에도 결과 요약을 출력합니다.

스윕으로 하이퍼파라미터 테스트하기

이 예제에서는 하나의 하이퍼파라미터 집합만 살펴보았습니다. 대부분의 ML 워크플로에서 중요한 부분은 여러 하이퍼파라미터를 반복적으로 시험해 보는 것입니다. W&B Sweeps를 사용하면 하이퍼파라미터 테스트를 자동화하고 가능한 모델 및 최적화 전략의 범위를 탐색할 수 있습니다. 이를 통해 앞서의 단일 설정 run을 넘어 더 확장할 수 있습니다. W&B Sweeps를 사용한 하이퍼파라미터 최적화를 보여주는 Colab 노트북을 확인하세요. W&B로 하이퍼파라미터 스윕을 실행하는 데는 세 단계가 필요합니다.
  1. 스윕 정의: 검색할 하이퍼파라미터, 검색 전략, 최적화 metric 등을 지정하는 딕셔너리 또는 YAML 파일을 만드세요.
  2. 스윕 초기화: sweep_id = wandb.sweep(sweep_config).
  3. 스윕 에이전트 실행: wandb.agent(sweep_id, function=train).
이것으로 하이퍼파라미터 스윕 실행이 완료됩니다.
PyTorch 트레이닝 대시보드
W&B로 추적하고 시각화한 프로젝트 예제를 Gallery에서 확인해 보세요.

고급 설정

다음 옵션을 사용하면 이전의 기본 워크플로를 프로덕션, 오프라인 또는 관리형 환경에 맞게 확장할 수 있습니다:
  • 환경 변수: 관리형 클러스터에서 트레이닝을 실행할 수 있도록 환경 변수에 API 키를 설정합니다.
  • 오프라인 모드: dryrun 모드를 사용해 오프라인으로 트레이닝한 뒤, 나중에 결과를 동기화합니다.
  • 온프레미스: 자체 인프라의 프라이빗 클라우드 또는 외부망과 격리된 서버에 W&B를 설치합니다.
  • 스윕: 경량 튜닝 도구로 하이퍼파라미터 검색을 빠르게 설정합니다.