メインコンテンツへスキップ
ハイパーパラメーターコントローラーは、デフォルトでは W&B のクラウドサービスとしてホストされています。W&B エージェントはコントローラーと通信し、トレーニングに使用する次のパラメーターセットを決定します。コントローラーはまた、どの run を停止できるかを判断するために、早期停止アルゴリズムを実行する役割も担います。 ローカルコントローラー機能を使用すると、探索アルゴリズムと停止アルゴリズムをローカルで実行できます。ローカルコントローラーを使うことで、問題のデバッグや、クラウドサービスに組み込める新機能の開発に向けて、コードを調査・計測できます。
この機能は、Sweeps 向けの新しいアルゴリズムをより迅速に開発およびデバッグできるようにするためのサポートとして提供されています。実運用のハイパーパラメーター最適化ワークロードを想定したものではありません。
開始する前に、W&B SDK(wandb) をインストールする必要があります。次のコードスニペットをコマンドラインに入力してください。
pip install wandb sweeps 
以下の例では、PythonスクリプトまたはJupyter Notebook内で、設定ファイルとトレーニングループがすでに定義されていることを前提としています。設定ファイルの定義方法について詳しくは、sweepの設定を定義するを参照してください。

コマンドラインからローカルコントローラーを実行する

通常どおり、W&B のクラウドサービスで提供されるハイパーパラメーターコントローラーを使用する場合と同様に、sweep を初期化します。W&B sweep ジョブでローカルコントローラーを使用することを示すには、controller フラグ (controller) を指定します:
wandb sweep --controller config.yaml
あるいは、sweep の初期化とローカルコントローラーを使用する指定を、2 つの 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 を実行するために 1 つ以上の Sweep エージェントを起動します。通常どおり W&B Sweep を開始してください。詳細については、Start sweep agents を参照してください。
wandb sweep sweep_ID

W&B Python SDK でローカルコントローラーを実行する

以下のコードスニペットでは、W&B Python SDK でローカルコントローラーを指定して使用する方法を示します。 Python SDK でコントローラーを使用する最も簡単な方法は、wandb.controller() method に sweep ID を渡すことです。次に、返されたオブジェクトの run method を使用して 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()