メインコンテンツへスキップ
run をフォークする機能は現在も活発に開発中で、プライベートプレビューとして提供されています。この機能へのアクセスをリクエストするには、support@wandb.com の W&B Support までお問い合わせください。
元の run に影響を与えることなく、実験内の特定の時点から別のハイパーパラメーターやモデルを試すことができます。これを行うには、既存の W&B run からフォークします。 run からフォークすると、W&B はソース run の一意の IDと指定した step を使って新しい run を作成します。ソース run の summary メトリクスは、フォークした run にコピーされます。フォークした run は、指定した step までのすべての history とファイルをソース run と共有します。 フォークした step 以降は、元の run とは独立して、新しいデータをフォークした run にログできます。 以下のコードで生成されたフォークした run のライブデモをご覧ください。
  • run のフォークには wandb SDK バージョン >= 0.16.5 が必要です
  • run のフォークでは、step が単調増加する必要があります。define_metric() で定義された非単調な step を使用する run からはフォークできません。非単調な step は、run history とシステムメトリクスの時系列順を崩します。
フォークした run を開始するソース run の一意の run IDstep を、wandb.init()fork_from に引数として指定します。

以前にログしたrunからフォークする

以下のコードスニペットは、以前にW&Bにログしたrunからフォークする方法を示します。 まず、フォーク元にしたいrunのrun IDを取得します。次に、wandb.init()fork_from に、run IDとフォーク元にしたいstepを引数として指定します。 以下のコードをPythonスクリプトまたはノートブックのセルにコピー&ペーストします。<source-run-id><project><entity>を自身の値に置き換えてください。
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

同じスクリプト内でrunからフォークする

次のコードスニペットは、runを作成し、同じスクリプト内でそのrunからフォークする方法を示しています。これは、W&B Appでrun IDを調べることなく、作成したばかりのrunからフォークしたい場合に該当します。 まず、runを初期化して、いくつかのデータをログします。次に、元のrunオブジェクトのidプロパティを使用して、そのrunのrun IDを取得します。最後に、新しいrunを初期化し、元のrunのIDとフォーク元にしたいstepをwandb.init()fork_fromに引数として渡します。
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
original_run.id プロパティを使用すると、元の run の一意な run ID を取得できます。

スクリプトの例

たとえば、次のコード例は、まず run をフォークし、その後トレーニングの step 200 から、フォークした run にメトリクスをログする方法を示しています。 次のコードを Python スクリプトまたはノートブックのセルにコピー&ペーストしてください。<project><entity> はご自身の値に置き換えてください。
import wandb
import math

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

# 最初のrunを特定のstepでフォークし、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回のcallでログする
        run2.log({
            "metric": metric_value,
            "additional_metric": i * 1.1
        })
巻き戻しとフォークの互換性フォークは 巻き戻し を補完する機能で、run の管理や実験をより柔軟に行えます。run からフォークすると、W&B は run の特定の時点から新しいブランチを作成し、異なるパラメーターやモデルを試せるようにします。run を巻き戻すと、W&B では run の履歴自体を修正または変更できます。