メインコンテンツへスキップ
このページでは、スイープを定義、初期化し、実行する方法を説明します。主な手順は次の 4 つです。
  1. 学習コードを準備する
  2. スイープ設定で探索空間を定義する
  3. スイープを初期化する
  4. スイープエージェントを開始する
次のコードを 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_id = wandb.sweep(sweep=sweep_configuration, project="my-first-sweep")

wandb.agent(sweep_id, function=main, count=10)
以下のセクションでは、コードサンプル内の各ステップを取り上げて順に説明します。

学習コードをセットアップする

wandb.Run.config からハイパーパラメータの値を受け取り、それらを使ってモデルを学習し、メトリクスを返す学習用関数を定義します。 必要に応じて、W&B run の出力を保存したいプロジェクト名(wandb.init()project パラメータ)を指定します。プロジェクトが指定されていない場合、run は「Uncategorized」というプロジェクトに配置されます。
スイープと run は同じプロジェクトに属している必要があります。そのため、W&B を初期化するときに指定する名前は、スイープを初期化するときに指定するプロジェクト名と一致していなければなりません。
# 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})

スイープ設定で探索空間を定義する

スイープするハイパーパラメータを辞書で指定します。設定オプションについては、スイープ設定を定義するを参照してください。 次の例は、ランダムサーチ('method':'random')を使用するスイープ設定を示しています。スイープは、設定内に列挙された値から、バッチサイズ、エポック、および学習率に対してランダムに値の組み合わせを選択します。 W&B は、metric キーで指定されたメトリクスに "goal": "minimize" が指定されている場合、そのメトリクスを最小化するように最適化します。この例では、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 は、クラウド(standard)や 1 台以上のマシンにまたがるローカル環境(local)でスイープを管理するために、Sweep Controller を使用します。Sweep Controller の詳細については、Search and stop algorithms locally を参照してください。 スイープを初期化すると、スイープ識別番号が返されます。
sweep_id = wandb.sweep(sweep=sweep_configuration, project="my-first-sweep")
スイープの初期化方法の詳細については、スイープの初期化を参照してください。

スイープを開始する

wandb.agent() API 呼び出しを使ってスイープを開始します。
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 ダッシュボードの例
結果の可視化方法の詳細については、スイープ結果の可視化 を参照してください。ダッシュボードの例については、このサンプルの Sweeps プロジェクト を参照してください。

エージェントを停止する(任意)

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