메인 콘텐츠로 건너뛰기
하이퍼파라미터 컨트롤러는 기본적으로 클라우드 서비스 형태로 호스팅됩니다. W&B 에이전트는 컨트롤러와 통신하여 트레이닝에 사용할 다음 파라미터 세트를 확인합니다. 또한 컨트롤러는 어떤 run을 중지할 수 있는지 판단하기 위해 조기 중지 알고리즘을 실행하는 역할도 합니다. 로컬 컨트롤러 기능을 사용하면 검색 및 중지 알고리즘을 로컬에서 실행할 수 있습니다. 로컬 컨트롤러를 사용하면 문제를 디버그하고, 클라우드 서비스에 통합할 수 있는 새로운 기능을 개발할 수 있도록 코드를 검사하고 계측할 수 있습니다.
이 기능은 Sweeps 도구의 새 알고리즘을 더 빠르게 개발하고 디버깅할 수 있도록 제공됩니다. 실제 하이퍼파라미터 최적화 워크로드용은 아닙니다.
시작하기 전에 W&B SDK(wandb)를 설치해야 합니다. 다음 코드 스니펫을 명령줄에 입력하세요:
pip install wandb sweeps 
다음 예에서는 Python 스크립트 또는 Jupyter Notebook에 이미 설정 파일과 트레이닝 루프가 정의되어 있다고 가정합니다. 설정 파일을 정의하는 방법에 대한 자세한 내용은 sweep 설정 정의하기를 참조하세요.

명령줄에서 로컬 컨트롤러 실행

일반적으로 W&B가 클라우드 서비스로 호스팅하는 하이퍼파라미터 컨트롤러를 사용할 때와 비슷한 방식으로 sweep을 초기화합니다. W&B sweep 작업에 로컬 컨트롤러를 사용하려는 경우, 이를 나타내는 컨트롤러 플래그(controller)를 지정하세요:
wandb sweep --controller config.yaml
또는 sweep 초기화와 로컬 컨트롤러를 사용하도록 지정하는 작업을 두 step으로 나눌 수 있습니다. step을 나누려면 먼저 sweep의 YAML 설정 파일에 다음 키-값 쌍을 추가하세요:
controller:
  type: local
다음으로, sweep을 초기화합니다:
wandb sweep config.yaml
wandb sweep는 sweep ID를 생성합니다. sweep를 초기화한 후 wandb controller로 컨트롤러를 시작하세요:
wandb controller {user}/{entity}/{sweep_id}
로컬 컨트롤러를 사용하도록 지정한 후에는 sweep을 실행하기 위해 하나 이상의 Sweep agent를 시작하세요. 평소와 비슷한 방식으로 W&B Sweep을 시작하세요. 자세한 내용은 Sweep agent 시작을 참조하세요.
wandb sweep sweep_ID

W&B Python SDK로 로컬 컨트롤러 실행

다음 코드 스니펫은 W&B Python SDK에서 로컬 컨트롤러를 지정하고 사용하는 방법을 보여줍니다. Python SDK에서 컨트롤러를 사용하는 가장 간단한 방법은 wandb.controller()에 sweep ID를 전달하는 것입니다. 그런 다음 반환된 객체의 run 메서드를 사용해 sweep 작업을 시작합니다:
sweep = wandb.controller(sweep_id)
sweep.run()
컨트롤러 루프를 더 세밀하게 제어하고 싶다면:
import wandb

sweep = wandb.controller(sweep_id)
while not sweep.done():
    sweep.print_status()
    sweep.step()
    time.sleep(5)
또는 서빙할 파라미터를 더욱 세밀하게 제어할 수도 있습니다:
import wandb

sweep = wandb.controller(sweep_id)
while not sweep.done():
    params = sweep.search()
    sweep.schedule(params)
    sweep.print_status()
sweep를 전부 코드로 지정하려면 다음과 같이 할 수 있습니다:
import wandb

sweep = wandb.controller()
sweep.configure_search("grid")
sweep.configure_program("train-dummy.py")
sweep.configure_controller(type="local")
sweep.configure_parameter("param1", value=3)
sweep.create()
sweep.run()