元のデータを失うことなく、run を巻き戻して run の履歴を修正または変更できます。さらに、
run を巻き戻すと、その時点から新しいデータをログできます。W&B は、新しくログされた履歴に基づいて、巻き戻した run のサマリーメトリクスを再計算します。具体的には、次のように動作します:
- 履歴の切り詰め: W&B は履歴を巻き戻しポイントまで切り詰め、その後の新しいデータのログを可能にします。
- サマリーメトリクス: 新しくログされた履歴に基づいて再計算されます。
- 設定の保持: W&B は元の設定を保持し、新しい設定をマージできます。
run を巻き戻すオプションは、現在プライベートプレビュー段階です。この機能へのアクセスをリクエストするには、support@wandb.com まで W&B Support にお問い合わせください。現在、W&B は以下をサポートしていません:
- ログの巻き戻し: ログは新しい run セグメントでリセットされます。
- システムメトリクスの巻き戻し: W&B は巻き戻しポイント以降の新しいシステムメトリクスのみをログします。
- アーティファクトの関連付け: W&B は、アーティファクトをそれを生成したソース run に関連付けます。
run を巻き戻すと、W&B は指定したステップまで run の状態をリセットし、元のデータを保持しつつ、一貫した run ID を維持します。つまり次のような動作になります:
- run のアーカイブ: W&B は元の Runs をアーカイブします。Runs は Run Overview タブからアクセスできます。
- アーティファクトの関連付け: アーティファクトを、それらを生成した run に関連付けます。
Rewind と forking の互換性Forking は rewind を補完する機能です。run から fork すると、W&B は特定の時点の run から新しいブランチを作成し、異なるパラメータやモデルを試すことができます。run を巻き戻すと、W&B は run の履歴そのものを修正または変更できるようにします。
run を巻き戻す前に、以下の前提条件を満たしていることを確認してください。
- run を巻き戻すには、W&B Python SDK のバージョンが
0.17.1 以上である必要があります。
- 単調増加するステップのみを使用する必要があります。これは、
define_metric() で定義された単調ではないステップでは、run の履歴およびシステムメトリクスの必要な時系列順序が乱れてしまうため機能しません。
resume_from を wandb.init() と一緒に使って、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を巻き戻した後、W&B Appで元のアーカイブされたrunを確認できます。アーカイブされたrunを表示するには、次の手順に従ってください。
- Overviewタブにアクセスする: runのページでOverviewタブに移動します。このタブでは、runの詳細と履歴を包括的に確認できます。
- Forked Fromフィールドを探す: Overviewタブ内で、
Forked Fromフィールドを見つけます。このフィールドにはrunの再開履歴が記録されます。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()