> ## Documentation Index
> Fetch the complete documentation index at: https://docs.coreweave.com/llms.txt
> Use this file to discover all available pages before exploring further.

> Define, initialize, and run a sweep to search a hyperparameter space and find the configuration that produces the best model.

# Tutorial: Define, initialize, and run a sweep

このチュートリアルでは、sweep を定義、初期化、実行して、ハイパーパラメーター探索を自動化し、最良のモデルを生成する設定を検索する方法を説明します。W\&B に run をログする方法をすでに理解しており、大規模なハイパーパラメーター調整を始めたいユーザーを対象としています。

このチュートリアルは、主に次の 4 つのステップで構成されています。

1. [トレーニングコードを設定する](#set-up-your-training-code)
2. [sweep 設定で探索空間を定義する](#define-the-search-space-with-a-sweep-configuration)
3. [sweep を初期化する](#initialize-the-sweep)
4. [sweep エージェントを起動する](#start-the-sweep)

まず、次のコードを Jupyter ノートブックまたは Python スクリプトにコピー＆ペーストしてください。以降のセクションでは、この例の各部分を詳しく説明します。

```python theme={"system"}
# W&B Python ライブラリを import し、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)
```

<h2 id="set-up-your-training-code">
  トレーニングコードを設定する
</h2>

sweep エージェントは、試すハイパーパラメーター値の組み合わせごとにトレーニング関数を呼び出します。そのため、まず、それらの値を受け入れてメトリクスを W\&B に報告する関数を作成します。

`wandb.Run.config` からハイパーパラメーター値を受け取り、それらを使用してモデルをトレーニングし、メトリクスを返すトレーニング関数を定義します。

必要に応じて、run の出力を保存するプロジェクト名を指定します ([`wandb.init()`](/ja/products/wandb/ref/python/functions/init) の project パラメーター) 。project を指定しない場合、W\&B は run を "Uncategorized" project に格納します。

<Note>
  sweep と run は同じ project に属している必要があります。そのため、W\&B の初期化時に指定する名前は、sweep の初期化時に指定するプロジェクト名と一致する必要があります。
</Note>

```python theme={"system"}
# 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})
```

<h2 id="define-the-search-space-with-a-sweep-configuration">
  sweep 設定で探索空間を定義する
</h2>

トレーニング関数を用意したら、次のステップは、W\&B にどのハイパーパラメーターを変化させ、どのように探索するかを指示することです。

sweep で探索するハイパーパラメーターを辞書で指定します。設定オプションについては、[sweep 設定を定義する](/ja/products/wandb/sweeps/define-sweep-configuration) を参照してください。

次の例は、ランダムサーチ (`'method':'random'`) を使用する sweep 設定です。sweep は、`x` と `y` のパラメーターについて、設定に列挙された値の組み合わせをランダムに選択します。

`metric` キーに `"goal": "minimize"` が指定されている場合、W\&B はそのキーで指定されたメトリクスを最小化します。この例では、W\&B はメトリクス `score` (`"name": "score"`) を最小化するように最適化します。

```python theme={"system"}
# 2: 探索空間を定義する
sweep_configuration = {
    "method": "random",
    "metric": {"goal": "minimize", "name": "score"},
    "parameters": {
        "x": {"max": 0.1, "min": 0.01},
        "y": {"values": [1, 3, 7]},
    },
}
```

<h2 id="initialize-the-sweep">
  sweep の初期化
</h2>

sweep を初期化すると、探索空間が W\&B に登録され、エージェントがハイパーパラメーターの組み合わせをリクエストするために使用する識別子が返されます。

W\&B は *Sweep Controller* を使用して、クラウド (standard) またはローカル (local) で 1 台以上のマシンにわたって sweep を管理します。Sweep Controller の詳細については、[Search and stop algorithms locally](/ja/products/wandb/sweeps/local-controller) を参照してください。

sweep を初期化すると、sweep 識別番号が返されます：

```python theme={"system"}
sweep_id = wandb.sweep(sweep=sweep_configuration, project="my-first-sweep")
```

詳細については、[Initialize sweeps](/ja/products/wandb/sweeps/initialize-sweeps) をご覧ください。

<h2 id="start-the-sweep">
  Start the sweep
</h2>

sweep が登録されたら、run を実行して探索空間を探索するエージェントを開始します。

sweep を開始するには、[`wandb.agent()`](/ja/products/wandb/ref/python/functions/agent) の API 呼び出しを使用します。

```python theme={"system"}
wandb.agent(sweep_id, function=main, count=10)
```

エージェントが起動すると、W\&B からハイパーパラメーターの組み合わせをリクエストし、それぞれに対してトレーニング関数を呼び出し、結果のメトリクスを project にログします。

<Warning>
  **マルチプロセッシング**

  Python 標準ライブラリの `multiprocessing` パッケージまたは PyTorch の `pytorch.multiprocessing` パッケージを使用する場合は、`wandb.agent()` および `wandb.sweep()` の呼び出しを `if __name__ == '__main__':` でラップする必要があります。例:

  ```python theme={"system"}
  if __name__ == '__main__':
      wandb.agent(sweep_id="[SWEEP-ID]", function="[FUNCTION]", count="[COUNT]")
  ```

  この規約により、コードはスクリプトが直接実行された場合にのみ実行され、ワーカープロセスでモジュールとしてインポートされた場合には実行されません。

  マルチプロセッシングの詳細については、[Python 標準ライブラリの `multiprocessing`](https://docs.python.org/3/library/multiprocessing.html#the-spawn-and-forkserver-start-methods) または [PyTorch の `multiprocessing`](https://docs.pytorch.org/docs/stable/notes/multiprocessing.html#asynchronous-multiprocess-training-e-g-hogwild) を参照してください。`if __name__ == '__main__':` の規約の詳細については、[Real Python の `__main__` ガイド](https://realpython.com/if-name-main-python/) を参照してください。
</Warning>

<h2 id="optional-visualize-results">
  オプション: 結果を可視化する
</h2>

sweep が実行中になると、W\&B アプリでさまざまなハイパーパラメーターの組み合わせがメトリクスに与える影響を探索できます。

project を開いて、W\&B アプリのダッシュボードでライブ結果を確認してください。数クリックで、[parallel coordinates plots](/ja/products/wandb/app/features/panels/parallel-coordinates)、[パラメーター重要度の分析](/ja/products/wandb/app/features/panels/parameter-importance)、[その他のチャート タイプ](/ja/products/wandb/app/features/panels)などのインタラクティブなチャートを作成できます。

<Frame>
  <img src="https://mintcdn.com/coreweave-dbfa0e8d/3Dv_sw2eg8feUJlx/products/wandb/_media/quickstart_dashboard_example.png?fit=max&auto=format&n=3Dv_sw2eg8feUJlx&q=85&s=cdd010a365825115c5a34de76e5ffa6b" alt="Sweeps ダッシュボードの例" width="4172" height="3046" data-path="products/wandb/_media/quickstart_dashboard_example.png" />
</Frame>

詳細については、[sweep 結果の可視化](/ja/products/wandb/sweeps/visualize-sweep-results)をご覧ください。ダッシュボードの例については、こちらのサンプル [Sweeps Project](https://forge.coreweave.com/wandb/anmolmann/pytorch-cnn-fashion/sweeps/pmqye6u3) を参照してください。

<h2 id="optional-stop-the-agent">
  オプション: エージェントを停止する
</h2>

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


## Related topics

- [Initialize runs](/ja/products/wandb/runs/initialize-run.md)
