> ## Documentation Index
> Fetch the complete documentation index at: https://wb-21fd5541-docs-2751.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> ハイパーパラメーター空間を探索し、最良のモデルを生成する設定を見つけるために、sweep を定義し、初期化して実行する方法を説明します。

# チュートリアル: sweep の定義、初期化、実行

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

このチュートリアルには、主なステップが 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 Notebook または Python スクリプトにコピー＆ペーストしてください。以下のセクションでは、この例の各部分を順に説明します。

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

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

sweep エージェントは、試行するハイパーパラメーター値の組み合わせごとにトレーニング関数を呼び出すため、最初のステップは、それらの値を受け取り、メトリクスを W\&B に報告する関数を記述することです。

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

必要に応じて、run の出力を保存するproject名を指定します ([`wandb.init()`](/ja/models/ref/python/functions/init) の project パラメーター) 。projectを指定しない場合、run は "Uncategorized" project に配置されます。

<Note>
  sweep と run は、どちらも同じproject内に存在する必要があります。そのため、W\&B の初期化時に指定する名前は、sweep の初期化時に指定するproject名と一致している必要があります。
</Note>

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

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

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

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

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

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

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

<div id="initialize-the-sweep">
  ## Sweep を初期化する
</div>

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

W\&B では、*Sweep Controller* を使用して、クラウド (standard) またはローカル (local) で、1 台以上のマシンにまたがる sweep を管理します。Sweep Controller の詳細については、[ローカルでアルゴリズムを検索および停止する](/ja/models/sweeps/local-controller)を参照してください。

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

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

詳細は、[sweeps を初期化する](/ja/models/sweeps/initialize-sweeps) を参照してください。

<div id="start-the-sweep">
  ## sweep を開始する
</div>

sweep を登録したら、Runs を実行して探索空間を探索するエージェントを起動します。

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

```python theme={null}
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={null}
  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>

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

sweep の実行が始まったら、W\&B App でさまざまなハイパーパラメーターの組み合わせがメトリクスにどのような影響を与えるかを確認できます。

project を開くと、W\&B App のダッシュボードでリアルタイムの結果を確認できます。数回クリックするだけで、[並列座標プロット](/ja/models/app/features/panels/parallel-coordinates)、[パラメーター重要度分析](/ja/models/app/features/panels/parameter-importance)、[その他のチャートタイプ](/ja/models/app/features/panels) などの対話型チャートを作成できます。

<Frame>
  <img src="https://mintcdn.com/wb-21fd5541-docs-2751/CvscwAgEQUx8dSjP/images/sweeps/quickstart_dashboard_example.png?fit=max&auto=format&n=CvscwAgEQUx8dSjP&q=85&s=7fe3c2425170ef28e92a6c6272625168" alt="Sweeps ダッシュボードの例" width="4302" height="3048" data-path="images/sweeps/quickstart_dashboard_example.png" />
</Frame>

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

<div id="optional-stop-the-agent">
  ## 任意: エージェントを停止する
</div>

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