> ## 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.

# Initialize runs

> Initialize W&B runs with wandb.init() to start tracking experiments, including handling concurrent runs in one process.

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

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

1 つのプロセス内で複数の実行中の run を管理するには、[1 つのプロセス内の複数の run](/ja/products/wandb/runs/initialize-run#multiple-runs-in-one-process) を参照してください。

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

<h2 id="single-run-per-process">
  プロセスごとに単一の run
</h2>

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

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

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

このコマンドは、次のような出力を生成します。

```bash theme={"system"}
🚀 run exalted-darkness-6 の表示先: 
https://wandb.ai/nico/awesome-project/runs/pgbn9y21
ログの検索先: wandb/run-20241106_090747-pgbn9y21/logs
```

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

<h2 id="multiple-runs-in-one-process">
  1 つのプロセスで複数の run を管理する
</h2>

`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>

<h3 id="reinit-options">
  `reinit` options
</h3>

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

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

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

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

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

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

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

* `wandb.setup()` を使用して、現在のプロセス内のすべての run に対して `reinit` オプションをグローバルに設定します。動作を一度設定し、そのプロセス内で以降のすべての `wandb.init()` 呼び出しに適用したい場合に便利です。

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

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

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

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

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

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

プライマリプロセスを終了せずに、短時間で終了するセカンダリプロセスを定期的に起動しながら、スクリプトの実行期間全体にわたってプライマリプロセスを維持したいとします。たとえば、このパターンは、プライマリ 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={"system"}
import wandb

def train(name: str) -> None:
    """Perform one training iteration in its own W&B run.

    Using a 'with wandb.init()' block with `reinit="create_new"` ensures that
    this training sub-run can be created even if another run (like our primary
    tracking run) is already active.
    """
    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):
    """Returns the current model's loss and accuracy.
    
    Replace this placeholder with your real evaluation logic.
    """
    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 で一度トレーニングします
    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' は自動的に終了します。
```

前の例の重要なポイントを 3 つ確認します。

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 を終了します。これにより、すべてのデータがアップロードされ、run が適切に閉じられます。
