> ## Documentation Index
> Fetch the complete documentation index at: https://docs.wandb.ai/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 の動作をまとめたものです。

| Argument  | Description                                                                        | Run ID exists                                  | Run ID does not exist                | Use case                       |
| --------- | ---------------------------------------------------------------------------------- | ---------------------------------------------- | ------------------------------------ | ------------------------------ |
| `"must"`  | W\&B は、run ID で指定された run を必ず再開します。                                                 | W\&B は同じ run ID で run を再開します。最後の step から再開します。 | W\&B はエラーを返します。                      | 同じ run ID を必ず使用する run を再開する場合。 |
| `"allow"` | run ID が存在する場合、W\&B に run の再開を許可します。                                               | W\&B は同じ run ID で run を再開します。最後の step から再開します。 | W\&B は指定された run ID で新しい run を初期化します。 | 既存の run を上書きせずに run を再開する場合。   |
| `"never"` | W\&B が run ID で指定された run を再開しないようにします。                                             | 指定された ID の run がすでに存在する場合はエラーを返します。            | W\&B は指定された run ID で新しい run を初期化します。 |                                |
| `"auto"`  | run ID が存在する場合、W\&B が自動的に run の再開を試みることを許可します。失敗したプロセスと同じディレクトリーから run を再起動してください。 | W\&B は同じ run ID で run を再開します。                  | W\&B は指定された run ID で新しい run を初期化します。 | Runs を自動的に再開できるようにする場合。        |

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

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

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

以下のすべての例では、`<>` で囲まれた値を実際の値に置き換えてください。
<Tip>[再開した run のライブデモを見る](https://wandb.ai/wandb/resume-run/workspace?nw=nwuserjuliarose).</Tip>

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

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

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

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

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

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

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

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

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

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

```python theme={null}
import wandb

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

<div id="enable-runs-to-automatically-resume">
  ## run が自動的に自動再開されるようにする
</div>

次のコードスニペットは、Python SDK または環境変数を使用して、run の自動再開を有効にする方法を示しています。

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

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

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

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

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

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

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

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

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

たとえば、`Users/AwesomeEmployee/Desktop/ImageClassify/training/` というディレクトリで `train.py` という Python スクリプトを実行するとします。`train.py` では、自動再開が有効な 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](./#custom-run-ids) セクションを参照してください。
</Note>

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

プリエンプションを正しく処理すると、中断された[sweep](/ja/models/sweeps/) run は自動的にキューに入れ直され、別の agent が取得できるようになります。このパターンは、sweep agent がプリエンプト可能な環境で実行される場合に特に有効です。たとえば、プリエンプト可能なキュー内の SLURM ジョブ、EC2 Spot インスタンス、Google Cloud のプリエンプト可能 VM などです。

以下の動作は、[`wandb agent`](/ja/models/ref/cli/wandb-agent) CLI で sweep agent を実行する場合に適用されます。この CLI は、トレーニングプログラムを**サブプロセス**として起動します。一方、Python API の [`wandb.agent()`](/ja/models/ref/python/functions/agent) のみを使用する場合には、これは完全には当てはまりません。この経路では、トレーニング関数は別プロセスではなくスレッド内で実行されるため、OS シグナルの配信と転送が CLI agent のモデルと一致しないからです。

**推奨パターン:** スケジューラまたはプラットフォームで使われるプリエンプションシグナル (たとえば `SIGUSR1` や `SIGTERM`) のシグナルハンドラーを登録してください。ハンドラーでは、run がアクティブなときに [`mark_preempting()`](/ja/models/ref/python/experiments/run#mark_preempting) を呼び出し、必要なクリーンアップ (checkpoint の保存など) を行ってから、非ゼロのコードで終了します (一般的には、シグナルによる終了時に `128 + signum` を使います) 。`wandb.init()` の直後に、無条件で `mark_preempting()` を呼び出してはいけません。そうすると、コードの bug を含むあらゆる失敗がプリエンプションとしてマークされ、run が繰り返しキューに入れ直される可能性があります。

実行可能な例、CLI agent での `--forward-signals`、および `mark_preempting()` のさまざまな使い方をまとめた詳細な表については、[Signal handling and sweep runs](/ja/models/sweeps/signal-handling-sweep-runs) を参照してください。

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

| シナリオ                                                                                                      | run の状態                                        |
| --------------------------------------------------------------------------------------------------------- | ---------------------------------------------- |
| 終了コード 0 で run が正常に完了する                                                                                    | FINISHED                                       |
| 非ゼロの終了コードで run が失敗する                                                                                      | FAILED                                         |
| run が未処理のシグナル (たとえば `SIGKILL`) を受信する                                                                      | 約 5 分後に CRASHED                                |
| run が処理済みのプリエンプションシグナル (たとえば `SIGTERM` または `SIGUSR1`) を受信し、ハンドラーが `mark_preempting()` を呼び出し、プロセスが非ゼロで終了する | PREEMPTED。run は次の agent request に備えてキューに入れられます |

Sweep agent は、sweep が search アルゴリズムから新しいハイパーパラメーターの組み合わせを生成する前に、run キューを先に消化します。キューが空になると、sweep は通常のスケジューリングを再開します。
