メインコンテンツへスキップ
このページでは、 Sweeps の定義、初期化、および実行方法について説明します。主に以下の4つのステップがあります。
  1. トレーニングコードのセットアップ
  2. sweep configuration による検索空間の定義
  3. sweep の初期化
  4. 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)
以下のセクションでは、コード例の各ステップを詳しく解説します。

トレーニングコードのセットアップ

wandb.Run.config から ハイパーパラメーター の値を受け取り、それらを使用して モデル をトレーニングし、 メトリクス を返すトレーニング関数を定義します。 オプションで、 W&B Runs の出力を保存する プロジェクト 名を指定します( 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 configuration による検索空間の定義

辞書 形式で、 sweep 対象となる ハイパーパラメーター を指定します。設定オプションの詳細については、 Define sweep configuration を参照してください。 上記の例では、 ランダム検索 ('method':'random') を使用する sweep configuration を示しています。この sweep では、設定にリストされた バッチサイズ 、 エポック 、 学習率の中からランダムに値のセットを選択します。 W&B は、 metric キーに "goal": "minimize" が関連付けられている場合、その メトリクス を最小化するように動作します。この例では、 メトリクス 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]},
    },
}

sweep の初期化

W&B は Sweep コントローラ を使用して、 クラウド (標準設定)または 1 台以上のマシンにまたがる ローカル (local) で sweep を管理します。 Sweep コントローラ に関する詳細は、 Search and stop algorithms locally を参照してください。 sweep を初期化すると、 sweep ID が返されます。
sweep_id = wandb.sweep(sweep=sweep_configuration, project="my-first-sweep")
sweep の初期化に関する詳細は、 Initialize sweeps を参照してください。

sweep の開始

wandb.agent() API コールを使用して sweep を開始します。
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>")
この慣習に従ってコードをラップすることで、スクリプトが直接実行されたときのみ実行され、ワーカープロセス内でモジュールとしてインポートされたときには実行されないようにします。マルチプロセッシングの詳細については、 Python 標準ライブラリ multiprocessing または PyTorch multiprocessing を参照してください。 if __name__ == '__main__': の慣習については、 https://realpython.com/if-name-main-python/ を参照してください。

結果の視覚化(オプション)

プロジェクト を開き、 W&B App ダッシュボード でリアルタイムの結果を確認します。数回のクリックで、 平行座標プロットパラメータの重要度 分析、 その他のチャートタイプ などのリッチで インタラクティブなグラフ を作成できます。
Sweeps Dashboard example
結果の可視化方法については、 Visualize sweep results を参照してください。 ダッシュボード の例については、こちらの サンプル Sweeps プロジェクト をご覧ください。

エージェントの停止(オプション)

ターミナル で Ctrl+C を押すと、現在の run が停止します。もう一度押すと エージェント が終了します。