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

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

runs とは何ですか?

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

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

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

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

W&B はあなたが作成した run を projects に保存します。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

# トレーニング 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 を選択すると、その run のワークスペースに直接アクセスできます。

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

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

run を初期化する

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

角括弧 (< >) で囲まれた値をあなた自身の値に置き換えるようにしてください:

import wandb

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

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

W&B の各 run には、run ID という一意の識別子が付与されます。一意の ID を指定することができます し、または W&B がランダムに生成してくれる ことも可能です。

各 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 states を参照してください。

Run states

次の表は、run がとりうる可能な状態を示しています:

状態 説明
Finished Run が終了し、完全にデータを同期した、または wandb.finish() を呼び出した
Failed Run が終了し、非ゼロの終了ステータス
Crashed Run は内部プロセスでハートビートを送信するのを停止しました(マシンがクラッシュした場合など)
Running Run がまだ実行中で、最近ハートビートを送信している

Unique run identifiers

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

Autogenerated run IDs

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 path フィールドに一意の run ID を表示します。run path はチーム名、プロジェクト名、run ID で構成されています。一意の ID は run path の最後の部分です。

たとえば、以下の画像では、一意の run ID は 9mxi1arc です:

Custom run IDs

id 引数をwandb.init メソッドに渡すことで、独自の run ID を指定することができます。

import wandb

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

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

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

ここで、角括弧 (< >) で囲まれた値は、エンティティ、プロジェクト、および run ID の実際の値のためのプレースホルダーです。

Name your run

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

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

run の名前を指定するには、name 引数をwandb.init メソッドに渡します。

import wandb

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

run にメモを追加

特定の run に追加したメモは、run ページの Overview タブやプロジェクトページの 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 に変わります。

State fields を参照し、run の可能な状態の完全なリストを確認してください。

ログ記録された runs を見る

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

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

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

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

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

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

    デフォルトでは、長い run 名は読みやすくするために途中で切り詰められます。run 名を最初または最後で切り詰めるには、run リストの上部のアクション ... メニューをクリックし、Run name cropping を最初、途中、または最後で切り取るように設定します。

特定の run の URL パスの形式は次のとおりです:

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

ここで、角括弧 (< >) で囲まれた値は、チーム名、プロジェクト名、および run ID の実際の値のためのプレースホルダーです。

Overview タブ

プロジェクト内で特定の run 情報を知るために Overview タブを使用してください。

  • Author: run を作成した W&B エンティティ。
  • Command: run を初期化したコマンド。
  • Description: 提供した run の説明。このフィールドは、run を作成する際に説明を指定しないと空になります。W&B App UI または Python SDK を使用して run に説明を追加できます。
  • Duration: run が実際に計算を行っている時間またはデータをログ記録している時間。ただし、任意の中断または待機時間は含まれません。
  • Git repository: run に関連付けられた git リポジトリ。このフィールドを見るためにはgit を有効にする必要があります。
  • Host name: W&B が run を計算する場所。ローカルマシンで run を初期化した場合、マシンの名前が表示されます。
  • Name: run の名前。
  • OS: run を初期化するオペレーティングシステム。
  • Python executable: run を開始するためのコマンド。
  • Python version: run を作成する Python バージョンを指定します。
  • Run path: entity/project/run-ID 形式で一意の run ID を識別します。
  • Runtime: run の開始から終了までの総時間を測定します。run の壁時計時間であり、run が中断したりリソースを待っている間の時間も含まれますが、duration は含みません。
  • Start time: run を初期化した時点のタイムスタンプ。
  • State: run の状態
  • System hardware: W&B が run を計算するために使用するハードウェア。
  • Tags: 文字列のリスト。タグは関連 run を一緒に整理したり、一時的なラベル(例:baselineproduction)を適用するのに便利です。
  • W&B CLI version: run コマンドをホストしたマシンにインストールされている W&B CLI バージョン。

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

  • Artifact Outputs: run が生成したアーティファクトの出力。
  • Config: wandb.configで保存された設定パラメータのリスト。
  • Summary: wandb.log()で保存されたサマリーパラメータのリスト。デフォルトでは、W&B はこの値を最後にログ記録した値に設定します。
W&B Dashboard run overview tab

こちらでプロジェクトの概要の例を確認できます here

Workspace タブ

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

こちらでワークスペースの例を確認できます here

Runs タブ

Runs タブを使用して、run をフィルタリング、グループ化、並べ替えます。

Runs タブで実行できる一般的なアクションを以下のタブで示しています。

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

  • 表示されているすべての列を表示するには、ページを横にスクロールします。
  • 列の順序を変更するには、列を左右にドラッグします。
  • 列を固定するには、列名の上にカーソルを合わせ、表示されたアクションメニュー ... をクリックしてから Pin column をクリックします。固定された列はページの左側に近い位置に表示されます。固定列を解除するには、Unpin column を選択します。
  • 列を非表示にするには、列名の上にカーソルを合わせ、表示されたアクションメニュー ... をクリックしてから Hide column をクリックします。現在非表示のすべての列を表示するには、Columns をクリックします。
  • 一度に複数の列を表示、非表示、固定、または固定解除するには、Columns をクリックします。
    • 非表示の列の名前をクリックして表示します。
    • 表示されている列の名前をクリックして非表示にします。
    • 表示された列の横にあるピンアイコンをクリックして固定します。

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

Table のある列の値で全行を並べ替えます。

  1. 列タイトルにマウスを合わせます。ケバブメニュー(3つの垂直な点)が現れます。
  2. ケバブメニュー(3つの垂直な点)を選択します。
  3. 並べ替え指定を選択して、降順または昇順で行を並べ替える。
See the digits for which the model most confidently guessed '0'.

上記の画像は、val_acc と呼ばれる Table 列の並べ替えオプションを表示する方法を示しています。

フィルターボタン上の式を使用したすべての行のフィルタリング、ダッシュボード上部のフィルターボタンを使用できます。

See only examples which the model gets wrong.

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

列名 二項関係
受け入れ値 ストリング =, ≠, ≤, ≥, IN, NOT IN, 整数、浮動小数点、ストリング、タイムスタンプ、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.

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

Logs タブ

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

右上の「ダウンロード」ボタンを選択してログファイルをダウンロードします。

ログタブの例はこちらから見ることができます here.

Files タブ

Files tab を使用して、特定の run に関連付けられたファイル(モデルチェックポイント、検証セット例など)を表示してください。

ファイルタブの例はこちらから見ることができます here.

Artifacts タブ

Artifacts タブには、指定した run の入力および出力 Artifacts が一覧表示されます。

Artifacts タブの例はこちらから見ることができます here.

Run を削除する

W&B App を使用してプロジェクトから 1 つ以上の run を削除します。

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

Run を整理する

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

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

W&B の各 run は グループジョブタイプ で分類できます:

  • グループ:実験の広範なカテゴリで、run を整理およびフィルタリングするために使用されます。
  • ジョブタイプ:run の機能で、preprocessingtrainingevaluation のようなものです。

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

  • 黄色から濃緑 は、ベースラインモデルのためのデータ量の増加を示しています。
  • 薄い青から紫、マゼンタ は、追加パラメーターを持つより複雑な「ダブル」モデルのためのデータ量を示しています。

W&B のフィルタリングオプションや検索バーを使用して、次のような特定の条件に基づいて run を比較します:

  • 同じデータセットに対するトレーニング。
  • 同じテストセットに対する評価。

フィルターを適用する際、Table ビューは自動的に更新されます。これにより、モデル間のパフォーマンスの違い(たとえば、どのクラスが他のモデルと比べてはるかに難しいか)を特定することができます。

1 - run をフィルタリングし検索する

プロジェクトページのサイドバーとテーブルの使い方

プロジェクトページを使用して、W&B にログされた 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 を見つけるには、regex を使用します。検索ボックスにクエリを入力すると、ワークスペースのグラフで表示される run がフィルタリングされ、テーブルの行もフィルタリングされます。

run をグループ化する

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

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

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

ログされたメトリクスの最小値または最大値で run テーブルを並べ替えます。これは、記録された最良または最悪の値を表示したい場合に特に便利です。

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

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

run の終了時間を検索する

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

run テーブルを CSV にエクスポートする

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

2 - run をフォークする

W&B run をフォークする

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

run をフォークすることで、元の run に影響を与えずに、実験の特定のポイントから異なるパラメータやモデルを探索することができます。

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

run をフォークするには、wandb.init()fork_from 引数を使用し、フォーク元としてのソース run IDstep を指定します:

import wandb

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

# 特定のステップから 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 タブの右上隅にある ... メニュー(三点ドット)をクリックします。ドロップダウンメニューから Copy Immutable Run ID オプションを選択します。

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

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

フォークされた run を初期化した後、新しい run にログを続行することができます。同じメトリクスをログすることで連続性を持たせ、新しいメトリクスを導入することも可能です。

例えば、次のコード例では、最初に run をフォークし、次にトレーニングステップ 200 からフォークされた 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()

# 特定のステップから最初の run をフォークし、ステップ 200 からメトリクスをログ
run2 = wandb.init(
    "your_project_name", entity="your_entity_name", fork_from=f"{run1.id}?_step=200"
)

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

3 - run を移動する

このページでは、run を別のプロジェクト間で、またはチーム内外、またはあるチームから別のチームへの移動方法を示します。現在の場所と新しい場所の両方で run へのアクセス権が必要です。

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

プロジェクト間で run を移動する

run をあるプロジェクトから別のプロジェクトに移動するには:

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

チームに run を移動する

あなたがメンバーであるチームに run を移動するには:

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

4 - 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 タブからアクセス可能です。
  • アーティファクトの関連付け: アーティファクトを生成するrunと関連付けます。
  • 不変のrun ID: 正確な状態からフォークするための一貫性が導入されます。
  • 不変のrun IDをコピー: run管理を改善するために不変のrun IDをコピーするボタンがあります。

runを巻き戻す

resume_fromwandb.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))  # subtleなスパイクパターンを適用
        run2.log({"metric": subtle_spike, "step": i})
    # さらに新しいメトリクスをすべてのステップでログ
    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

# 特定のステップから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()

5 - run を再開

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

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

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

W&Bがどのように対応するかを決定するために、次の引数の1つをresumeパラメータに渡します。各場合において、W&Bは最初に実行IDが既に存在するかを確認します。

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

resume="auto"を指定することで、W&Bが自動的にあなたの代わりに実行を再開しようとします。ただし、同じディレクトリーから実行を再開することを保証する必要があります。詳細は、実行を自動的に再開する設定を有効にするセクションを参照してください。

以下の例では、<>で囲まれた値をあなた自身のものに置き換えてください。

同じ実行IDを使用して実行を再開する

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

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

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

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

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

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

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

import wandb

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

実行を自動的に再開するように設定を有効にする

以下のコードスニペットは、Python SDKまたは環境変数を使用して実行を自動的に再開する方法を示します。

以下のコードスニペットは、Python SDKでW&B実行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実行IDと共にシェルスクリプトを実行できます。次のコードスニペットは実行ID akj172を渡します。

sh run_experiment.sh akj172 

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

中断可能なSweepsの実行を再開する

中断されたスイープ実行を自動的に再キューします。これは、スイープエージェントを停止の対象となる計算環境(SLURMジョブの中断可能なキュー、EC2スポットインスタンス、Google Cloud中断可能VMなど)で実行する場合に特に役立ちます。

mark_preempting関数を使用して、W&Bが中断されたスイープ実行を自動的に再キューできるようにします。以下のコードスニペットの例

run = wandb.init()  # 実行を初期化
run.mark_preempting()

以下の表は、スイープ実行の終了ステータスに基づいてW&Bが実行をどのように扱うかを概説しています。

ステータス 振る舞い
ステータスコード0 実行は成功裏に終了したと見なされ、再キューされません。
非ゼロステータス W&Bは自動的に実行をスイープに関連付けられたランキューに追加します。
ステータスなし 実行はスイープランキューに追加されます。スイープエージェントは、キューが空になるまでランキューから実行を消費します。キューが空になると、スイープキューはスイープ検索アルゴリズムに基づいて新しい実行の生成を再開します。

6 - run を実験にまとめる

トレーニングと評価 run をグループ化して大規模な Experiments を構成する

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

ユースケース

  1. 分散トレーニング: 実験が異なるトレーニングや評価スクリプトに分割されている場合、グループ化を使用してそれらを一つの大きな全体として見ることができます。
  2. 複数のプロセス: 複数の小さなプロセスを一つの実験としてグループ化します。
  3. K-分割交差検証: 異なるランダムシードを持つrunをグループ化して、大きな実験を見ます。こちらがスイープとグループ化を使用したK-分割交差検証の例です

グループ化を設定する方法は3つあります:

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

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

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

WANDB_RUN_GROUP を使用して、runのグループを環境変数として指定します。詳細はEnvironment Variablesをご覧ください。Groupはプロジェクト内で一意である必要があり、グループ内のすべての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をクリックすると、このような専用ページにアクセスできます。

UIでの動的なグループ化

任意の列でrunをグループ化できます。例として、ハイパーパラメーターでグループ化することができます。これがどのように見えるかの例です:

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

グループ化をオフにする

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

グループ化グラフの設定

グラフの右上にある編集ボタンをクリックし、Advancedタブを選択して線と陰影を変更します。各グループの線には平均、最小、最大値を選択できます。陰影については無効にしたり、最小と最大、標準偏差、標準誤差を表示することができます。

7 - runs にタグでラベルを追加する

特定の特徴を持つ runs にタグを追加して、ログされたメトリクスやアーティファクトデータからは見えない情報をラベル付けできます。

たとえば、ある run のモデルが in_production であること、run が preemptible であること、この run が baseline を表していることなどを示すためにタグを追加できます。

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

プログラムによって、または対話的に runs にタグを追加します。

あなたのユースケースに基づいて、以下のタブからニーズに最も合ったものを選択してください。

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 ロジック

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")  # ここで run データに基づいてタグを選択できます
run.update()

このメソッドは、同じタグまたは複数のタグを大量の runs にタグ付けするのに最も適しています。

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

このメソッドは、1つの run に手動でタグを適用するのに最も適しています。

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

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

W&B App の UI を使って、runs からタグを削除することもできます。

このメソッドは、大量の runs からタグを削除するのに最も適しています。

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

8 - アラートを送信する

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

run がクラッシュしたり、カスタムトリガーで Slack やメールでアラートを作成します。例えば、トレーニングループの勾配が膨らみ始めた場合(NaNを報告)や、ML パイプライン内のステップが完了した場合などです。アラートは、個人およびチームプロジェクトの両方を含む、run を初期化するすべての Projects に適用されます。

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

アラートの作成方法

アラートを設定するための主なステップは2つあります。

  1. W&B の User Settings で Alerts をオンにする
  2. コードに run.alert() を追加する
  3. アラートが正しく設定されているか確認する

1. W&B User Settings でアラートをオンにする

User Settings の中で:

  • Alerts セクションまでスクロールします
  • Scriptable run alerts をオンにして run.alert() からのアラートを受け取ります
  • Connect Slack を使用して、アラートを投稿する Slack チャンネルを選択します。アラートを非公開に保持するため、Slackbot チャンネルをお勧めします。
  • Email は W&B にサインアップしたときに使用したメールアドレスに送られます。これらのアラートがフォルダに入り、受信トレイを埋めないようにメールにフィルターを設定することをお勧めします。

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

Alerts settings in W&B User Settings

2. コードに run.alert() を追加する

ノートブックや Python スクリプトのどこでトリガーしたいかに run.alert() をコードに追加します。

import wandb

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

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

アラートメッセージのために Slack またはメールをチェックします。受信していない場合は、User SettingsScriptable Alerts 用のメールまたは 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")

チームアラート

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

チームアラートは、チームの全員に適用されます。W&B は、アラートを非公開に保持するために Slackbot チャンネルを使用することをお勧めします。

アラート送信先の Slack チャンネルを変更する

アラートの送信先を変更するには、Disconnect Slack をクリックして、再接続してください。再接続後、別の Slack チャンネルを選択します。