하이퍼파라미터 컨트롤러는 기본적으로 클라우드 서비스 형태로 호스팅됩니다. W&B 에이전트는 컨트롤러와 통신하여 트레이닝에 사용할 다음 파라미터 세트를 확인합니다. 또한 컨트롤러는 어떤 run을 중지할 수 있는지 판단하기 위해 조기 중지 알고리즘을 실행하는 역할도 합니다.
로컬 컨트롤러 기능을 사용하면 검색 및 중지 알고리즘을 로컬에서 실행할 수 있습니다. 로컬 컨트롤러를 사용하면 문제를 디버그하고, 클라우드 서비스에 통합할 수 있는 새로운 기능을 개발할 수 있도록 코드를 검사하고 계측할 수 있습니다.
이 기능은 Sweeps 도구의 새 알고리즘을 더 빠르게 개발하고 디버깅할 수 있도록 제공됩니다. 실제 하이퍼파라미터 최적화 워크로드용은 아닙니다.
시작하기 전에 W&B SDK(wandb)를 설치해야 합니다. 다음 코드 스니펫을 명령줄에 입력하세요:
다음 예에서는 Python 스크립트 또는 Jupyter Notebook에 이미 설정 파일과 트레이닝 루프가 정의되어 있다고 가정합니다. 설정 파일을 정의하는 방법에 대한 자세한 내용은 sweep 설정 정의하기를 참조하세요.
일반적으로 W&B가 클라우드 서비스로 호스팅하는 하이퍼파라미터 컨트롤러를 사용할 때와 비슷한 방식으로 sweep을 초기화합니다. W&B sweep 작업에 로컬 컨트롤러를 사용하려는 경우, 이를 나타내는 컨트롤러 플래그(controller)를 지정하세요:
wandb sweep --controller config.yaml
또는 sweep 초기화와 로컬 컨트롤러를 사용하도록 지정하는 작업을 두 step으로 나눌 수 있습니다.
step을 나누려면 먼저 sweep의 YAML 설정 파일에 다음 키-값 쌍을 추가하세요:
다음으로, sweep을 초기화합니다:
wandb sweep는 sweep ID를 생성합니다. sweep를 초기화한 후 wandb controller로 컨트롤러를 시작하세요:
wandb controller {user}/{entity}/{sweep_id}
로컬 컨트롤러를 사용하도록 지정한 후에는 sweep을 실행하기 위해 하나 이상의 Sweep agent를 시작하세요. 평소와 비슷한 방식으로 W&B Sweep을 시작하세요. 자세한 내용은 Sweep agent 시작을 참조하세요.
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()