이 페이지에서는 스윕을 정의하고 초기화해 실행하는 방법을 설명합니다. 주요 단계는 네 가지입니다:
- 학습 코드를 설정합니다
- 스윕 설정으로 탐색 공간을 정의합니다
- 스윕을 초기화합니다
- 스윕 에이전트를 시작합니다
다음 코드를 Jupyter Notebook 또는 Python 스크립트에 복사해 붙여넣으세요:
# W&B Python 라이브러리를 가져오고 W&B에 로그인
import wandb
# 1: 목적/학습 함수 정의
def objective(config):
score = config.x**3 + config.y
return score
def main():
with wandb.init(project="my-first-sweep") as run:
score = objective(run.config)
run.log({"score": score})
# 2: 탐색 공간 정의
sweep_configuration = {
"method": "random",
"metric": {"goal": "minimize", "name": "score"},
"parameters": {
"x": {"max": 0.1, "min": 0.01},
"y": {"values": [1, 3, 7]},
},
}
# 3: Sweep 시작
sweep_id = wandb.sweep(sweep=sweep_configuration, project="my-first-sweep")
wandb.agent(sweep_id, function=main, count=10)
다음 섹션에서는 코드 예제의 각 단계를 단계별로 설명합니다.
wandb.Run.config에서 하이퍼파라미터 값을 받아 이를 사용해 모델을 학습하고 메트릭을 반환하는 학습 함수를 정의합니다.
필요하다면 W&B 실행 결과를 저장할 Project 이름을 지정합니다 (wandb.init()의 project 파라미터, 참고: wandb.init()). Project를 지정하지 않으면 실행은 “Uncategorized” 프로젝트로 분류됩니다.
sweep과 실행은 모두 동일한 프로젝트에 있어야 합니다. 따라서 W&B를 초기화할 때 지정하는 프로젝트 이름과 sweep을 초기화할 때 지정하는 프로젝트 이름이 일치해야 합니다.
# 1: 목적/학습 함수 정의
def objective(config):
score = config.x**3 + config.y
return score
def main():
with wandb.init(project="my-first-sweep") as run:
score = objective(run.config)
run.log({"score": score})
딕셔너리에서 스윕할 하이퍼파라미터를 지정합니다. 구성 옵션은 스윕 구성 정의를 참조하세요.
다음 예시는 랜덤 검색('method':'random')을 사용하는 스윕 구성을 보여 줍니다. 스윕은 배치 크기, epoch, 학습률에 대해 구성에 나열된 값들 중 무작위로 하나의 조합을 선택합니다.
W&B는 "goal": "minimize"가 설정된 경우 metric 키에 지정된 지표를 최소화합니다. 이 경우 W&B는 지표 score("name": "score")를 최소화하도록 최적화합니다.
# 2: 탐색 공간 정의
sweep_configuration = {
"method": "random",
"metric": {"goal": "minimize", "name": "score"},
"parameters": {
"x": {"max": 0.1, "min": 0.01},
"y": {"values": [1, 3, 7]},
},
}
W&B는 클라우드(standard)나 로컬(local) 환경에서 하나 이상의 머신에 걸쳐 스윕을 관리하기 위해 Sweep Controller를 사용합니다. Sweep Controller에 대한 자세한 내용은 로컬에서 Search 및 stop 알고리즘 실행을 참고하세요.
스윕을 초기화하면 스윕 식별자(ID)가 반환됩니다:
sweep_id = wandb.sweep(sweep=sweep_configuration, project="my-first-sweep")
스윕을 초기화하는 방법에 대한 자세한 내용은 스윕 초기화를 참조하세요.
wandb.agent() API 호출을 사용해 Sweep을 시작합니다.
wandb.agent(sweep_id, function=main, count=10)
멀티프로세싱Python 표준 라이브러리의 multiprocessing 또는 PyTorch의 pytorch.multiprocessing 패키지를 사용하는 경우, wandb.agent() 및 wandb.sweep() 호출을 if __name__ == '__main__': 블록으로 감싸야 합니다. 예를 들어:if __name__ == '__main__':
wandb.agent(sweep_id="<sweep_id>", function="<function>", count="<count>")
코드를 이 관용구로 감싸면, 스크립트가 워커 프로세스에서 모듈로 임포트될 때가 아니라 직접 실행될 때에만 코드가 실행되도록 보장합니다.멀티프로세싱에 대한 자세한 내용은 Python 표준 라이브러리 multiprocessing 또는 PyTorch multiprocessing를 참조하세요. if __name__ == '__main__': 관용구에 대한 정보는 https://realpython.com/if-name-main-python/를 참조하세요.
W&B App 대시보드에서 프로젝트를 열어 라이브 결과를 확인하세요. 몇 번의 클릭만으로 평행좌표 플롯, 파라미터 중요도 분석, 추가 차트 유형과 같은 풍부한 인터랙티브 차트를 쉽게 구성할 수 있습니다.
결과를 시각화하는 방법에 대한 자세한 내용은 스윕 결과 시각화를 참조하세요. 대시보드 예시는 이 샘플 Sweeps Project에서 확인하세요.
터미널에서 Ctrl+C를 눌러 현재 실행을 중지합니다. 한 번 더 눌러 에이전트를 종료합니다.