これは、このセクションの複数ページの印刷可能なビューです。 印刷するには、ここをクリックしてください.

このページの通常のビューに戻る.

What are runs?

W&B の基本的な構成要素である Runs について学びましょう。

run は、W&B によってログされる計算の単一の単位です。W&B の run は、プロジェクト全体の原子要素と考えることができます。つまり、各 run は、モデルのトレーニングと結果のログ、ハイパーパラメーターの スイープ など、特定の計算の記録です。

run を開始する一般的なパターンには、以下が含まれますが、これらに限定されません。

  • モデルのトレーニング
  • ハイパーパラメーターを変更して新しい 実験 を行う
  • 異なるモデルで新しい 機械学習 実験 を行う
  • W&B Artifact として データ またはモデルをログする
  • W&B Artifact をダウンロードする

W&B は、作成した run を プロジェクト に保存します。run とそのプロパティは、W&B App UI の run の プロジェクト ワークスペース 内で表示できます。また、wandb.Api.Run オブジェクトを使用して、プログラムで run のプロパティに アクセス することもできます。

run.log でログするものはすべて、その run に記録されます。次のコードスニペットを検討してください。

import wandb

run = wandb.init(entity="nico", project="awesome-project")
run.log({"accuracy": 0.9, "loss": 0.1})

最初の行は、W&B Python SDK をインポートします。2 行目は、エンティティ nico の下の プロジェクト awesome-project で run を初期化します。3 行目は、モデルの 精度 と 損失 をその run にログします。

ターミナル 内で、W&B は以下を返します。

wandb: Syncing run earnest-sunset-1
wandb: ⭐️ View project at https://wandb.ai/nico/awesome-project
wandb: 🚀 View run at https://wandb.ai/nico/awesome-project/runs/1jx1ud12
wandb:                                                                                
wandb: 
wandb: Run history:
wandb: accuracy  
wandb:     loss  
wandb: 
wandb: Run summary:
wandb: accuracy 0.9
wandb:     loss 0.5
wandb: 
wandb: 🚀 View run earnest-sunset-1 at: https://wandb.ai/nico/awesome-project/runs/1jx1ud12
wandb: ⭐️ View project at: https://wandb.ai/nico/awesome-project
wandb: Synced 6 W&B file(s), 0 media file(s), 0 artifact file(s) and 0 other file(s)
wandb: Find logs at: ./wandb/run-20241105_111006-1jx1ud12/logs

ターミナル で W&B が返す URL は、W&B App UI の run の ワークスペース にリダイレクトします。ワークスペース で生成される パネル は、単一のポイントに対応していることに注意してください。

単一の時点での メトリクス のログは、それほど役に立たない場合があります。判別モデルのトレーニングの場合のより現実的な例は、一定の間隔で メトリクス をログすることです。たとえば、次のコードスニペットを検討してください。

epochs = 10
lr = 0.01

run = wandb.init(
    entity="nico",
    project="awesome-project",
    config={
        "learning_rate": lr,
        "epochs": epochs,
    },
)

offset = random.random() / 5

# simulating a training run
for epoch in range(epochs):
    acc = 1 - 2**-epoch - random.random() / (epoch + 1) - offset
    loss = 2**-epoch + random.random() / (epoch + 1) + offset
    print(f"epoch={epoch}, accuracy={acc}, loss={loss}")
    run.log({"accuracy": acc, "loss": loss})

これにより、次の出力が返されます。

wandb: Syncing run jolly-haze-4
wandb: ⭐️ View project at https://wandb.ai/nico/awesome-project
wandb: 🚀 View run at https://wandb.ai/nico/awesome-project/runs/pdo5110r
lr: 0.01
epoch=0, accuracy=-0.10070974957523078, loss=1.985328507123956
epoch=1, accuracy=0.2884687745057535, loss=0.7374362314407752
epoch=2, accuracy=0.7347387967382066, loss=0.4402409835486663
epoch=3, accuracy=0.7667969248039795, loss=0.26176963846423457
epoch=4, accuracy=0.7446848791003173, loss=0.24808611724405083
epoch=5, accuracy=0.8035095836268268, loss=0.16169791827329466
epoch=6, accuracy=0.861349032371624, loss=0.03432578493587426
epoch=7, accuracy=0.8794926436276016, loss=0.10331872172219471
epoch=8, accuracy=0.9424839917077272, loss=0.07767793473500445
epoch=9, accuracy=0.9584880427028566, loss=0.10531971149250456
wandb: 🚀 View run jolly-haze-4 at: https://wandb.ai/nico/awesome-project/runs/pdo5110r
wandb: Find logs at: wandb/run-20241105_111816-pdo5110r/logs

トレーニング スクリプト は run.log を 10 回呼び出します。スクリプト が run.log を呼び出すたびに、W&B はその エポック の 精度 と 損失 をログします。W&B が前の出力から出力する URL を選択すると、W&B App UI の run の ワークスペース に移動します。

スクリプト が wandb.init メソッド を 1 回だけ呼び出すため、W&B はシミュレートされたトレーニング ループ を jolly-haze-4 という単一の run 内でキャプチャすることに注意してください。

別の例として、sweep 中に、W&B は指定した ハイパーパラメーター 探索 空間を探索します。W&B は、sweep が作成する新しい ハイパーパラメーター の組み合わせを、一意の run として実装します。

run を初期化する

wandb.init() を使用して W&B run を初期化します。次のコードスニペットは、W&B Python SDK をインポートして run を初期化する方法を示しています。

山かっこ (< >) で囲まれた値を、自分の値に置き換えてください。

import wandb

run = wandb.init(entity="<entity>", project="<project>")

run を初期化すると、W&B は プロジェクト フィールド に指定した プロジェクト (wandb.init(project="<project>" に run をログします。W&B は、 プロジェクト がまだ存在しない場合は、新しい プロジェクト を作成します。プロジェクト がすでに存在する場合は、W&B はその プロジェクト に run を保存します。

W&B の各 run には、run ID と呼ばれる一意の識別子があります一意の ID を指定する か、W&B に ID をランダムに生成させる ことができます。

各 run には、人間が読める run 名 としても知られる一意でない識別子もあります。run の名前を指定するか、W&B にランダムに生成させることができます。

たとえば、次のコードスニペットを考えてみましょう。

import wandb

run = wandb.init(entity="wandbee", project="awesome-project")

コードスニペット は、次の出力を生成します。

🚀 View run exalted-darkness-6 at: 
https://wandb.ai/nico/awesome-project/runs/pgbn9y21
Find logs at: wandb/run-20241106_090747-pgbn9y21/logs

上記の コード が id パラメータ の 引数 を指定しなかったため、W&B は一意の run ID を作成します。nico は run をログした エンティティ 、awesome-project は run がログされる プロジェクト の名前、exalted-darkness-6 は run の名前、pgbn9y21 は run ID です。

各 run には、run の現在のステータス を記述する 状態 があります。可能な run の 状態 の完全なリストについては、Run の 状態 を参照してください。

Run の 状態

次のテーブルは、run がとりうる 状態 を記述しています。

状態 説明
Finished run が終了し、 完全に データ が同期されたか、wandb.finish() が呼び出されました
Failed run が 0 以外の終了ステータス で終了しました
Crashed run が 内部 プロセス で ハートビート の送信を停止しました。これは、 マシン が クラッシュ した場合に発生する可能性があります
Running run はまだ実行中で、最近 ハートビート を送信しました

一意の run 識別子

Run ID は、run の一意の識別子です。デフォルトでは、新しい run を初期化すると、W&B が ランダム で一意の run ID を生成します。run を初期化するときに、独自の 一意の run ID を指定する こともできます。

自動生成された run ID

run を初期化するときに run ID を指定しない場合、W&B は ランダム な run ID を生成します。run の一意の ID は、W&B App UI で確認できます。

  1. https://wandb.ai/home の W&B App UI に移動します。
  2. run の初期化時に指定した W&B プロジェクト に移動します。
  3. プロジェクト の ワークスペース 内で、[Runs] タブ を選択します。
  4. [Overview] タブ を選択します。

W&B は、[Run パス] フィールド に一意の run ID を表示します。run パス は、 チーム の名前、 プロジェクト の名前、run ID で構成されます。一意の ID は、run パス の最後の部分です。

たとえば、次の図では、一意の run ID は 9mxi1arc です。

カスタム run ID

wandb.init メソッド に id パラメータ を渡すことで、独自の run ID を指定できます。

import wandb

run = wandb.init(entity="<project>", project="<project>", id="<run-id>")

run の一意の ID を使用して、W&B App UI で run の Overview ページ に直接移動できます。次のセルは、特定の run の URL パス を示しています。

https://wandb.ai/<entity>/<project>/<run-id>

山かっこ (< >) で囲まれた値は、エンティティ 、 プロジェクト 、run ID の実際の値の プレースホルダー です。

run に名前を付ける

run の名前は、人間が読める一意でない識別子です。

デフォルトでは、W&B は新しい run を初期化するときに ランダム な run 名を生成します。run の名前は、 プロジェクト の ワークスペース 内と、run の Overview ページ の上部に表示されます。

wandb.init メソッド に name パラメータ を渡すことで、run の名前を指定できます。

import wandb

run = wandb.init(entity="<project>", project="<project>", name="<run-name>")

run にメモを追加する

特定の run に追加するメモは、[Overview] タブ の run ページ と、 プロジェクト ページ の run のテーブルに表示されます。

  1. W&B プロジェクト に移動します
  2. プロジェクト サイドバー から [Workspace] タブ を選択します
  3. run セレクター からメモを追加する run を選択します
  4. [Overview] タブ を選択します
  5. [Description] フィールド の横にある 鉛筆 アイコン を選択し、メモを追加します

run を停止する

W&B App または プログラム で run を停止します。

  1. run を初期化した ターミナル または コード エディタ に移動します。
  2. Ctrl+D を押して run を停止します。

たとえば、上記の手順に従うと、 ターミナル は次のようになります。

KeyboardInterrupt
wandb: 🚀 View run legendary-meadow-2 at: https://wandb.ai/nico/history-blaster-4/runs/o8sdbztv
wandb: Synced 5 W&B file(s), 0 media file(s), 0 artifact file(s) and 1 other file(s)
wandb: Find logs at: ./wandb/run-20241106_095857-o8sdbztv/logs

W&B App UI に移動して、run が アクティブ でなくなったことを確認します。

  1. run がログされている プロジェクト に移動します。
  2. run の名前を選択します。
3. プロジェクト サイドバー から [**Overview**] タブ を選択します。

[State] フィールド の横で、run の 状態 が running から Killed に変わります。

  1. run がログされている プロジェクト に移動します。
  2. run セレクター 内で停止する run を選択します。
  3. プロジェクト サイドバー から [Overview] タブ を選択します。
  4. [State] フィールド の横にある上部の ボタン を選択します。

[State] フィールド の横で、run の 状態 が running から Killed に変わります。

可能な run の 状態 の完全なリストについては、State フィールド を参照してください。

ログに記録された run を表示する

run の 状態、run にログされた Artifacts、run 中に記録された ログ ファイル など、特定の run に関する情報を表示します。

特定の run を表示するには:

  1. https://wandb.ai/home の W&B App UI に移動します。

  2. run の初期化時に指定した W&B プロジェクト に移動します。

  3. プロジェクト サイドバー 内で、[Workspace] タブ を選択します。

  4. run セレクター 内で、表示する run をクリックするか、run 名の一部を入力して、一致する run を フィルター します。

    デフォルトでは、長い run 名は読みやすくするために中央で切り捨てられます。代わりに、run 名を先頭または末尾で切り捨てるには、run のリストの上部にある アクション ... メニュー をクリックし、[Run 名のトリミング] を設定して、末尾、中央、または先頭をトリミングします。

特定の run の URL パス には、次の形式があることに注意してください。

https://wandb.ai/<team-name>/<project-name>/runs/<run-id>

山かっこ (< >) で囲まれた値は、 チーム 名、 プロジェクト 名、run ID の実際の値の プレースホルダー です。

Overviewタブ

[Overview] タブ を使用して、 プロジェクト 内の特定の run 情報について学習します。次に例を示します。

  • Author: run を作成する W&B エンティティ 。
  • Command: run を初期化する コマンド 。
  • Description: 提供した run の説明。run の作成時に説明を指定しない場合、このフィールド は空です。W&B App UI を使用するか、Python SDK で プログラム で説明を run に追加できます。
  • Duration: run が アクティブ に計算または データ をログしている時間。一時停止または待機は除きます。
  • Git リポジトリ: run に関連付けられている git リポジトリ。git を有効にする して、このフィールド を表示する必要があります。
  • Host name: W&B が run を計算する場所。 マシン で ローカル に run を初期化する場合は、 マシン の名前が表示されます。
  • Name: run の名前。
  • OS: run を初期化する オペレーティング システム 。
  • Python 実行可能ファイル: run を開始する コマンド 。
  • Python バージョン: run を作成する Python バージョン を指定します。
  • Run パス: entity/project/run-ID の形式で一意の run 識別子を識別します。
  • Runtime: run の開始から終了までの合計時間を測定します。これは、run の ウォール クロック 時間です。Runtime には、run が一時停止している時間または リソース を待機している時間が含まれますが、Duration は含まれません。
  • Start time: run を初期化する タイムスタンプ 。
  • State: run の 状態
  • System hardware: W&B が run の計算に使用する ハードウェア 。
  • Tags: 文字列のリスト。タグ は、関連する run をまとめて編成したり、baselineproduction などの一時的なラベル を適用したりするのに役立ちます。
  • W&B CLI バージョン: run コマンド を ホスト した マシン にインストールされている W&B CLI バージョン 。

W&B は、概要セクション の下に次の情報を保存します。

  • Artifact Outputs: run によって生成された Artifacts 出力。
  • Config: wandb.config で保存された config パラメータ のリスト。
  • Summary: wandb.log() で保存された summary パラメータ のリスト。デフォルトでは、W&B はこの値を最後にログされた値に設定します。
W&B Dashboard run overview tab

プロジェクト の概要の例はこちらをご覧ください。

Workspaceタブ

[Workspace] タブ を使用して、自動生成された カスタム プロット 、 システム メトリクス など、 可視化 を表示、検索、 グループ化 、および配置します。

プロジェクト ワークスペース の例はこちらをご覧ください

Runsタブ

[Runs] タブ を使用して、run を フィルター 、 グループ化 、および並べ替えます。

次のタブ は、[Runs] タブ で実行できる一般的な アクション の一部を示しています。

[Runs] タブ には、 プロジェクト 内の run に関する詳細が表示されます。デフォルトでは、多数の 列 が表示されます。

  • 表示されているすべての 列 を表示するには、 ページ を水平方向に スクロール します。
  • 列 の順序を変更するには、 列 を左または右に ドラッグ します。
  • 列 を ピン留め するには、 列 名の上に カーソル を置き、表示される アクション メニュー ... をクリックし、[Pin column] をクリックします。ピン留め された 列 は、[Name] 列 の後、 ページ の左側の近くに表示されます。ピン留め された 列 の ピン留め を解除するには、[Unpin column] を選択します
  • 列 を非表示にするには、 列 名の上に カーソル を置き、表示される アクション メニュー ... をクリックし、[Hide column] をクリックします。現在非表示になっているすべての 列 を表示するには、[Columns] をクリックします。
  • 複数の 列 を一度に表示、非表示、 ピン留め 、および ピン留め 解除するには、[Columns] をクリックします。
    • 非表示の 列 の名前をクリックして、非表示を解除します。
    • 表示されている 列 の名前をクリックして、非表示にします。
    • 表示されている 列 の横にある ピン アイコン をクリックして ピン留め します。

[Runs] タブ を カスタマイズ すると、 カスタマイズ はWorkspace タブ の [Runs] セレクター にも反映されます。

指定された 列 の値で テーブル 内のすべての行を並べ替えます。

  1. マウス を 列 タイトル の上に移動します。ケバブ メニュー (3 つの垂直 ドット) が表示されます。
  2. ケバブ メニュー (3 つの垂直 ドット) を選択します。
  3. [Sort Asc] または [Sort Desc] を選択して、行をそれぞれ 昇順 または 降順 に並べ替えます。
See the digits for which the model most confidently guessed '0'.

上の図は、val_acc という名前の テーブル 列 の並べ替え オプション を表示する方法を示しています。

ダッシュボード の上にある [Filter] ボタン を使用して、 式 で すべての行を フィルター します。

See only examples which the model gets wrong.

[Add filter] を選択して、1 つまたは複数の フィルター を行に追加します。3 つの ドロップダウン メニュー が表示されます。左から右への フィルター タイプ は、 列 名、 オペレーター 、および値に基づいています

列 名 二項関係
受け入れられる値 文字列 =, ≠, ≤, ≥, IN, NOT IN, 整数, float, 文字列, タイムスタンプ , null

式 エディター には、 列 名のオートコンプリート と論理述語構造を使用して、各 項 の オプション のリストが表示されます。「and」または「or」(および場合によっては 括弧 ) を使用して、複数の論理述語を 1 つの 式 に接続できます。

上の図は、`val_loss` 列 に基づく フィルター を示しています。この フィルター は、 検証 損失 が 1 以下 の run を表示します。

ダッシュボード の上にある [Group by] ボタン を使用して、特定の 列 の値で行を グループ化 します。

The truth distribution shows small errors: 8s and 2s are confused for 7s and 9s for 2s.

デフォルトでは、これにより、他の数値 列 が、その グループ 全体の 列 の値の分布を示す ヒストグラム に変わります。グループ化 は、 データ のより高レベルの パターン を理解するのに役立ちます。

Systemタブ

[System タブ] には、CPU 使用率、 システム メモリ 、 ディスク I/O、 ネットワーク トラフィック、GPU 使用率など、特定の run に対して追跡される システム メトリクス が表示されます。

W&B が追跡する システム メトリクス の完全なリストについては、System メトリクス を参照してください。

システム タブ の例はこちらをご覧ください。

Logsタブ

[Log タブ] には、 コマンドライン に出力された出力 (標準出力 (stdout) や 標準 エラー (stderr) など) が表示されます。

右上隅にある [Download] ボタン を選択して、 ログ ファイル をダウンロードします。

ログ タブ の例はこちらをご覧ください。

Filesタブ

[Files タブ] を使用して、モデル チェックポイント 、 検証 セット の例など、特定の run に関連付けられた ファイル を表示します

ファイル タブ の例はこちらをご覧ください。

Artifactsタブ

[Artifacts] タブ には、指定された run の 入力 および 出力 アーティファクト が一覧表示されます。

アーティファクト タブ の例はこちらをご覧ください。

run を削除する

W&B App を使用して、 プロジェクト から 1 つまたは複数の run を削除します。

  1. 削除する run が含まれている プロジェクト に移動します。
  2. プロジェクト サイドバー から [Runs] タブ を選択します。
  3. 削除する run の横にある チェックボックス をオンにします。
  4. テーブル の上にある [Delete] ボタン ( ゴミ箱 アイコン ) を選択します。
  5. 表示される モーダル から、[Delete] を選択します。

run を整理する

このセクション では、 グループ と ジョブタイプ を使用して run を整理する方法について説明します。run を グループ (たとえば、 実験 名) に割り当て、 ジョブタイプ (たとえば、 前処理 、 トレーニング 、 評価 、 デバッグ ) を指定することで、 ワークフロー を効率化し、モデル の比較を改善できます。

run に グループ または ジョブタイプ を割り当てる

W&B の各 run は、[グループ] と [ジョブタイプ] で 分類 できます。

  • グループ: 実験 の広範な カテゴリ で、run の整理と フィルター に使用されます。
  • ジョブタイプ: preprocessingtrainingevaluation など、run の 機能 。

次のワークスペース の例 では、Fashion-MNIST データセット から 増え続ける量の データ を使用して ベースライン モデル を トレーニング します。ワークスペース では、使用される データ 量を色で表します。

  • 黄色から濃い緑は、 ベースライン モデル の データ 量が増加していることを示します。
  • 水色からバイオレット、マゼンタは、追加の パラメータ を持つ、より複雑な「double」モデルの データ 量を示します。

W&B の フィルター オプション と検索バーを使用して、特定の条件に基づいて run を比較します。次に例を示します。

  • 同じ データセット での トレーニング 。
  • 同じ テストセット での 評価 。

フィルター を適用すると、[Table] ビュー が自動的に更新されます。これにより、モデル 間の パフォーマンス の違いを特定できます。たとえば、一方のモデル で他方のモデル よりも大幅に困難な クラス を特定できます。

1 - Add labels to runs with tags

ログに記録されたメトリクスや Artifact データからは明らかでない、特定の機能を持つ run にラベルを付けるために、タグを追加します。

例えば、run の model が in_production であること、run が preemptible であること、この run が baseline を表していることなどを表すタグを、run に追加できます。

1つまたは複数の run にタグを追加する

プログラムで、またはインタラクティブに、run にタグを追加します。

ユースケースに応じて、ニーズに最も適した以下のタブを選択してください。

run の作成時にタグを追加できます。

import wandb

run = wandb.init(
  entity="entity",
  project="<project-name>",
  tags=["tag1", "tag2"]
)

run を初期化した後にタグを更新することもできます。例えば、以下のコードスニペットは、特定のメトリクスが事前定義された閾値を超えた場合にタグを更新する方法を示しています。

import wandb

run = wandb.init(
  entity="entity", 
  project="capsules", 
  tags=["debug"]
  )

# python logic to train model

if current_loss < threshold:
    run.tags = run.tags + ("release_candidate",)

run の作成後、Public API を使用してタグを更新できます。例:

run = wandb.Api().run("{entity}/{project}/{run-id}")
run.tags.append("tag1")  # you can choose tags based on run data here
run.update()

この方法は、多数の run に同じタグを付けるのに最適です。

  1. プロジェクトの Workspace に移動します。
  2. プロジェクトのサイドバーから Runs を選択します。
  3. テーブルから1つまたは複数の run を選択します。
  4. 1つまたは複数の run を選択したら、テーブルの上の Tag ボタンを選択します。
  5. 追加するタグを入力し、Create new tag チェックボックスを選択してタグを追加します。

この方法は、1つの run に手動でタグを適用するのに最適です。

  1. プロジェクトの Workspace に移動します。
  2. プロジェクトの Workspace 内の run のリストから run を選択します。
  3. プロジェクトのサイドバーから Overview を選択します。
  4. Tags の横にある灰色のプラスアイコン(+)ボタンを選択します。
  5. 追加するタグを入力し、テキストボックスの下にある Add を選択して新しいタグを追加します。

1つまたは複数の run からタグを削除する

タグは、W&B App UI を使用して run から削除することもできます。

この方法は、多数の run からタグを削除するのに最適です。

  1. プロジェクトの Run サイドバーで、右上にあるテーブルアイコンを選択します。これにより、サイドバーが展開されて Runs テーブル全体が表示されます。
  2. テーブル内の run にカーソルを合わせると、左側にチェックボックスが表示されます。または、ヘッダー行にすべての run を選択するためのチェックボックスがあります。
  3. チェックボックスを選択して、一括操作を有効にします。
  4. タグを削除する run を選択します。
  5. run の行の上にある Tag ボタンを選択します。
  6. タグの横にあるチェックボックスを選択して、run からタグを削除します。
  1. Run ページの左側のサイドバーで、一番上の Overview タブを選択します。run のタグがここに表示されます。
  2. タグにカーソルを合わせ、“x” を選択して run から削除します。

2 - Filter and search runs

プロジェクトページでサイドバーとテーブルを使用する方法

WandB にログされた run からの洞察を得るには、プロジェクトページを使用してください。Workspace ページと Runs ページの両方から、run をフィルタリングおよび検索できます。

run をフィルタリングする

フィルターボタンを使用して、ステータス、タグ、またはその他のプロパティに基づいて run をフィルタリングします。

タグで run をフィルタリングする

フィルターボタンを使用して、タグに基づいて run をフィルタリングします。

正規表現で run をフィルタリングする

正規表現で目的の検索結果が得られない場合は、タグを使用して、Runs Table で run をフィルタリングできます。タグは、run の作成時または完了後に追加できます。タグが run に追加されると、以下の gif に示すようにタグフィルターを追加できます。

If regex doesn't provide you the desired results, you can make use of tags to filter out the runs in Runs Table

run を検索する

正規表現を使用して、指定した正規表現に一致する run を検索します。検索ボックスにクエリを入力すると、Workspace 上のグラフに表示される run が絞り込まれるとともに、テーブルの行もフィルタリングされます。

run をグループ化する

1 つまたは複数の列 (非表示の列を含む) で run をグループ化するには:

  1. 検索ボックスの下にある、罫線が引かれた用紙のような Group ボタンをクリックします。
  2. 結果をグループ化する 1 つまたは複数の列を選択します。
  3. グループ化された run の各セットは、デフォルトで折りたたまれています。展開するには、グループ名の横にある矢印をクリックします。

最小値と最大値で run を並べ替える

ログに記録されたメトリクスの最小値または最大値で、run テーブルを並べ替えます。これは、記録された最高 (または最低) の値を表示する場合に特に役立ちます。

次のステップでは、記録された最小値または最大値に基づいて、特定のメトリクスで run テーブルを並べ替える方法について説明します。

  1. 並べ替えに使用するメトリクスを含む列にマウスを合わせます。
  2. ケバブメニュー (縦の 3 本線) を選択します。
  3. ドロップダウンから、Show min または Show max を選択します。
  4. 同じドロップダウンから、Sort by asc または Sort by desc を選択して、それぞれ昇順または降順で並べ替えます。

run の検索終了時間

クライアント プロセスからの最後のハートビートをログに記録する End Time という名前の列を提供します。このフィールドはデフォルトで非表示になっています。

Runs Table を CSV にエクスポート

ダウンロードボタンを使用して、すべての run、ハイパーパラメーター 、およびサマリー メトリクスのテーブルを CSV にエクスポートします。

3 - Fork a run

W&B の run をフォークする

既存の W&B の run から「フォーク」するには、wandb.init() で run を初期化する際に fork_from を使用します。run からフォークすると、W&B はソース run の run IDstep を使用して新しい run を作成します。

run をフォークすると、元の run に影響を与えることなく、実験の特定の時点から異なるパラメータまたは model を調べることができます。

フォークされた run を開始する

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

import wandb

# 後でフォークされる run を初期化する
original_run = wandb.init(project="your_project_name", entity="your_entity_name")
# ... トレーニングまたはログの記録を実行 ...
original_run.finish()

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

イミュータブルな run ID を使用する

イミュータブルな run ID を使用して、特定の run への一貫性があり、変更されない参照を確保します。ユーザーインターフェースからイミュータブルな run ID を取得するには、次の手順に従います。

  1. Overviewタブにアクセスする: ソース run のページの Overviewタブ に移動します。

  2. イミュータブルな Run ID をコピーする: Overview タブの右上隅にある ... メニュー (3 つのドット) をクリックします。ドロップダウンメニューから [イミュータブルな Run ID をコピー] オプションを選択します。

これらの手順に従うことで、run への安定した変更されない参照が得られ、run のフォークに使用できます。

フォークされた run から続行する

フォークされた run を初期化したら、新しい run へのログ記録を続行できます。継続性のために同じメトリクスをログに記録し、新しいメトリクスを導入できます。

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

import wandb
import math

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

# 特定の step で最初の run からフォークし、step 200 から始まるメトリクスをログに記録する
run2 = wandb.init(
    "your_project_name", entity="your_entity_name", fork_from=f"{run1.id}?_step=200"
)

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

4 - Group runs into experiments

トレーニング と評価の run を、より大規模な Experiments にグループ化します。

個々のジョブをグループ化して実験をまとめるには、一意の group 名を wandb.init() に渡します。

ユースケース

  1. 分散トレーニング: 実験が、より大きな全体の一部として捉えられるべき個別のトレーニング スクリプトや評価スクリプトに分割されている場合は、グループ化を使用します。
  2. 複数のプロセス: 複数のより小さなプロセスをグループ化して、1つの実験としてまとめます。
  3. K-分割交差検証: 異なる乱数シードを持つrunをグループ化して、より大規模な実験を把握します。Sweepsとグループ化を用いたk-分割交差検証のをご覧ください。

グループ化を設定するには、次の3つの方法があります。

1. スクリプトでグループを設定する

オプションの group と job_type を wandb.init() に渡します。これにより、個々のrunを含む実験ごとに専用のグループページが作成されます。例:wandb.init(group="experiment_1", job_type="eval")

2. グループ環境変数を設定する

WANDB_RUN_GROUP を使用して、runのグループを環境変数として指定します。詳細については、環境変数 に関するドキュメントをご覧ください。Group は、Project 内で一意であり、グループ内のすべてのrunで共有される必要があります。wandb.util.generate_id() を使用して、すべてのプロセスで使用する一意の8文字の文字列を生成できます。たとえば、os.environ["WANDB_RUN_GROUP"] = "experiment-" + wandb.util.generate_id() のようにします。

3. UIでグループ化を切り替える

任意の設定列で動的にグループ化できます。たとえば、wandb.config を使用してバッチサイズまたは学習率をログに記録する場合、Webアプリケーションでこれらのハイパーパラメーターを動的にグループ化できます。

グループ化による分散トレーニング

wandb.init() でグループ化を設定すると、UIでrunがデフォルトでグループ化されます。これは、テーブルの上部にある Group ボタンをクリックしてオン/オフを切り替えることができます。グループ化を設定した サンプルコード から生成された プロジェクトの例 を示します。サイドバーの各「Group」行をクリックすると、その実験専用のグループページに移動できます。

上記のプロジェクトページから、左側のサイドバーにある Group をクリックして、このページ のような専用ページに移動できます。

UI での動的なグループ化

任意の列(例えば、ハイパーパラメーター)でrunをグループ化できます。その様子を以下に示します。

  • サイドバー: Runはエポック数でグループ化されています。
  • グラフ: 各線はグループの平均値を表し、網掛けは分散を示します。この振る舞いはグラフ設定で変更できます。

グループ化をオフにする

グループ化ボタンをクリックして、グループフィールドをいつでもクリアできます。これにより、テーブルとグラフはグループ化されていない状態に戻ります。

グラフ設定のグループ化

グラフの右上隅にある編集ボタンをクリックし、Advanced タブを選択して、線と網掛けを変更します。各グループの線の平均値、最小値、または最大値を選択できます。網掛けの場合、網掛けをオフにしたり、最小値と最大値、標準偏差、および標準誤差を表示したりできます。

5 - Move runs

このページでは、ある run を別の project へ、team の内外へ、またはある team から別の team へ移動する方法について説明します。現在の場所と新しい場所で run にアクセスできる必要があります。

Runs タブをカスタマイズするには、Project pageを参照してください。

project 間で run を移動する

ある project から別の project へ run を移動するには:

  1. 移動する run が含まれている project に移動します。
  2. project のサイドバーから Runs タブを選択します。
  3. 移動する run の横にあるチェックボックスをオンにします。
  4. テーブルの上にある Move ボタンを選択します。
  5. ドロップダウンから移動先の project を選択します。

team へ run を移動する

自分がメンバーである team へ run を移動するには:

  1. 移動する run が含まれている project に移動します。
  2. project のサイドバーから Runs タブを選択します。
  3. 移動する run の横にあるチェックボックスをオンにします。
  4. テーブルの上にある Move ボタンを選択します。
  5. ドロップダウンから移動先の team と project を選択します。

6 - Resume a run

一時停止または終了した W&B Run を再開する

run が停止またはクラッシュした場合に、run がどのように振る舞うかを指定します。run を再開するか、run が自動的に再開できるようにするには、id パラメータに対して、その run に関連付けられた一意の run ID を指定する必要があります。

run = wandb.init(entity="<entity>", \ 
        project="<project>", id="<run ID>", resume="<resume>")

W&B がどのように応答するかを決定するために、次の引数のいずれかを resume パラメータに渡します。いずれの場合も、W&B は最初に run ID がすでに存在するかどうかを確認します。

引数 説明 Run ID が存在する場合 Run ID が存在しない場合 ユースケース
"must" W&B は、run ID で指定された run を再開する必要があります。 W&B は同じ run ID で run を再開します。 W&B はエラーを発生させます。 同じ run ID を使用する必要がある run を再開します。
"allow" W&B は、run ID が存在する場合に run を再開することを許可します。 W&B は同じ run ID で run を再開します。 W&B は、指定された run ID で新しい run を初期化します。 既存の run を上書きせずに run を再開します。
"never" W&B は、run ID で指定された run を再開することを許可しません。 W&B はエラーを発生させます。 W&B は、指定された run ID で新しい run を初期化します。

resume="auto" を指定して、W&B が自動的に run の再起動を試みるようにすることもできます。ただし、同じディレクトリーから run を再起動する必要があります。run を自動的に再開できるようにする セクションを参照してください。

以下のすべての例で、<> で囲まれた値を独自の値に置き換えてください。

同じ run ID を使用する必要がある run を再開する

run が停止、クラッシュ、または失敗した場合、同じ run ID を使用して再開できます。これを行うには、run を初期化し、以下を指定します。

  • resume パラメータを "must" (resume="must") に設定します。
  • 停止またはクラッシュした run の run ID を指定します。

次のコードスニペットは、W&B Python SDK でこれを実現する方法を示しています。

run = wandb.init(entity="<entity>", \ 
        project="<project>", id="<run ID>", resume="must")

既存の run を上書きせずに run を再開する

既存の run を上書きせずに、停止またはクラッシュした run を再開します。これは、プロセスが正常に終了しない場合に特に役立ちます。次回 W&B を起動すると、W&B は最後のステップからログの記録を開始します。

W&B で run を初期化するときに、resume パラメータを "allow" (resume="allow") に設定します。停止またはクラッシュした run の run ID を指定します。次のコードスニペットは、W&B Python SDK でこれを実現する方法を示しています。

import wandb

run = wandb.init(entity="<entity>", \ 
        project="<project>", id="<run ID>", resume="allow")

run を自動的に再開できるようにする

次のコードスニペットは、Python SDK または環境変数を使用して、run を自動的に再開できるようにする方法を示しています。

次のコードスニペットは、Python SDK で W&B の run ID を指定する方法を示しています。

<> で囲まれた値を独自の値に置き換えてください。

run = wandb.init(entity="<entity>", \ 
        project="<project>", id="<run ID>", resume="<resume>")

次の例は、bash スクリプトで W&B の WANDB_RUN_ID 変数を指定する方法を示しています。

RUN_ID="$1"

WANDB_RESUME=allow WANDB_RUN_ID="$RUN_ID" python eval.py

ターミナル内で、W&B の run ID と共にシェルスクリプトを実行できます。次のコードスニペットは、run ID akj172 を渡します。

sh run_experiment.sh akj172 

たとえば、Users/AwesomeEmployee/Desktop/ImageClassify/training/ というディレクトリーで train.py という Python スクリプトを実行するとします。train.py 内で、スクリプトは自動再開を有効にする run を作成します。次に、トレーニングスクリプトが停止したとします。この run を再開するには、Users/AwesomeEmployee/Desktop/ImageClassify/training/ 内で train.py スクリプトを再起動する必要があります。

プリエンプティブ Sweeps run の再開

中断された sweep run を自動的に再キューします。これは、プリエンプティブキューの SLURM ジョブ、EC2 スポットインスタンス、または Google Cloud プリエンプティブ VM など、プリエンプションの影響を受けるコンピューティング環境で sweep agent を実行する場合に特に役立ちます。

mark_preempting 関数を使用して、W&B が中断された sweep run を自動的に再キューできるようにします。たとえば、次のコードスニペット

run = wandb.init()  # run を初期化します
run.mark_preempting()

次の表は、sweep run の終了ステータスに基づいて W&B が run をどのように処理するかを示しています。

ステータス 振る舞い
ステータスコード 0 Run は正常に終了したと見なされ、再キューされません。
ゼロ以外のステータス W&B は、run を sweep に関連付けられた run キューに自動的に追加します。
ステータスなし Run は sweep run キューに追加されます。Sweep agent は、キューが空になるまで run キューから run を消費します。キューが空になると、sweep キューは sweep 検索アルゴリズムに基づいて新しい run の生成を再開します。

7 - Rewind a run

巻き戻し

run の巻き戻し

run を巻き戻して、元のデータを失うことなく、run の履歴を修正または変更します。さらに、run を巻き戻すと、その時点から新しいデータを記録できます。W&B は、新たに記録された履歴に基づいて、巻き戻した run のサマリーメトリクスを再計算します。これは、次の振る舞いを意味します。

  • 履歴の切り捨て: W&B は履歴を巻き戻しポイントまで切り捨て、新しいデータロギングを可能にします。
  • サマリーメトリクス: 新たに記録された履歴に基づいて再計算されます。
  • 設定の保持: W&B は元の設定を保持し、新しい設定をマージできます。

run を巻き戻すと、W&B は run の状態を指定されたステップにリセットし、元のデータを保持し、一貫した run ID を維持します。これは次のことを意味します。

  • run のアーカイブ: W&B は元の run をアーカイブします。アーカイブされた run は、Run Overview タブからアクセスできます。
  • Artifact の関連付け: Artifact をそれを生成する run に関連付けます。
  • 不変の run ID: 正確な状態からのフォークの一貫性のために導入されました。
  • 不変の run ID のコピー: run 管理を改善するために、不変の run ID をコピーするボタン。

run の巻き戻し

resume_from を使用して wandb.init() を使用して、run の履歴を特定のステップに「巻き戻し」ます。巻き戻す run の名前とステップを指定します。

import wandb
import math

# Initialize the first run and log some metrics
# Replace with your_project_name and 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()

# Rewind from the first run at a specific step and log the metric starting from step 200
run2 = wandb.init(project="your_project_name", entity="your_entity_name", resume_from=f"{run1.id}?_step=200")

# Continue logging in the new run
# For the first few steps, log the metric as is from run1
# After step 250, start logging the spikey pattern
for i in range(200, 300):
    if i < 250:
        run2.log({"metric": i, "step": i})  # Continue logging from run1 without spikes
    else:
        # Introduce the spikey behavior starting from step 250
        subtle_spike = i + (2 * math.sin(i / 3.0))  # Apply a subtle spikey pattern
        run2.log({"metric": subtle_spike, "step": i})
    # Additionally log the new metric at all steps
    run2.log({"additional_metric": i * 1.1, "step": i})
run2.finish()

アーカイブされた run の表示

run を巻き戻した後、W&B App UI でアーカイブされた 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

# Fork the run from a specific step
forked_run = wandb.init(
    project="your_project_name",
    entity="your_entity_name",
    fork_from=f"{rewind_run.id}?_step=500",
)

# Continue logging in the new run
for i in range(500, 1000):
    forked_run.log({"metric": i*3})
forked_run.finish()

8 - Send an alert

Python コードからトリガーされたアラートを Slack またはメールに送信します。

run がクラッシュした場合、またはカスタムトリガーで Slack またはメールでアラートを作成します。たとえば、トレーニングループの勾配が爆発し始めた場合 (NaN を報告)、または ML パイプライン のステップが完了した場合にアラートを作成できます。アラートは、個人 プロジェクト と Team プロジェクト の両方を含む、run を初期化するすべての プロジェクト に適用されます。

次に、Slack (またはメール) で W&B Alerts メッセージを確認します。

アラートの作成方法

アラートを設定するには、主に次の 2 つのステップがあります。

  1. W&B の ユーザー 設定 でアラートをオンにします
  2. run.alert() を code に追加します
  3. アラートが適切に設定されていることを確認します

1. W&B ユーザー 設定でアラートをオンにする

ユーザー 設定 で:

  • アラート セクションまでスクロールします
  • スクリプト可能な run アラート をオンにして、run.alert() からアラートを受信します
  • Slack に接続 を使用して、アラートを投稿する Slack channel を選択します。アラートを非公開にするため、Slackbot channel をお勧めします。
  • メール は、W&B にサインアップしたときに使用したメール アドレスに送信されます。これらのアラートがすべてフォルダーに移動し、受信トレイがいっぱいにならないように、メールでフィルターを設定することをお勧めします。

W&B Alerts を初めて設定する場合、またはアラートの受信方法を変更する場合は、これを行う必要があります。

W&B ユーザー設定のアラート設定

2. run.alert() を code に追加する

アラートをトリガーする場所に、run.alert() を code ( notebook または Python スクリプト のいずれか) に追加します

import wandb

run = wandb.init()
run.alert(title="High Loss", text="Loss is increasing rapidly")

3. Slack またはメールを確認する

Slack またはメールでアラート メッセージを確認します。何も受信しなかった場合は、ユーザー 設定スクリプト可能なアラート のメールまたは Slack がオンになっていることを確認してください。

このシンプルなアラートは、精度がしきい値を下回ると警告を送信します。この例では、少なくとも 5 分間隔でアラートを送信します。

import wandb
from wandb import AlertLevel

run = wandb.init()

if acc < threshold:
    run.alert(
        title="Low accuracy",
        text=f"Accuracy {acc} is below the acceptable threshold {threshold}",
        level=AlertLevel.WARN,
        wait_duration=300,
    )

ユーザーをタグ付けまたはメンションする方法

アラートのタイトルまたはテキストのいずれかで、@ 記号の後に Slack ユーザー ID を続けて入力して、自分自身または同僚をタグ付けします。Slack ユーザー ID は、Slack プロフィール ページから確認できます。

run.alert(title="Loss is NaN", text=f"Hey <@U1234ABCD> loss has gone to NaN")

Team アラート

Team 管理者は、Team 設定ページ wandb.ai/teams/your-team で Team のアラートを設定できます。

Team アラートは、Team の全員に適用されます。W&B は、アラートを非公開にするため、Slackbot channel を使用することをお勧めします。

アラートの送信先 Slack channel の変更

アラートの送信先 channel を変更するには、Slack の接続を解除 をクリックしてから、再接続します。再接続後、別の Slack channel を選択します。