메인 콘텐츠로 건너뛰기
이 가이드는 하이퍼파라미터 검색 최적화를 위해 Python 트레이닝 스크립트 또는 노트북에 W&B를 통합하는 방법에 대한 권장 사항을 안내합니다. 이러한 권장 사항을 따르면 W&B Sweeps를 사용해 하이퍼파라미터 값을 탐색하고, 트레이닝 및 검증 메트릭을 기록하며, 우수한 모델 성능을 내는 설정을 파악할 수 있습니다. 이 가이드는 이미 Python 트레이닝 스크립트가 있고 하이퍼파라미터 스윕 지원을 추가하려는 머신 러닝 실무자를 위한 것입니다. 다음 섹션에서는 예시 트레이닝 스크립트를 살펴본 다음, 이를 W&B Sweeps와 함께 작동하도록 업데이트하는 방법을 보여줍니다.

원본 트레이닝 스크립트

모델을 트레이닝하는 Python 스크립트가 있다고 가정해 보겠습니다(아래 코드를 참조하세요). 목표는 검증 정확도(val_acc)를 최대화하는 하이퍼파라미터를 찾는 것입니다. Python 스크립트에서는 train_one_epochevaluate_one_epoch라는 두 개의 함수를 정의합니다. train_one_epoch 함수는 한 에포크 동안의 트레이닝을 시뮬레이션하고 트레이닝 정확도와 loss를 반환합니다. evaluate_one_epoch 함수는 검증 데이터 세트에서 모델을 평가하는 과정을 시뮬레이션하고 검증 정확도와 loss를 반환합니다. 그다음 학습률, 배치 크기, 에포크 수와 같은 하이퍼파라미터 값이 포함된 config라는 설정 딕셔너리를 정의합니다. 이 설정 딕셔너리의 값은 트레이닝 프로세스를 제어합니다. 다음으로, 일반적인 트레이닝 루프를 모방한 main 함수를 정의합니다. 각 에포크마다 스크립트는 트레이닝 데이터 세트와 검증 데이터 세트에 대한 정확도와 loss를 계산합니다.
이 코드는 모의 트레이닝 스크립트입니다. 실제로 모델을 트레이닝하지는 않으며, 무작위 정확도와 loss 값을 생성해 트레이닝 과정을 시뮬레이션합니다. 이 코드의 목적은 트레이닝 스크립트에 W&B를 통합하는 방법을 보여주는 것입니다.
다음 섹션에서는 트레이닝 중 하이퍼파라미터와 메트릭을 추적하기 위해 Python 스크립트에 W&B를 추가하는 방법을 보여줍니다. 검증 정확도(val_acc)를 최대화하는 최적의 하이퍼파라미터를 찾기 위해 W&B를 사용해 보겠습니다.

트레이닝 스크립트에 W&B 추가

이 섹션에서는 스윕 에이전트가 각 run에 하이퍼파라미터 값을 전달하고 W&B가 그 결과 메트릭을 기록할 수 있도록 원래 트레이닝 스크립트를 수정하는 방법을 설명합니다. W&B를 Python 스크립트 또는 노트북에 어떻게 통합할지는 Sweeps를 관리하는 방식에 따라 달라집니다. W&B Python SDK를 사용해 Sweeps를 시작, 중지, 관리하려면 Python script or notebook 탭의 지침을 따르세요. 대신 W&B CLI를 사용하려면 CLI 탭의 지침을 따르세요.
스윕 설정이 담긴 YAML 설정 파일을 만드세요. 설정 파일에는 스윕에서 탐색할 하이퍼파라미터가 포함됩니다. 다음 예시에서는 각 run에서 batch_size, epochs, lr 하이퍼파라미터를 변경합니다.
자세한 내용은 스윕 설정 정의를 참조하세요.YAML 파일의 program 키에 Python 스크립트 이름을 지정해야 합니다.다음으로, 코드 예시에 다음 내용을 추가하세요.
  1. W&B Python SDK(wandb)와 PyYAML(yaml)을 임포트합니다. PyYAML을 사용해 YAML 설정 파일을 읽어옵니다.
  2. 설정 파일을 읽어옵니다.
  3. wandb.init()을 사용해 데이터를 동기화하고 로깅하는 백그라운드 프로세스를 시작합니다. config 객체를 config 매개변수에 전달하세요.
  4. 하드코딩된 값을 사용하는 대신 wandb.Run.config에서 하이퍼파라미터 값을 정의합니다.
  5. wandb.Run.log()를 사용해 최적화할 메트릭을 기록합니다. wandb.Run에 대한 자세한 내용은 W&B Run을 참조하세요. 설정에 정의된 메트릭을 반드시 기록해야 합니다. 설정 딕셔너리(이 예제에서는 sweep_configuration)에서 val_acc 값을 최대화하도록 스윕을 정의합니다.
트레이닝 스크립트를 업데이트한 후, CLI에서 스윕을 초기화하고 시작하세요:
  1. wandb sweep 명령어로 스윕을 초기화합니다. YAML 파일 이름을 지정하세요. 필요에 따라 --project 플래그를 프로젝트 이름으로 설정할 수 있습니다:
    그러면 스윕 ID가 반환됩니다. 자세한 내용은 스윕 초기화를 참조하세요.
  2. 스윕 ID를 복사한 다음, wandb agent 명령어로 스윕 작업을 시작할 수 있도록 아래 명령어의 [SWEEP-ID]를 바꾸세요. [YOUR-ENTITY]는 W&B entity 이름으로 바꾸세요. 필요에 따라 --count를 설정해 에이전트가 시도하는 Runs 수를 제한할 수 있습니다(이 예제에서는 5로 설정합니다):
스윕 에이전트는 YAML 설정의 하이퍼파라미터 값 조합을 매번 다르게 적용해 트레이닝 스크립트를 반복 실행하고, 결과를 W&B에 로깅합니다. 자세한 내용은 스윕 작업 시작을 참조하세요.
스윕에서 W&B에 메트릭 로깅하기스윕 설정과 wandb.Run.log()에서 모두 정의한, 그리고 최적화 대상으로 지정한 메트릭을 반드시 로깅해야 합니다. 예를 들어 스윕 설정에서 최적화할 메트릭을 val_acc로 정의했다면, val_acc도 W&B에 로깅해야 합니다. 메트릭을 로깅하지 않으면 W&B는 최적화를 수행할 수 없습니다.
다음은 메트릭을 W&B에 로깅하는 올바르지 않은 예입니다. 스윕 설정은 val_acc를 최적화 대상으로 사용하지만, 코드에서는 validation 키 아래의 중첩된 딕셔너리 안에 val_acc를 로깅하고 있습니다. 메트릭은 중첩된 딕셔너리 안이 아니라 직접 로깅해야 합니다.