
이 노트북에서 다루는 내용
PyTorch 코드와 W&B를 통합하여 파이프라인에 실험 트래킹 기능을 추가하는 방법을 보여드립니다.
설치, 임포트 및 로그인
Step 0: W&B 설치
시작하기 위해 라이브러리를 설치해야 합니다.wandb는 pip를 사용하여 쉽게 설치할 수 있습니다.
Step 1: W&B 임포트 및 로그인
웹 서비스에 데이터를 로그하기 위해 로그인이 필요합니다. W&B를 처음 사용하시는 경우, 표시되는 링크를 통해 무료 계정에 가입해야 합니다.실험 및 파이프라인 정의
wandb.init으로 메타데이터 및 하이퍼파라미터 트래킹
프로그램적으로 가장 먼저 할 일은 실험을 정의하는 것입니다:
하이퍼파라미터는 무엇인가요? 이 run과 관련된 메타데이터는 무엇인가요?
이러한 정보를 config 사전(또는 유사한 오브젝트)에 저장한 다음
필요할 때 액세스하는 것이 일반적인 워크플로우입니다.
이 예제에서는 몇 가지 하이퍼파라미터만 가변적으로 설정하고
나머지는 하드코딩합니다.
하지만 모델의 어떤 부분이라도 config의 일부가 될 수 있습니다.
또한 메타데이터를 포함합니다: 여기서는 MNIST 데이터셋과 컨볼루션
아키텍처를 사용합니다. 나중에 동일한 프로젝트에서 CIFAR의
완전 연결(fully connected) 아키텍처로 작업한다면,
이 정보가 run을 구분하는 데 도움이 될 것입니다.
- 먼저 모델, 관련 데이터 및 옵티마이저를
make하고, - 이에 따라 모델을
train시킨 다음, 마지막으로 - 트래닝이 잘 되었는지 확인하기 위해
test합니다.
wandb.init 컨텍스트 내에서 발생한다는 것입니다.
이 함수를 호출하면 사용자 코드와
W&B 서버 사이에 통신 라인이 설정됩니다.
config 사전을 wandb.init에 전달하면
즉시 모든 정보가 로그되어, 실험에 설정한
하이퍼파라미터 값을 항상 알 수 있습니다.
선택하고 로그한 값이 모델에서 항상 사용되도록 하려면,
오브젝트의 복사본인 run.config를 사용하는 것을 권장합니다.
아래 make 정의에서 몇 가지 예시를 확인하세요.
참고: 당사는 코드를 별도의 프로세스에서 실행하도록 관리하여,
당사 측의 문제(예: 거대 바다 괴물이 데이터 센터를 공격하는 경우 등)가
사용자의 코드를 중단시키지 않도록 합니다.
문제가 해결되면(예: 크라켄이 심해로 돌아간 후),
wandb sync로 데이터를 로그할 수 있습니다.
데이터 로딩 및 모델 정의
이제 데이터를 로드하는 방법과 모델의 구조를 지정해야 합니다. 이 부분은 매우 중요하지만,wandb가 없을 때와
다를 바 없으므로 자세히 설명하지 않겠습니다.
wandb를 사용해도 바뀌는 것은 없으므로,
표준 ConvNet 아키텍처를 그대로 사용하겠습니다.
이것저것 시도해보며 실험하는 것을 두려워하지 마세요.
모든 결과는 wandb.ai에 로그됩니다.
트래닝 로직 정의
model_pipeline의 다음 단계로, train 방법을 지정할 차례입니다.
여기서는 watch와 log, 두 가지 wandb 함수가 사용됩니다.
run.watch()로 그레이디언트 트래킹 및 run.log()로 모든 것을 기록
run.watch는 트래닝 중에 매 log_freq 스텝마다
모델의 그레이디언트와 파라미터를 로그에 기록합니다.
트래닝을 시작하기 전에 이 함수를 호출하기만 하면 됩니다.
나머지 트래닝 코드는 동일합니다:
에포크와 배치를 반복하며, forward 및 backward 패스를 실행하고
optimizer를 적용합니다.
run.log()에 전달합니다.
run.log()는 문자열을 키로 하는 사전을 인자로 받습니다.
이 문자열은 로그되는 오브젝트를 식별하며, 그 값이 로그 데이터가 됩니다.
선택적으로 현재 트래닝 중인 step을 함께 로그할 수도 있습니다.
참고: 저는 모델이 학습한 샘플 수를 사용하는 것을 선호합니다.
이렇게 하면 배치 크기가 달라도 비교하기가 더 쉽기 때문입니다. 하지만 원시 스텝이나 배치 수를 사용할 수도 있습니다. 트래닝 기간이 긴 경우 epoch 단위로 로그를 기록하는 것도 합리적입니다.
테스트 로직 정의
모델 트래닝이 끝나면 테스트를 수행해야 합니다: 프로덕션의 새로운 데이터에 대해 실행하거나, 직접 선별한 예제에 적용해 볼 수 있습니다.(선택 사항) run.save() 호출
이 시점은 모델의 아키텍처와 최종 파라미터를 디스크에 저장하기에도 좋은 때입니다.
최대한의 호환성을 위해 모델을
Open Neural Network eXchange (ONNX) 형식으로 export 하겠습니다.
해당 파일 이름을 run.save()에 전달하면 모델 파라미터가
W&B 서버에 저장됩니다. 더 이상 어떤 .h5 또는 .pb 파일이
어떤 트래닝 run에 해당하는지 찾아 헤맬 필요가 없습니다.
모델 저장, 버전 관리 및 배포를 위한 더 고급 wandb 기능은
Artifacts 툴을 확인해 보세요.
트래닝을 실행하고 wandb.ai에서 실시간 메트릭 확인
전체 파이프라인을 정의하고 W&B 코드 몇 줄을 추가했으니, 이제 전체 트래킹이 적용된 실험을 실행할 준비가 되었습니다. 몇 가지 링크가 제공될 것입니다: 사용자 문서, 프로젝트 내의 모든 run을 정리해 보여주는 Projects 페이지, 그리고 이 run의 결과가 저장될 Run 페이지입니다. Run 페이지로 이동하여 다음 탭들을 확인해 보세요:- Charts: 트래닝 전반에 걸쳐 모델의 그레이디언트, 파라미터 값, 손실이 로그되는 곳입니다.
- System: 디스크 I/O 사용량, CPU 및 GPU 메트릭(온도 상승 확인) 등 다양한 시스템 메트릭을 포함합니다.
- Logs: 트래닝 중 표준 출력(standard out)으로 전송된 모든 내용의 복사본이 있습니다.
- Files: 트래닝이 완료된 후
model.onnx를 클릭하여 Netron 모델 뷰어로 네트워크를 시각화할 수 있습니다.
with wandb.init 블록을 빠져나오면,
셀 출력에도 결과 요약이 인쇄됩니다.
Sweeps를 사용하여 하이퍼파라미터 테스트
이 예제에서는 단일 하이퍼파라미터 세트만 살펴보았습니다. 하지만 대부분의 ML 워크플로우에서 중요한 부분은 여러 하이퍼파라미터를 반복해서 테스트하는 것입니다. W&B Sweeps를 사용하여 하이퍼파라미터 테스트를 자동화하고 가능한 모델 및 최적화 전략의 공간을 탐색할 수 있습니다. W&B Sweeps를 사용한 하이퍼파라미터 최적화 데모 Colab 노트북을 확인해 보세요. W&B로 하이퍼파라미터 스윕을 실행하는 것은 매우 쉽습니다. 다음 3가지 간단한 단계만 거치면 됩니다:- 스윕 정의: 검색할 파라미터, 검색 전략, 최적화 메트릭 등을 지정하는 사전 또는 YAML 파일을 생성합니다.
-
스윕 초기화:
sweep_id = wandb.sweep(sweep_config) -
스윕 에이전트 실행:
wandb.agent(sweep_id, function=train)
