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

> 元の run に影響を与えることなく、実験内の特定の時点から別のパラメーターやモデルを試すことができます。

# run をフォークする

<Note>
  run をフォークする機能は現在も活発に開発中です。Multi-tenant Cloud と専用クラウドではプレビューとして提供されており、セルフマネージドではまだ利用できません。
</Note>

元の run に影響を与えることなく、実験内の特定の時点から別のハイパーパラメーターやモデルを試すことができます。これを行うには、既存の W\&B run からフォークします。

run からフォークすると、W\&B はソース run の[一意の ID](/ja/models/runs/run-identifiers#unique-run-identifiers)と指定した step を使って新しい run を作成します。ソース run の summary メトリクスは、フォークした run にコピーされます。フォークした run は、指定した step までのすべての history とファイルをソース run と共有します。

フォークした step 以降は、元の run とは独立して、新しいデータをフォークした run にログできます。

以下のコードで生成されたフォークした run の[ライブデモ](https://wandb.ai/wandb/test-fork-run/workspace?nw=nwuserjuliarose)をご覧ください。

<Note>
  * run のフォークには [`wandb`](https://pypi.org/project/wandb/) SDK バージョン >= 0.16.5 が必要です
  * run のフォークでは、step が単調増加する必要があります。[`define_metric()`](/ja/models/ref/python/experiments/run#define_metric) で定義された非単調な step を使用する run からはフォークできません。非単調な step は、run history とシステムメトリクスの時系列順を崩します。
</Note>

フォークした run を開始するソース run の一意の `run ID` と `step` を、[`wandb.init()`](/ja/models/ref/python/functions/init) の `fork_from` に引数として指定します。

<div id="fork-from-a-previously-logged-run">
  ## 以前にログしたrunからフォークする
</div>

以下のコードスニペットは、以前にW\&Bにログしたrunからフォークする方法を示します。

まず、フォーク元にしたいrunのrun IDを取得します。次に、[`wandb.init()`](/ja/models/ref/python/functions/init) の `fork_from` に、run IDとフォーク元にしたいstepを引数として指定します。

以下のコードをPythonスクリプトまたはノートブックのセルにコピー＆ペーストします。`<source-run-id>`、`<project>`、`<entity>`を自身の値に置き換えてください。

```python theme={null}
import wandb

# フォーク元のソースrunの一意の ID
source_run_id = "<source-run-id>"

# フォーク元のstepを指定する
fork_step = 200

# runをフォークする
with wandb.init(
    project="<project>",
    entity="<entity>",
    fork_from=f"{source_run_id}?_step={fork_step}",
) as forked_run:
    pass
```

<div id="fork-from-a-run-in-the-same-script">
  ## 同じスクリプト内でrunからフォークする
</div>

次のコードスニペットは、runを作成し、同じスクリプト内でそのrunからフォークする方法を示しています。これは、W\&B Appでrun IDを調べることなく、作成したばかりのrunからフォークしたい場合に該当します。

まず、runを初期化して、いくつかのデータをログします。次に、元のrunオブジェクトの`id`プロパティを使用して、そのrunのrun IDを取得します。最後に、新しいrunを初期化し、元のrunのIDとフォーク元にしたいstepを[`wandb.init()`](/ja/models/ref/python/functions/init)の`fork_from`に引数として渡します。

```python theme={null}
import wandb

# runを初期化する
with wandb.init(
    project="<project>",
    entity="<entity>"
) as original_run:
    # ...トレーニングロジックをここに記述 ...
    pass

# フォーク元のstepを指定する
fork_step = int("<num>")

# 元のrunのIDを使用し、フォーク元のstepを指定する
with wandb.init(
    project="<project>",
    entity="<entity>",
    fork_from=f"{original_run.id}?_step={fork_step}",
) as forked_run:
    # ...トレーニングロジックをここに記述 ...
    pass
```

<Tip> `original_run.id` プロパティを使用すると、元の run の一意な run ID を取得できます。</Tip>

<div id="example-script">
  ### スクリプトの例
</div>

たとえば、次のコード例は、まず run をフォークし、その後トレーニングの step 200 から、フォークした run にメトリクスをログする方法を示しています。

次のコードを Python スクリプトまたはノートブックのセルにコピー＆ペーストしてください。`<project>` と `<entity>` はご自身の値に置き換えてください。

```python theme={null}
import wandb
import math

# 最初の run を初期化してメトリクスをログする
with wandb.init(
    project="<project>",
    entity="<entity>"
) as run1:
    for i in range(300):
        run1.log({"metric": i})

# 特定の step で最初の run からフォークし、
# step 200 からメトリクスをログする
with wandb.init(
    project="<project>", 
    entity="<entity>", 
    fork_from=f"{run1.id}?_step=200"
) as run2:
    # 新しい run でログを続ける
    # 最初の数 step は run1 のメトリクスをそのままログする
    # step 250 以降はスパイクパターンのログを開始する
    for i in range(200, 300):
        if i < 250:
            # スパイクなしで run1 からログを続ける
            metric_value = i
        else:
            # step 250 からスパイクの動作を導入する
            metric_value = i + (2 * math.sin(i / 3.0))  # 緩やかなスパイクパターンを適用する

        # 同じ step でログされるよう、両方のメトリクスを1回の呼び出しでログする
        run2.log({
            "metric": metric_value,
            "additional_metric": i * 1.1
        })
```

<Note>
  **巻き戻しとフォークの互換性**

  フォークは [`巻き戻し`](/ja/models/runs/rewind/) を補完する機能で、run の管理や実験をより柔軟に行えます。

  run からフォークすると、W\&B は run の特定の時点から新しいブランチを作成し、異なるパラメーターやモデルを試せるようにします。

  run を巻き戻すと、W\&B では run の履歴自体を修正または変更できます。
</Note>
