원본 트레이닝 스크립트
val_acc)를 최대화하는 하이퍼파라미터를 찾는 것입니다.
Python 스크립트에서는 train_one_epoch와 evaluate_one_epoch라는 두 개의 함수를 정의합니다. train_one_epoch 함수는 한 에포크 동안의 트레이닝을 시뮬레이션하고 트레이닝 정확도와 loss를 반환합니다. evaluate_one_epoch 함수는 검증 데이터 세트에서 모델을 평가하는 과정을 시뮬레이션하고 검증 정확도와 loss를 반환합니다.
그다음 학습률, 배치 크기, 에포크 수와 같은 하이퍼파라미터 값이 포함된 config라는 설정 딕셔너리를 정의합니다. 이 설정 딕셔너리의 값은 트레이닝 프로세스를 제어합니다.
다음으로, 일반적인 트레이닝 루프를 모방한 main 함수를 정의합니다. 각 에포크마다 스크립트는 트레이닝 데이터 세트와 검증 데이터 세트에 대한 정확도와 loss를 계산합니다.
이 코드는 모의 트레이닝 스크립트입니다. 실제로 모델을 트레이닝하지는 않으며, 무작위 정확도와 loss 값을 생성해 트레이닝 과정을 시뮬레이션합니다. 이 코드의 목적은 트레이닝 스크립트에 W&B를 통합하는 방법을 보여주는 것입니다.
val_acc)를 최대화하는 최적의 하이퍼파라미터를 찾기 위해 W&B를 사용해 보겠습니다.
트레이닝 스크립트에 W&B 추가
- CLI
- Python 스크립트 또는 노트북
스윕 설정이 담긴 YAML 설정 파일을 만드세요. 설정 파일에는 스윕에서 탐색할 하이퍼파라미터가 포함됩니다. 다음 예시에서는 각 run에서 자세한 내용은 스윕 설정 정의를 참조하세요.YAML 파일의 트레이닝 스크립트를 업데이트한 후, CLI에서 스윕을 초기화하고 시작하세요:
batch_size, epochs, lr 하이퍼파라미터를 변경합니다.program 키에 Python 스크립트 이름을 지정해야 합니다.다음으로, 코드 예시에 다음 내용을 추가하세요.- W&B Python SDK(
wandb)와 PyYAML(yaml)을 임포트합니다. PyYAML을 사용해 YAML 설정 파일을 읽어옵니다. - 설정 파일을 읽어옵니다.
wandb.init()을 사용해 데이터를 동기화하고 로깅하는 백그라운드 프로세스를 시작합니다.config객체를config매개변수에 전달하세요.- 하드코딩된 값을 사용하는 대신
wandb.Run.config에서 하이퍼파라미터 값을 정의합니다. wandb.Run.log()를 사용해 최적화할 메트릭을 기록합니다.wandb.Run에 대한 자세한 내용은 W&B Run을 참조하세요. 설정에 정의된 메트릭을 반드시 기록해야 합니다. 설정 딕셔너리(이 예제에서는sweep_configuration)에서val_acc값을 최대화하도록 스윕을 정의합니다.
-
wandb sweep명령어로 스윕을 초기화합니다. YAML 파일 이름을 지정하세요. 필요에 따라--project플래그를 프로젝트 이름으로 설정할 수 있습니다:그러면 스윕 ID가 반환됩니다. 자세한 내용은 스윕 초기화를 참조하세요. -
스윕 ID를 복사한 다음,
wandb agent명령어로 스윕 작업을 시작할 수 있도록 아래 명령어의[SWEEP-ID]를 바꾸세요.[YOUR-ENTITY]는 W&B entity 이름으로 바꾸세요. 필요에 따라--count를 설정해 에이전트가 시도하는 Runs 수를 제한할 수 있습니다(이 예제에서는 5로 설정합니다):
스윕에서 W&B에 메트릭 로깅하기스윕 설정과 다음은 메트릭을 W&B에 로깅하는 올바르지 않은 예입니다. 스윕 설정은
wandb.Run.log()에서 모두 정의한, 그리고 최적화 대상으로 지정한 메트릭을 반드시 로깅해야 합니다. 예를 들어 스윕 설정에서 최적화할 메트릭을 val_acc로 정의했다면, val_acc도 W&B에 로깅해야 합니다. 메트릭을 로깅하지 않으면 W&B는 최적화를 수행할 수 없습니다.val_acc를 최적화 대상으로 사용하지만, 코드에서는 validation 키 아래의 중첩된 딕셔너리 안에 val_acc를 로깅하고 있습니다. 메트릭은 중첩된 딕셔너리 안이 아니라 직접 로깅해야 합니다.