하이퍼파라미터 컨트롤러는 기본적으로 Weights & Biases에서 클라우드 서비스로 호스팅합니다. W&B 에이전트는 컨트롤러와 통신하여 트레이닝에 사용할 다음 파라미터 세트를 결정합니다. 또한 컨트롤러는 조기 종료(early stopping) 알고리즘을 실행하여 어떤 Runs를 중지할지 결정하는 역할도 담당합니다.
로컬 컨트롤러 기능을 사용하면 사용자가 로컬에서 탐색 및 중지 알고리즘을 시작할 수 있습니다. 로컬 컨트롤러를 통해 사용자는 코드를 조사하고 인스트루먼트(instrument)하여 문제를 디버깅할 수 있을 뿐만 아니라, 향후 클라우드 서비스에 통합될 수 있는 새로운 기능을 개발할 수도 있습니다.
이 기능은 Sweeps 툴의 새로운 알고리즘을 더 빠르게 개발하고 디버깅할 수 있도록 지원하기 위해 제공됩니다. 실제 하이퍼파라미터 최적화 워크로드용으로 설계된 것은 아닙니다.
시작하기 전에 W&B SDK ( wandb )를 설치해야 합니다. 커맨드라인에 다음 코드조각을 입력하세요:
다음 예제들은 파이썬 스크립트나 Jupyter Notebook에 설정 파일과 트레이닝 루프가 이미 정의되어 있다고 가정합니다. 설정 파일을 정의하는 방법에 대한 자세한 내용은 Define sweep configuration을 참조하세요.
커맨드라인에서 로컬 컨트롤러 실행하기
W&B가 클라우드 서비스로 호스팅하는 하이퍼파라미터 컨트롤러를 사용할 때와 유사하게 스윕을 초기화합니다. W&B 스윕 작업에 로컬 컨트롤러를 사용하겠다는 것을 나타내기 위해 컨트롤러 플래그 ( controller )를 지정합니다:
wandb sweep --controller config.yaml
또는, 스윕 초기화와 로컬 컨트롤러 사용 지정 단계를 두 단계로 나눌 수도 있습니다.
단계를 나누려면 먼저 스윕의 YAML 설정 파일에 다음 키-값 쌍을 추가하세요:
그 다음, 스윕을 초기화합니다:
wandb sweep은 스윕 ID를 생성합니다. 스윕을 초기화한 후, wandb controller로 컨트롤러를 시작합니다:
wandb controller {user}/{entity}/{sweep_id}
로컬 컨트롤러 사용을 지정했다면, 하나 이상의 Sweep 에이전트를 시작하여 스윕을 실행합니다. 평소와 같이 W&B Sweep을 시작하세요. 자세한 내용은 Start sweep agents를 참조하세요.
W&B Python SDK로 로컬 컨트롤러 실행하기
다음 코드조각은 W&B Python SDK를 사용하여 로컬 컨트롤러를 지정하고 사용하는 방법을 보여줍니다.
Python SDK에서 컨트롤러를 사용하는 가장 간단한 방법은 스윕 ID를 wandb.controller 메소드에 전달하는 것입니다. 그런 다음 반환된 오브젝트의 run 메소드를 사용하여 스윕 작업을 시작합니다:
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()
전체 스윕을 코드로만 지정하고 싶다면 다음과 같이 작성할 수 있습니다:
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()