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

> wandb.init() の resume パラメーターのオプションを使用して、一時停止、停止、またはクラッシュした W&B run を再開します。

# run を再開する

`wandb.init()` で `resume` パラメーターを設定すると、run が停止またはクラッシュした場合に W\&B がどのように動作するかを指定できます。run を初期化すると、W\&B は run ID がすでに存在するかどうかを確認し、`resume` の値で定義された動作を適用します。

次の表は、`resume` パラメーターに渡す引数と run ID の有無に応じた W\&B の動作をまとめたものです。

| 引数 | 説明 | run ID が存在する場合 | run ID が存在しない場合 | ユースケース |
| - | - | - | - | - |
| `"must"` | W\&B は run ID で指定された run を必ず再開します。 | W\&B は同じ run ID で run を再開します。最後のステップから再開します。 | W\&B はエラーを送出します。 | 同じ run ID を使用する必要がある run を再開します。 |
| `"allow"` | run ID が存在する場合に、W\&B が run を再開することを許可します。 | W\&B は同じ run ID で run を再開します。最後のステップから再開します。 | W\&B は指定された run ID で新しい run を初期化します。 | 既存の run を上書きせずに run を再開します。 |
| `"never"` | run ID で指定された run を W\&B が再開することを許可しません。 | 指定された ID の run がすでに存在する場合、エラーを送出します。 | W\&B は指定された run ID で新しい run を初期化します。 | |
| `"auto"` | run ID が存在する場合に、W\&B が run の自動再開を試みることを許可します。失敗したプロセスと同じディレクトリから run を再起動してください。 | W\&B は同じ run ID で run を再開します。 | W\&B は指定された run ID で新しい run を初期化します。 | run を自動的に再開できるようにします。 |

<Note>
  **`auto` と `allow` の使い分け**

  W\&B では、`resume="allow"` を使用し、再開したい run の run ID を明示的に指定することを推奨しています。

  `resume="auto"` オプションでは run ID を指定する必要はありませんが、同じディレクトリで失敗した run が複数ある場合や、ファイルのディレクトリ構造が変更された場合に、予期しない動作が発生する可能性があります。また、`resume="auto"` を使用する場合は、失敗したプロセスと同じディレクトリから run を再起動する必要があります。
</Note>

以下のすべてのサンプルでは、`<>` で囲まれた値をご自身の値に置き換えてください。
<Tip>[再開された run のライブデモを見る](https://forge.coreweave.com/wandb/wandb/resume-run/workspace?nw=nwuserjuliarose)。</Tip>

<h2 id="resume-a-run-that-must-use-the-same-run-id">
  同じ run ID を使用する必要がある run を再開する
</h2>

run が停止、クラッシュ、または失敗した場合は、同じ run ID を使用して再開できます。そのためには、run を初期化し、以下を指定します。

* `resume` パラメーターを `"must"` に設定します (`resume="must"`)
* 停止またはクラッシュした run の run ID を指定します

次のコードスニペットは、W\&B Python SDK でこれを行う方法を示しています。

```python theme={"system"}
with wandb.init(entity="<entity>", project="<project>", id="<run ID>", resume="must") as run:
        # ここにトレーニングコードを記述します
```

<Warning>
  複数のプロセスが同じ `id` を同時に使用すると、予期しない結果が発生します。

  複数のプロセスの管理方法について詳しくは、[分散トレーニングの実験をログする](/ja/products/wandb/track/log/distributed-training)を参照してください。
</Warning>

<h2 id="resume-a-run-without-overriding-the-existing-run">
  既存の run を上書きせずに run を再開する
</h2>

停止またはクラッシュした run を、既存の run を上書きせずに再開します。これは、プロセスが正常に終了しなかった場合に特に役立ちます。次回 W\&B を起動すると、W\&B は最後のステップからログする処理を再開します。

W\&B で run を初期化する際に、`resume` パラメーターを `"allow"` (`resume="allow"`) に設定します。停止またはクラッシュした run の run ID を指定します。次のコードスニペットは、W\&B Python SDK でこれを行う方法を示しています。

```python theme={"system"}
import wandb

with wandb.init(entity="<entity>", project="<project>", id="<run ID>", resume="allow") as run:
        # ここにトレーニングコードを記述します
```

<h2 id="enable-runs-to-automatically-resume">
  run を自動的に再開できるようにする
</h2>

以下のコードスニペットは、Python SDK または環境変数を使用して、run を自動的に再開できるようにする方法を示しています。

<Tabs>
  <Tab title="W&B Python SDK">
    run を初期化する際に、`resume` パラメーターの引数として `auto` を渡します。run は、失敗したプロセスと同じディレクトリから再起動してください。

    以下のコードスニペットをコピー＆ペーストし、`<>` で囲まれた値をご自身の値に置き換えてください。

    ```python theme={"system"}
    with wandb.init(entity="<entity>", project="<project>", id="<run ID>", resume="auto") as run:
            # ここにトレーニングコードを記述
    ```
  </Tab>

  <Tab title="シェルスクリプト">
    以下の例は、bash スクリプトで W\&B の `WANDB_RUN_ID` 変数を指定する方法を示しています。

    ```bash title="run_experiment.sh" theme={"system"}
    RUN_ID="$1"

    WANDB_RESUME=auto WANDB_RUN_ID="$RUN_ID" python eval.py
    ```

    ターミナルから、W\&B Run ID を指定してシェルスクリプトを実行できます。以下のコードスニペットでは、Run ID `akj172` を渡しています。

    ```bash theme={"system"}
    sh run_experiment.sh akj172 
    ```
  </Tab>
</Tabs>

<Warning>
  自動再開は、失敗したプロセスと同じファイルシステム上でプロセスを再起動した場合にのみ機能します。
</Warning>

たとえば、`Users/AwesomeEmployee/Desktop/ImageClassify/training/` というディレクトリで `train.py` という Python スクリプトを実行し、そのスクリプト内で自動再開を有効にした run を作成するとします。その後、トレーニングスクリプトが停止した場合、この run を再開するには `Users/AwesomeEmployee/Desktop/ImageClassify/training/` 内で `train.py` スクリプトを再起動する必要があります。

<Note>
  ファイルシステムを共有できない場合は、`WANDB_RUN_ID` 環境変数を指定するか、W\&B Python SDK で Run ID を渡してください。Run ID の詳細については、「What are runs?」ページの [Custom run IDs](/ja/products/wandb/runs#custom-run-ids) セクションを参照してください。
</Note>

<h2 id="resume-preemptible-sweeps-runs">
  プリエンプト可能な Sweeps run を再開する
</h2>

プリエンプションシグナルを処理して、中断された [sweep](/ja/products/wandb/sweeps) の run を W\&B が自動的にキューに入れ直し、別のエージェントに割り当てられるようにします。このパターンは、SLURM のプリエンプト可能なキュー、Amazon EC2 Spot Instance、Google Cloud のプリエンプト可能な VM など、プリエンプト可能なコンピュートで sweep エージェントを実行する場合に役立ちます。

以下の手順は、[`wandb agent`](/ja/products/wandb/ref/cli/wandb-agent) CLI で sweep エージェントを起動する場合に適用されます。CLI はトレーニングプログラムを **サブプロセス** として起動します。Python API の [`wandb.agent()`](/ja/products/wandb/ref/python/functions/agent) のみを使用する場合、この手順は完全には適用されません。Python API はトレーニング関数をスレッドで実行するため、OS シグナルの配信と転送は CLI エージェントの動作とは異なります。

<h3 id="handle-a-preemption-signal">
  プリエンプションシグナルを処理する
</h3>

スケジューラーやプラットフォームがプリエンプションを通知するために使用するシグナル (`SIGUSR1` や `SIGTERM` など) のハンドラを登録します。ハンドラでは次の処理を行います。

1. run が実行中の場合に [`mark_preempting()`](/ja/products/wandb/ref/python/experiments/run#mark_preempting) を呼び出します。
2. チェックポイントの保存など、必要なクリーンアップを行います。
3. 0 以外のステータスコードで終了します。シグナルによる終了では、一般的に `128 + signum` を使用します。

`wandb.init()` の直後に無条件で `mark_preempting()` を呼び出さないでください。そうすると、コードのバグを含むすべての失敗がプリエンプションとして記録され、run が繰り返しキューに入れ直される可能性があります。

実行可能なサンプル、CLI エージェントの `--forward-signals`、および `mark_preempting()` のさまざまな使用方法を網羅したリファレンス表については、[シグナル処理と sweep の run](/ja/products/wandb/sweeps/signal-handling-sweep-runs) を参照してください。

このパターンに従うと、W\&B は run の状態をおおむね次のように記録します。

| シナリオ | run の状態 |
| - | - |
| run が終了コード 0 で正常に完了する | FINISHED |
| run が 0 以外の終了コードで失敗する | FAILED |
| run が未処理のシグナル (例：`SIGKILL`) を受信する | 約 5 分後に CRASHED |
| run が処理対象のプリエンプションシグナル (例：`SIGTERM` または `SIGUSR1`) を受信し、ハンドラが `mark_preempting()` を呼び出し、プロセスが 0 以外のコードで終了する | PREEMPTED；run は次のエージェントのリクエストに備えてキューに追加されます |

<Info>
  sweep エージェントがプリエンプションされた run を取得した場合、トレーニングプロセスは 60 分以内に `wandb.init()` を呼び出す必要があります。run の取得後、`wandb.init()` を呼び出す前にプロセスが失敗するなどして初期化が行われなかった場合、W\&B は 60 分間のリースが期限切れになるまで、その run を別のエージェントに割り当てません。
</Info>

sweep エージェントは、sweep の探索アルゴリズムに新しいハイパーパラメーターの組み合わせをリクエストする前に、キューに入れ直された run を処理します。キューが空になると、sweep は通常のスケジューリングを再開します。
