メインコンテンツへスキップ
run の履歴を変更するには、run を巻き戻します。run を巻き戻すと、W&B は同じ run ID を維持したまま、run の状態を指定した step にリセットします。
run を巻き戻す機能は現在活発に開発が進められています。Multi-tenant Cloud および専用クラウドではプレビューとして提供されており、セルフマネージドではまだ利用できません。巻き戻しには既知のパフォーマンス上の制約があるため、W&B は通常、代替手段として フォークする を推奨しています。

前提条件

run を巻き戻す前に、以下の前提条件を満たしていることを確認してください。
  • run を巻き戻すには、W&B Python SDK のバージョン 0.17.1 以降が必要です。
  • 単調増加する step を使用する必要があります。define_metric() で定義した非単調な step は、run の履歴に必要な時系列順を乱すため、使用できません。

制限事項

巻き戻す機能は以下をサポートしていません。
  • ログの巻き戻し: 新しい run セグメントではログがリセットされます。
  • システムメトリクスの巻き戻し: W&B は巻き戻しポイント以降の新しいシステムメトリクスのみをログします。
  • artifact の関連付け: W&B は artifact を、それを生成したソース run に関連付けます。
W&B は、巻き戻した run の summary メトリクスを、新たにログされた履歴に基づいて再計算し、結果は次のとおりです。
  • 履歴の切り詰め: W&B は履歴を巻き戻しポイントで切り詰め、新しいデータをログできるようにします。
  • summary メトリクス: 新たにログされた履歴に基づいて再計算されます。
  • 設定の保持: W&B は元の設定を保持し、新しい設定をマージできます。

巻き戻しとフォークの互換性

フォークは巻き戻しを補完する機能です。 run からフォークすると、W&B は特定の時点の run から新しいブランチを作成し、異なるパラメーターやモデルを試せるようにします。 run を巻き戻すと、W&B は run の履歴そのものを修正・変更できるようにします。

run を巻き戻す

特定の step から run を巻き戻し、その時点から新しいデータをログします。wandb.init()resume_from パラメーターには、巻き戻したい run の run ID と step の両方を引数として渡します。resume_from パラメーターは、<run ID>?_step=<step> 形式の文字列を受け取ります。ここで、<run ID> は巻き戻したい run の run ID、<step> は巻き戻しを開始する step です。 300 step にわたって直線をログするとします:
import wandb

# 最初の run を初期化し、いくつかのメトリクスをログする
with wandb.init(project="<project>", entity="wandb") as run:
    for i in range(300):
        # 直線をプロットする
        run.log({"metric": i, "step": i})
プロジェクトのWorkspaceには、step 0 から step 300 までの折れ線グラフが表示されています。 元の run の折れ線グラフ 後で、step 200 から run を巻き戻し、additional_metric という新しいメトリクスに step 200 から step 300 まで i*1.1 をログしたいとします。さらに、step 250 以降は直線ではなく、緩やかに波打つ新しいパターン (i**2 + 2*sin(i/3)) をログしたいとします。
import math

run_ID = "<run_ID>" # 巻き戻したい run の run ID に置き換えてください

# 最初の run の特定の step から巻き戻し、step 200 からメトリクスをログする
with wandb.init(project="<project>", entity="wandb", resume_from=f"{run_ID}?_step=200") as run:

    # 最初の数 step は run からそのままメトリクスをログする
    # step 250 以降は波打つパターンのログを開始する
    for i in range(200, 300):
        if i < 250:
            run.log({"metric": i, "step": i})  # 波なしで run からログを継続する
        else:
            # step 250 から波打つ動作を導入する
            subtle_wave = i + (2 * math.sin(i / 3.0))  # 緩やかな波打つパターンを適用する
            run.log({"metric": subtle_wave, "step": i})
        # すべての step で新しいメトリクスも追加でログする
        run.log({"additional_metric": i * 1.1, "step": i})
次の画像は、更新後のプロジェクトのWorkspaceを示しています。巻き戻し後のプロットでは、次のような変更が見られます。
  • 折れ線グラフでは、step 0 から step 200 まで元の直線的な線が表示され、step 250 から新しいわずかに波打つパターンが始まっています (左の画像) 。
  • W&B は、step 200 から始まる additional_metric というラベルの新しいプロット (右のプロット) を作成しました。
左から右: 元の直線と追加のメトリクス

アーカイブされた run を表示する

run を巻き戻した後、W&B App で元のアーカイブ済みの run を確認できます。アーカイブされた run を表示するには、次の step に従ってください。
  1. Overview タブにアクセスする: run のページの Overview タブ にアクセスします。このタブでは、run の詳細と履歴をまとめて確認できます。
  2. Forked From フィールドを見つける: Overview タブ内で、Forked From フィールドを見つけます。このフィールドには、再開の履歴が記録されています。Forked From フィールドにはソース run へのリンクが含まれているため、元の run までたどって巻き戻し履歴全体を把握できます。
Forked From フィールドを使うと、アーカイブされた再開のツリー内を簡単にたどり、各巻き戻しの順序と起点を確認できます。

巻き戻した run からフォークする

巻き戻した run からフォークするには、wandb.init()fork_from 引数を使用し、フォーク元とするソース run ID と、そのソース run の step を指定します。
import wandb

# 特定の step から run をフォークする
forked_run = wandb.init(
    project="<project>",
    entity="<entity>",
    fork_from=f"{rewind_run.id}?_step=500",
)

# 新しい run でログを続ける
for i in range(500, 1000):
    forked_run.log({"metric": i*3})
forked_run.finish()