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

# run を初期化する

> wandb.init() を使用して W&B run を初期化し、実験のトラッキングを開始します。これには、1 つのプロセス内で同時実行される run の処理も含まれます。

[`wandb.init()`](/ja/models/ref/python/functions/init) を使用して W\&B Run を初期化します。

デフォルトでは、W\&B は Python プロセスごとに 1 つのアクティブな run をサポートします。アクティブな run がある状態で `wandb.init()` を呼び出すと、W\&B はアクティブな run を返すか、新しい run を作成する前にその run を終了します。この動作は、環境と reinit 設定によって異なります。

1 つのプロセス内で複数のアクティブな run を管理するには、[1 つのプロセス内での複数の run](/ja/models/runs/initialize-run#multiple-runs-in-one-process) を参照してください。

<Note>
  W\&B では、`wandb.init()` を呼び出す際にコンテキストマネージャー (`with` ブロック) を使用することを推奨しています。これにより、ブロックの終了時に W\&B が run を終了し、そのデータをアップロードします。
</Note>

<div id="single-run-per-process">
  ## プロセスごとに 1 つの run
</div>

次の例では、run を初期化します。

```python title="basic.py" theme={null}
import wandb

with wandb.init(entity="nico", project="awesome-project") as run:
    # ここにトレーニングのロジックを記述します
```

このコマンドを実行すると、次のような出力が表示されます。

```bash theme={null}
🚀 View run exalted-darkness-6 at: 
https://wandb.ai/nico/awesome-project/runs/pgbn9y21
Find logs at: wandb/run-20241106_090747-pgbn9y21/logs
```

この例では、W\&B は `nico` entity の `awesome-project` project に run `exalted-darkness-6` をログします。W\&B はこの run に一意の ID `pgbn9y21` を割り当てます。

<div id="multiple-runs-in-one-process">
  ## 1 つのプロセス内で複数の run を扱う
</div>

`wandb.init()` または `wandb.Settings` の `reinit` パラメーターを使用して、1 つの Python プロセス内で複数の run を管理します。たとえば、プライマリ run をアクティブなまま維持しながら、ほかのタスク用に短時間で終了するセカンダリ run を作成できます。

一般的なユースケースには、次のようなものがあります。

* プライマリ run をアクティブなまま維持しながら、評価やサブタスク用のセカンダリ run を作成する。
* 1 つのスクリプトから複数のサブ実験を実行する。
* 1 つのプロセスから、異なるタスクや期間を別々の run にログする。

<Note>
  **要件**

  1 つの Python プロセス内で複数の run を管理するには、W\&B Python SDK バージョン `v0.19.10` 以降が必要です。
</Note>

<div id="reinit-options">
  ### `reinit` オプション
</div>

`reinit` パラメーターを使用すると、別の run がアクティブな状態で `wandb.init()` を呼び出したときの動作を制御できます。次の表では、利用可能なオプションと一般的なユースケースを比較します。パラメーターの完全な定義については、[`wandb.init()` のリファレンスドキュメント](/ja/models/ref/python/functions/init)を参照してください。

| オプション             | 動作                                                                                                                                                                                                                               | 新しい run を作成しますか？ | 使用する状況                                                                      |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------- | --------------------------------------------------------------------------- |
| `create_new`      | 既存のアクティブな run を終了せずに、新しい run を作成します。W\&B は新しい run をグローバル変数 `wandb.run` に割り当てません。返された各 Run オブジェクトを保存し、明示的に使用してください。[1 つのプロセスで複数のアクティブな run を管理する](/ja/models/runs/initialize-run/#example-multiple-runs-in-one-process)を参照してください。 | はい               | プライマリ run をアクティブなままにしてセカンダリ run を作成・終了する場合など、1 つのプロセスで複数のアクティブな run が必要な場合。 |
| `finish_previous` | 新しい run を作成する前に、アクティブな run を終了します。これはノートブック以外の環境でのデフォルトの動作です。                                                                                                                                                                    | はい               | Runs を順番に実行し、各タスクまたはフェーズに個別の run が必要な場合。                                    |
| `return_previous` | 新しい run を作成する代わりに、最後に終了していない run を返します。これはノートブック環境でのデフォルトの動作です。                                                                                                                                                                  | いいえ              | `wandb.init()` を繰り返し呼び出しても、アクティブな run を継続して使用する必要がある場合。                     |

<Note>
  W\&B は、Hugging Face Trainer、Keras コールバック、PyTorch Lightning など、単一のグローバル run を前提とする[W\&B インテグレーション](/ja/models/integrations)では `create_new` モードをサポートしていません。これらのインテグレーションを使用する場合は、各サブ実験を個別のプロセスで実行してください。
</Note>

<div id="configure-reinit">
  ### `reinit` を設定する
</div>

* `reinit` 引数を指定して、`wandb.init()` を直接使用します。
  ```python theme={null}
  import wandb
  with wandb.init(reinit="<create_new|finish_previous|return_previous>") as run:
      # ここにコードを記述
  ```

* `wandb.init()` を使用し、`wandb.Settings` オブジェクトを `settings` パラメーターに渡します。`Settings` オブジェクト内で `reinit` を指定します。

  ```python theme={null}
  import wandb
  with wandb.init(settings=wandb.Settings(reinit="<create_new|finish_previous|return_previous>")) as run:
      # ここにコードを記述
  ```

* `wandb.setup()` を使用して、現在のプロセス内のすべての run に対する `reinit` オプションをグローバルに設定します。これは、動作を一度だけ設定し、そのプロセス内で後続のすべての `wandb.init()` call に適用したい場合に便利です。

  ```python theme={null}
  import wandb
  with wandb.setup(wandb.Settings(reinit="<create_new|finish_previous|return_previous>")) as run:
       # ここにコードを記述
  ```

* 環境変数 `WANDB_REINIT` で、`reinit` に設定する値を指定します。環境変数を定義すると、`reinit` オプションが `wandb.init()` call に適用されます。

  ```bash theme={null}
  export WANDB_REINIT="<create_new|finish_previous|return_previous>"
  ```

次のコードスニペットは、`wandb.init()` を呼び出すたびに新しい run を作成するように W\&B を設定する方法の概要を示しています。

```python theme={null}
import wandb

wandb.setup(wandb.Settings(reinit="create_new"))

with wandb.init() as experiment_results_run:
    # この run は、各実験の結果をログするために使用します。
    # 結果を集約する親 run と考えてください
      with wandb.init() as run:
         # do_experiment() 関数は、指定した run に詳細なメトリクスを
         # ログし、別途トラッキングしたい結果のメトリクスを
         # 返します。
         experiment_results = do_experiment(run)

         # 各実験の終了後、その結果を親 run にログします。
         # 親 run のチャート上の各点が、1 つの実験の結果に
         # 対応します。
         experiment_results_run.log(experiment_results)
```

<div id="example-concurrent-processes">
  ### 例: 並行プロセス
</div>

スクリプトの実行中ずっと開いたままのプライマリプロセスを維持しつつ、そのプライマリプロセスを終了せずに、短命なセカンダリプロセスを定期的に生成したいとします。たとえばこのパターンは、プライマリ run でモデルをトレーニングしながら、評価の計算やその他の処理を別の run で行いたい場合に役立ちます。

これを実現するには、`reinit="create_new"` を使用して複数の run を初期化します。この例では、"Run A" はスクリプト全体を通して開いたままのプライマリプロセスであり、"Run B1" と "Run B2" は評価などのタスク用の短命なセカンダリ run です。

大まかなワークフローは次のようになります。

1. `wandb.init()` でプライマリプロセス Run A を初期化し、トレーニングのメトリクスをログします。
2. Run B1 を (`wandb.init()` で) 初期化し、データをログしてから終了します。
3. Run A にさらにデータをログします。
4. Run B2 を初期化し、データをログしてから終了します。
5. Run A へのログを続けます。
6. 最後に、最後に Run A を終了します。

次の Python コード例は、このワークフローを示しています。

```python theme={null}
import wandb

def train(name: str) -> None:
    """W&B run 内でトレーニングを1回実行する。

    `reinit="create_new"` を指定した 'with wandb.init()' ブロックを使用することで、
    別の run（プライマリのトラッキング run など）がすでにアクティブな場合でも、
    このトレーニングサブ run を作成できる。
    """
    with wandb.init(
        project="my_project",
        name=name,
        reinit="create_new"
    ) as run:
        # 実際のスクリプトでは、このブロック内でトレーニングステップを実行する。
        run.log({"train_loss": 0.42})  # 実際のメトリクスに置き換えること

def evaluate_loss_accuracy() -> (float, float):
    """現在のモデルの損失と accuracy を返す。
    
    このプレースホルダーを実際の評価ロジックに置き換えること。
    """
    return 0.27, 0.91  # メトリクスの例

# 複数のトレーニング/評価ステップを通じてアクティブであり続ける「プライマリ」run を作成する。
with wandb.init(
    project="my_project",
    name="tracking_run",
    reinit="create_new"
) as tracking_run:
    # 1) 'training_1' という名前のサブ run でトレーニングを1回実行する
    train("training_1")
    loss, accuracy = evaluate_loss_accuracy()
    tracking_run.log({"eval_loss": loss, "eval_accuracy": accuracy})

    # 2) 'training_2' という名前のサブ run で再度トレーニングを実行する
    train("training_2")
    loss, accuracy = evaluate_loss_accuracy()
    tracking_run.log({"eval_loss": loss, "eval_accuracy": accuracy})
    
    # 'with' ブロックが終了すると、'tracking_run' は自動的に終了する。
```

前の例では、次の重要な点に注意してください。

1. `reinit="create_new"` を指定すると、`wandb.init()` を呼び出すたびに新しい run が作成されます。
2. 各 run への参照は自分で保持します。`wandb.run` は、`reinit="create_new"` で作成された新しい run を自動では参照しません。新しい run は `run_a`、`run_b1` などの変数に保存し、必要に応じてそれらのオブジェクトに対して `.log()` や `.finish()` を呼び出してください。
3. メインの run は開いたままにしておきつつ、サブ run は必要なタイミングでいつでも終了できます。
4. run へのログが完了したら、`run.finish()` を呼び出して終了してください。これにより、すべてのデータがアップロードされ、run が正しくクローズされます。
