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

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

# 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 ID を指定することを推奨しています。

  `resume="auto"` オプションでは run ID を指定する必要はありませんが、同じディレクトリで複数の run が失敗した場合や、ファイルのディレクトリ構造が変更された場合に、予期しない動作につながる可能性があります。また、`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>", 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 は最後のステップからログを開始します。

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">
  ## Runs の自動再開を有効にする
</div>

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

<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="シェルスクリプト">
    次の例は、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 は自動的にキューに入れ直され、別のエージェントが引き継げるようになります。このパターンは、sweep エージェントをプリエンプト可能な環境で実行している場合に特に有効です。たとえば、プリエンプト可能なキュー上の SLURM ジョブ、EC2 Spot インスタンス、Google Cloud のプリエンプト可能 VM などが該当します。

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

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

実行可能な例、CLI エージェントの `--forward-signals`、および `mark_preempting()` のさまざまな使い方についての完全なリファレンス表は、[Signal handling and sweep runs](/ja/models/sweeps/signal-handling-sweep-runs) を参照してください。

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

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

Sweep エージェントは、sweep が検索アルゴリズムに基づいて新しいハイパーパラメーターの組み合わせを生成する前に、まず run キューを処理します。キューが空になると、sweep は通常のスケジューリングを再開します。
