메인 콘텐츠로 건너뛰기
스윕은 하이퍼파라미터 값을 탐색하는 전략과 그 값을 평가하는 코드를 결합합니다. 이 전략은 모든 옵션을 하나씩 시도하는 단순한 방식일 수도 있고, 베이즈 최적화와 Hyperband(BOHB)처럼 복잡한 방식일 수도 있습니다. 이 가이드에서는 어떤 하이퍼파라미터를 검색할지, 어떤 검색 전략을 사용할지, 그리고 각 run을 어떻게 평가할지 지정하는 스윕 설정을 정의하는 방법을 보여줍니다. 새 스윕을 설정하거나 기존 설정을 다른 검색 방법 또는 파라미터 공간에 맞게 조정할 때 사용하세요. 스윕 설정은 Python 딕셔너리 또는 YAML 파일로 정의할 수 있습니다. 스윕 설정을 어떻게 정의할지는 스윕을 어떤 방식으로 관리하려는지에 따라 달라집니다.
명령줄에서 스윕을 초기화하고 스윕 에이전트를 시작하려면 YAML 파일에 스윕 설정을 정의하세요. Python 스크립트 또는 노트북 내에서 스윕을 완전히 초기화하고 시작하려면 Python 딕셔너리에 스윕을 정의하세요.
다음 섹션에서는 스윕 설정 형식을 설명합니다. 최상위 스윕 설정 키의 전체 목록은 Sweep configuration options에서 확인하세요.

기본 구조

스윕 설정은 YAML 또는 Python 딕셔너리를 사용해 키-값 쌍과 중첩 구조로 정의됩니다. 스윕 설정의 최상위 키를 사용해 스윕 name, 검색할 parameters, 검색 method와 같은 스윕 검색의 속성을 정의하세요. 예를 들어, 다음 코드 스니펫은 YAML 파일과 Python 딕셔너리에 정의된 동일한 스윕 설정을 보여줍니다. 이 스윕 설정에는 program, name, method, metric, parameters의 다섯 가지 최상위 키가 지정되어 있습니다.
명령줄에서 대화형으로 스윕를 관리하려면 YAML 파일에 스윕 설정을 정의하세요.
config.yaml
최상위 parameters 키 안에는 learning_rate, batch_size, epochs, optimizer 키가 중첩되어 있습니다. 지정한 각 중첩 키에는 하나 이상의 값, 분포, 확률 등을 제공할 수 있습니다. 자세한 내용은 Sweep configuration optionsparameters 섹션을 참조하세요.

이중 중첩 매개변수

관련된 하이퍼파라미터를 함께 그룹화하거나 트레이닝 코드에서 중첩된 설정 구조를 기대하는 경우 중첩 매개변수를 사용하세요. 중첩 매개변수를 정의하려면 최상위 매개변수 이름 아래에 parameters 키를 하나 더 추가하세요. 다음 예시는 nested_category_1, nested_category_2, nested_category_3의 중첩 매개변수가 포함된 스윕 설정을 보여주며, 각 매개변수에는 momentumweight_decay라는 추가 매개변수가 포함됩니다. 다음 코드 예제는 YAML 파일과 Python 딕셔너리에서 이 설정을 보여줍니다.
스윕 설정에 정의된 중첩 매개변수는 W&B run 설정에 지정된 키를 덮어씁니다.예를 들어, 중첩된 기본값으로 run을 초기화하는 train.py 스크립트가 있다고 가정해 보겠습니다.
스윕 설정에서는 최상위 "parameters" 키 아래에 중첩 매개변수를 정의합니다.
스윕 run 중에는 run.config["nested_param"]에 스윕 설정(learning_ratedouble_nested_param)으로 정의된 하위 트리가 반영됩니다. 여기에는 wandb.init(config=...)에 정의된 manual_key는 포함되지 않습니다.

스윕 설정 템플릿

이 템플릿을 새 스윕 설정의 출발점으로 사용하세요. 가장 일반적인 파라미터와 조기 종료 패턴을 보여줍니다. hyperparameter_name은 하이퍼파라미터 이름으로, 대괄호로 묶인 값은 적절한 값으로 바꾸세요.
config.yaml
숫자 값을 과학적 표기법으로 표현하려면 YAML !!float 연산자를 추가하세요. 이 연산자는 값을 부동소수점 숫자로 변환합니다. 예를 들어 min: !!float 1e-5와 같습니다. 자세한 내용은 매크로 및 맞춤형 command 인수 예시를 참조하세요.

Sweep 설정 예시

다음 스윕 설정은 일반적으로 사용되는 시나리오를 보여줍니다. 자신의 트레이닝 스크립트에 맞게 스윕을 조정할 때 참고하세요.
config.yaml

Bayes hyperband 예제

다음 예제는 베이지안 탐색과 Hyperband 조기 종료를 결합해 성능이 낮은 run을 조기에 중단하고, 더 유망한 설정에 리소스를 확보합니다.
다음 탭에서는 early_terminate의 최소 또는 최대 반복 횟수를 지정하는 방법을 보여줍니다:
이 예제의 브래킷은 [3, 3*eta, 3*eta*eta, 3*eta*eta*eta]이며, [3, 9, 27, 81]와 같습니다.

매크로 및 맞춤형 명령줄 인수 예시

이 예제에서는 기본 호출보다 더 세밀한 제어가 필요할 때 스윕 에이전트가 각 trial에 대해 실행하는 명령을 구성하는 방법을 보여줍니다. 더 복잡한 명령줄 인수의 경우, 매크로를 사용해 환경 변수, Python 인터프리터, 추가 인수를 전달할 수 있습니다. W&B는 사전 정의된 매크로와 스윕 설정에서 지정할 수 있는 맞춤형 명령줄 인수를 지원합니다. 예를 들어, 다음 스윕 설정(sweep.yaml)은 Python 스크립트(run.py)를 실행하는 명령을 정의하며, 스윕이 실행될 때 ${env}, ${interpreter}, ${program} 매크로가 적절한 값으로 대체됩니다. --batch_size=${batch_size}, --test=True, --optimizer=${optimizer} 인수는 맞춤형 매크로를 사용해 스윕 설정에 정의된 batch_size, test, optimizer 매개변수의 값을 전달합니다.
sweep.yaml
그러면 연결된 Python 스크립트 run.py에서 argparse 모듈을 사용해 이러한 명령줄 인수를 파싱할 수 있습니다:
run.py
스윕 설정에서 사용할 수 있는 미리 정의된 매크로 목록은 Sweep configuration optionsCommand 매크로 섹션을 참조하세요.

불리언 인수

스윕이 명령 인수를 통해 불리언 플래그를 전달하는 경우, argparse는 기본적으로 불리언 문자열을 해석하지 않으므로 트레이닝 스크립트에서 추가 처리가 필요합니다. argparse 모듈은 기본적으로 불리언 인수를 지원하지 않습니다. 불리언 인수를 정의하려면 action 매개변수를 사용하거나, 불리언 값을 나타내는 문자열을 불리언 유형으로 변환하는 맞춤형 함수를 사용할 수 있습니다. 예를 들어, 다음 코드 스니펫을 사용해 불리언 인수를 정의할 수 있습니다. ArgumentParser에 인수로 store_true 또는 store_false를 전달하세요:
불리언 값의 문자열 표현을 불리언 유형으로 변환하는 맞춤형 함수를 직접 정의할 수도 있습니다. 예를 들어, 다음 코드 예제는 문자열을 불리언 값으로 변환하는 str2bool 함수를 정의합니다: