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