メインコンテンツへスキップ
元のデータを失うことなく、Run の履歴を修正または変更するために Run を巻き戻します。さらに、Run を巻き戻すと、その時点から新しいデータをログに記録できます。W&B は、新しくログに記録された履歴に基づいて、巻き戻した Run のサマリーメトリクスを再計算します。これは、以下の振る舞いを意味します:
  • 履歴の切り捨て: W&B は履歴を巻き戻しポイントまで切り捨て、新しいデータのログ記録を可能にします。
  • サマリーメトリクス: 新しくログに記録された履歴に基づいて再計算されます。
  • 設定の保持: W&B は元の configuration を保持し、新しい設定をマージすることも可能です。
Run を巻き戻すオプションはプライベートプレビュー中です。この機能へのアクセスをリクエストするには、W&B サポート(support@wandb.com)までご連絡ください。W&B は現在、以下をサポートしていません:
  • ログの巻き戻し: ログは新しい Run セグメントでリセットされます。
  • システムメトリクスの巻き戻し: W&B は巻き戻しポイント以降の新しいシステムメトリクスのみをログに記録します。
  • アーティファクトの関連付け: W&B は、アーティファクトをそれを生成したソースの Run に関連付けます。
Run を巻き戻すと、W&B は指定されたステップまで Run の状態をリセットし、元のデータを保持しながら一貫した Run ID を維持します。これは以下のことを意味します:
  • Run のアーカイブ: W&B は元の Runs をアーカイブします。アーカイブされた Runs は Run Overview タブからアクセス可能です。
  • アーティファクトの関連付け: アーティファクトをそれを生成した Run に関連付けます。
巻き戻し(Rewind)とフォーク(Forking)の互換性フォークは巻き戻しを補完します。Run をフォークする場合、W&B は特定のポイントで Run から新しいブランチを作成し、異なるパラメータやモデルを試します。Run を巻き戻す場合、W&B は Run の履歴そのものを修正または変更することを可能にします。

前提条件

Run を巻き戻す前に、以下の前提条件を満たしていることを確認してください:
  • Run を巻き戻すには、W&B Python SDK バージョン 0.17.1 以上が必要です。
  • 単調増加するステップを使用する必要があります。define_metric() で定義された非単調なステップでは機能しません。これは、Run の履歴とシステムメトリクスに必要な時系列順序が乱れるためです。

Run を巻き戻す

wandb.init()resume_from を使用して、Run の履歴を特定のステップまで「巻き戻し」ます。巻き戻しを開始する Run の名前とステップを指定します:
import wandb
import math

# 最初の Run を初期化し、いくつかのメトリクスをログに記録する
# your_project_name と your_entity_name を置き換えてください!
run1 = wandb.init(project="your_project_name", entity="your_entity_name")
for i in range(300):
    run1.log({"metric": i})
run1.finish()

# 最初の Run の特定のステップから巻き戻し、ステップ 200 からメトリクスのログ記録を開始する
run2 = wandb.init(project="your_project_name", entity="your_entity_name", resume_from=f"{run1.id}?_step=200")

# 新しい Run でログ記録を継続する
# 最初の数ステップは、run1 のメトリクスをそのままログに記録する
# ステップ 250 以降は、スパイクパターンのログ記録を開始する
for i in range(200, 300):
    if i < 250:
        run2.log({"metric": i, "step": i})  # スパイクなしで run1 からログ記録を継続
    else:
        # ステップ 250 からスパイク状の振る舞いを導入
        subtle_spike = i + (2 * math.sin(i / 3.0))  # 微細なスパイクパターンを適用
        run2.log({"metric": subtle_spike, "step": i})
    # さらに、すべてのステップで新しいメトリクスをログに記録
    run2.log({"additional_metric": i * 1.1, "step": i})
run2.finish()

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

Run を巻き戻した後、W&B App で元のアーカイブされた Run を確認できます。アーカイブされた Run を表示するには、以下の手順に従ってください:
  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 のステップを指定します:
import wandb

# 特定のステップから Run をフォークする
forked_run = wandb.init(
    project="your_project_name",
    entity="your_entity_name",
    fork_from=f"{rewind_run.id}?_step=500",
)

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