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