このページでは、sweep を定義し、初期化して実行する方法を紹介します。主なステップは 4 つあります。
- トレーニングコードを設定する
- sweep 設定で探索空間を定義する
- sweep を初期化する
- sweep agent を起動する
以下のコードを Jupyter Notebook または Python スクリプトにコピー&ペーストしてください。
# W&B Pythonライブラリをインポートし、W&Bにログインする
import wandb
# 1: 目的関数/トレーニング関数を定義する
def objective(config):
score = config.x**3 + config.y
return score
def main():
with wandb.init(project="my-first-sweep") as run:
score = objective(run.config)
run.log({"score": score})
# 2: 探索空間を定義する
sweep_configuration = {
"method": "random",
"metric": {"goal": "minimize", "name": "score"},
"parameters": {
"x": {"max": 0.1, "min": 0.01},
"y": {"values": [1, 3, 7]},
},
}
# 3: sweepを開始する
sweep_id = wandb.sweep(sweep=sweep_configuration, project="my-first-sweep")
wandb.agent(sweep_id, function=main, count=10)
以下のセクションでは、コードサンプルの各stepを分けて説明します。
wandb.Run.config からハイパーパラメーターの値を受け取り、それらを使用してモデルをトレーニングし、メトリクスを返すトレーニング関数を定義します。
必要に応じて、W&B run の出力を保存するプロジェクト名を指定します (wandb.init() の project パラメーター) 。プロジェクトを指定しない場合、run は “Uncategorized” プロジェクトに配置されます。
sweep と run は、どちらも同じプロジェクト内に存在する必要があります。そのため、W&B の初期化時に指定する名前は、sweep の初期化時に指定するプロジェクト名と一致している必要があります。
# 1: 目的関数/トレーニング関数を定義する
def objective(config):
score = config.x**3 + config.y
return score
def main():
with wandb.init(project="my-first-sweep") as run:
score = objective(run.config)
run.log({"score": score})
辞書で、sweep 対象のハイパーパラメーターを指定します。設定オプションについては、sweep 設定を定義するを参照してください。
次の例は、ランダムサーチ ('method':'random') を使用する sweep 設定を示しています。この sweep では、バッチサイズ、エポック、学習率について、設定に列挙された値の組み合わせからランダムに選択されます。
metric キーに "goal": "minimize" が関連付けられている場合、W&B はそのキーで指定されたメトリクスを最小化します。この場合、W&B はメトリクス score ("name": "score") が最小になるように最適化します。
# 2: 探索空間を定義する
sweep_configuration = {
"method": "random",
"metric": {"goal": "minimize", "name": "score"},
"parameters": {
"x": {"max": 0.1, "min": 0.01},
"y": {"values": [1, 3, 7]},
},
}
W&B では、Sweep Controller を使用して、クラウド (standard) またはローカル (local) で、1 台以上のマシンにまたがる sweep を管理します。Sweep Controller の詳細については、ローカルでアルゴリズムを検索および停止するを参照してください。
sweep を初期化すると、sweep の識別番号が返されます。
sweep_id = wandb.sweep(sweep=sweep_configuration, project="my-first-sweep")
sweeps の初期化について詳しくは、sweeps を初期化する を参照してください。
sweep を開始するには、wandb.agent() の API call を使用します。
wandb.agent(sweep_id, function=main, count=10)
マルチプロセシングPython 標準ライブラリの multiprocessing または PyTorch の pytorch.multiprocessing パッケージを使用する場合は、wandb.agent() と wandb.sweep() の呼び出しを if __name__ == '__main__': で囲む必要があります。例:if __name__ == '__main__':
wandb.agent(sweep_id="<sweep_id>", function="<function>", count="<count>")
このようにコードを囲むことで、そのコードはスクリプトを直接実行した場合にのみ実行され、ワーカープロセスでモジュールとして import された場合には実行されません。マルチプロセシングの詳細については、Python 標準ライブラリの multiprocessing または PyTorch の multiprocessing を参照してください。if __name__ == '__main__': の慣例については、https://realpython.com/if-name-main-python/ を参照してください。
プロジェクトを開いて、W&B Appのダッシュボードでリアルタイムの結果を確認します。数回クリックするだけで、平行座標プロット、パラメーター重要度分析、そのほかのチャートタイプなどの、豊富でインタラクティブなチャートを作成できます。
結果の可視化方法の詳細については、sweep の結果を可視化するを参照してください。ダッシュボードの例については、このサンプルのSweeps プロジェクトを参照してください。
ターミナルで Ctrl+C を押すと、現在の run を停止できます。もう一度押すと、エージェントが終了します。