実験管理
W&B で機械学習実験を追跡する。
数行のコードで機械学習実験を追跡します。その後、インタラクティブなダッシュボード で結果をレビューしたり、Public API を使用してプログラムからアクセスできるようにPythonにデータをエクスポートすることができます。
人気のあるフレームワークを使用している場合は、W&Bのインテグレーションを活用してください。PyTorch 、Keras 、またはScikit のようなフレームワークがあります。インテグレーションの完全なリストや、W&Bをコードに追加する方法については、インテグレーションガイド をご覧ください。
上の画像は、複数のRuns でメトリクスを確認および比較できるダッシュボードの例を示しています。
仕組み
数行のコードで機械学習実験を追跡します:
W&B Run を作成します。
学習率やモデルタイプなどのハイパーパラメーターを辞書として設定(run.config
)に保存します。
トレーニングループ中に正確性や損失などのメトリクスをログ(run.log()
)します。
モデルの重みや予測のテーブルのようなRunの出力を保存します。
以下のコードは、一般的なW&B実験管理ワークフローを示しています:
# Run を開始します。
#
# このブロックから出ると、ログデータのアップロードが完了するのを待ちます。
# 例外が発生した場合、Run は失敗としてマークされます。
with wandb. init(entity= "" , project= "my-project-name" ) as run:
# モード入力とハイパーパラメーターを保存します。
run. config. learning_rate = 0.01
# 実験コードを実行します。
for epoch in range(num_epochs):
# トレーニングをします...
# モデルのパフォーマンスを可視化するためのメトリクスを時間と共にログします。
run. log({"loss" : loss})
# モデルの出力をアーティファクトとしてアップロードします。
run. log_artifact(model)
始めましょう
あなたのユースケースに応じて、W&B Experimentsの開始に役立つ次のリソースを探索してください:
ベストプラクティスとヒント
実験とログのベストプラクティスとヒントについては、ベストプラクティス: 実験とログ をご覧ください。
1 - 実験を作成する
W&B 実験を作成します。
W&B Python SDKを使用して、機械学習実験をトラックします。その後、インタラクティブなダッシュボードで結果を確認するか、データをPythonにエクスポートしてプログラムでアクセスできます(W&B Public API を参照)。
このガイドでは、W&Bのビルディングブロックを使用してW&B Experimentを作成する方法を説明します。
W&B Experimentの作成方法
W&B Experimentを次の4つのステップで作成します:
W&B Runを初期化
ハイパーパラメータの辞書をキャプチャ
トレーニングループ内でメトリクスをログ
アーティファクトをW&Bにログ
W&B Runを初期化
wandb.init()
を使用してW&B Runを作成します。
以下のスニペットは、“cat-classification”
という名前のW&Bプロジェクトで、“My first experiment”
という説明を持つrunを作成し、これを識別するのに役立てます。タグ“baseline”
と“paper1”
は、このrunが将来的な論文の出版を意図したベースライン実験であることを思い出すために含まれています。
import wandb
with wandb. init(
project= "cat-classification" ,
notes= "My first experiment" ,
tags= ["baseline" , "paper1" ],
) as run:
...
wandb.init()
は、Run オブジェクトを返します。
注意: wandb.init()
を呼び出したときにプロジェクトが既に存在している場合、Runは既存のプロジェクトに追加されます。例えば、既に“cat-classification”
という名前のプロジェクトがある場合、そのプロジェクトは既存のままで削除されず、新しいrunがそのプロジェクトに追加されます。
ハイパーパラメータの辞書をキャプチャ
学習率やモデルタイプといったハイパーパラメータの辞書を保存します。設定でキャプチャしたモデル設定は、後で結果の整理やクエリに役立ちます。
with wandb. init(
... ,
config= {"epochs" : 100 , "learning_rate" : 0.001 , "batch_size" : 128 },
) as run:
...
実験を設定する方法の詳細については、Configure Experiments を参照してください。
トレーニングループ内でメトリクスをログ
run.log()
を呼び出して、精度や損失といった各トレーニングステップに関するメトリクスをログします。
model, dataloader = get_model(), get_data()
for epoch in range(run. config. epochs):
for batch in dataloader:
loss, accuracy = model. training_step()
run. log({"accuracy" : accuracy, "loss" : loss})
W&Bでログできるさまざまなデータタイプの詳細については、Log Data During Experiments を参照してください。
アーティファクトをW&Bにログ
オプションでW&Bアーティファクトをログします。アーティファクトは、データセットやモデルのバージョン管理を容易にします。
# 任意のファイルまたはディレクトリを保存できます。この例では、モデルがONNXファイルを出力するsave()メソッドを持つと仮定しています。
model. save("path_to_model.onnx" )
run. log_artifact("path_to_model.onnx" , name= "trained-model" , type= "model" )
Artifacts やRegistry でのモデルのバージョン管理について詳しく学んでください。
すべてをまとめる
前述のコードスニペットを使った完全なスクリプトは以下の通りです:
import wandb
with wandb. init(
project= "cat-classification" ,
notes= "" ,
tags= ["baseline" , "paper1" ],
# runのハイパーパラメータを記録
config= {"epochs" : 100 , "learning_rate" : 0.001 , "batch_size" : 128 },
) as run:
# モデルとデータをセットアップ
model, dataloader = get_model(), get_data()
# モデルのパフォーマンスを可視化するためにメトリクスをログしながらトレーニングを実行
for epoch in range(run. config["epochs" ]):
for batch in dataloader:
loss, accuracy = model. training_step()
run. log({"accuracy" : accuracy, "loss" : loss})
# 訓練済みモデルをアーティファクトとしてアップロード
model. save("path_to_model.onnx" )
run. log_artifact("path_to_model.onnx" , name= "trained-model" , type= "model" )
次のステップ:実験を可視化
W&Bダッシュボードを使用して、機械学習モデルの結果を整理し可視化する中央の場所として利用します。parallel coordinates plots 、parameter importance analyzes 、およびその他の ようなリッチでインタラクティブなグラフを数クリックで構築します。
実験や特定runの表示方法についての詳細は、Visualize results from experiments を参照してください。
ベストプラクティス
以下は、実験を作成する際に考慮すべきいくつかのガイドラインです:
Runを終了させる : wandb.init()
をwith
文で使用して、コードが完了したときや例外が発生したときにrunを自動的に終了させます。
Config : ハイパーパラメータ、アーキテクチャー、データセット、およびモデルの再現に使用したい他のすべてのものをトラックします。これらは列に表示され、アプリ内で動的にrunをグループ化、並べ替え、およびフィルタリングするためにconfig列を使用します。
プロジェクト : プロジェクトは比較可能な一連の実験です。各プロジェクトは専用のダッシュボードページを持ち、異なるモデルバージョンを比較するrunの異なるグループを簡単にオンオフできます。
ノート : スクリプトから直接クイックコミットメッセージを設定します。ノートを編集し、W&Bアプリのrunのオーバービューセクションでアクセスします。
タグ : ベースラインrunとお気に入りのrunを識別します。タグを使用してrunをフィルタリングできます。タグは後で、プロジェクトのダッシュボードのオーバービューセクションで編集できます。
実験を比較するために複数のrunセットを作成 : 実験を比較するときは、メトリクスを比較しやすくするために複数のrunセットを作成します。runセットを同じグラフまたは一連のグラフでオンオフできます。
以下のコードスニペットは、上記のベストプラクティスを使用してW&B Experimentを定義する方法を示しています:
import wandb
config = {
"learning_rate" : 0.01 ,
"momentum" : 0.2 ,
"architecture" : "CNN" ,
"dataset_id" : "cats-0192" ,
}
with wandb. init(
project= "detect-cats" ,
notes= "tweak baseline" ,
tags= ["baseline" , "paper1" ],
config= config,
) as run:
...
W&B Experimentを定義する際に利用可能なパラメータの詳細については、wandb.init
APIドキュメントをAPIリファレンスガイド で参照してください。
2 - 実験を設定する
実験の設定を保存するために辞書のようなオブジェクトを使用します。
run
の config
プロパティを使用して、トレーニング設定を保存します:
ハイパーパラメーター
データセット名やモデルタイプなどの入力設定
実験のためのその他の独立変数
run.config
プロパティを使用すると、実験を簡単に分析し、将来的に作業を再現できます。 W&B アプリで設定値ごとにグループ化し、さまざまな W&B Run の設定を比較し、各トレーニング設定が出力にどのように影響するかを評価できます。config
プロパティは、複数の辞書のようなオブジェクトから構成できる辞書のようなオブジェクトです。
出力メトリクスや損失や精度のような従属変数を保存するには、run.config
ではなく run.log
を使用してください。
実験の設定を行う
設定は通常、トレーニングスクリプトの最初に定義されます。ただし、機械学習ワークフローは異なる場合があるため、トレーニングスクリプトの最初に設定を定義する必要はありません。
設定変数名にはピリオド (.
) の代わりにダッシュ (-
) またはアンダースコア (_
) を使用してください。
スクリプトが run.config
キーをルート以下でアクセスする場合は、属性アクセス構文 config.key.value
の代わりに、辞書アクセス構文 ["key"]["value"]
を使用してください。
以下のセクションでは、実験の設定を定義する一般的なシナリオをいくつか示します。
初期化時に設定を行う
wandb.init()
API を呼び出して、バックグラウンドプロセスを生成し、W&B Run としてデータを同期してログに記録する際に、スクリプトの最初に辞書を渡します。
次に示すコードスニペットは、設定値を持つ Python の辞書を定義し、その辞書を引数として W&B Run を初期化する方法を示しています。
import wandb
# 設定辞書オブジェクトを定義する
config = {
"hidden_layer_sizes" : [32 , 64 ],
"kernel_sizes" : [3 ],
"activation" : "ReLU" ,
"pool_sizes" : [2 ],
"dropout" : 0.5 ,
"num_classes" : 10 ,
}
# W&B を初期化する際に設定辞書を渡す
with wandb. init(project= "config_example" , config= config) as run:
...
ネストされた辞書を config
として渡す場合、W&B はドットを使用して名前をフラットにします。
Python の他の辞書にアクセスする方法と同様に、辞書から値にアクセスすることができます:
# インデックス値としてキーを使用して値にアクセスする
hidden_layer_sizes = run. config["hidden_layer_sizes" ]
kernel_sizes = run. config["kernel_sizes" ]
activation = run. config["activation" ]
# Python の辞書 get() メソッド
hidden_layer_sizes = run. config. get("hidden_layer_sizes" )
kernel_sizes = run. config. get("kernel_sizes" )
activation = run. config. get("activation" )
開発者ガイドと例全体で、設定値を別の変数にコピーします。このステップは任意です。読みやすさのために行われます。
argparse を使用して設定を行う
argparse オブジェクトで設定を行うことができます。argparse は、引数パーサの短縮形で、Python 3.2 以降の標準ライブラリモジュールであり、コマンドライン引数の柔軟性と強力さを活かしたスクリプトの記述を容易にします。
コマンドラインから起動されるスクリプトからの結果を追跡するのに便利です。
次の Python スクリプトは、実験設定を定義および設定するためのパーサーオブジェクトを定義する方法を示しています。train_one_epoch
および evaluate_one_epoch
関数は、このデモの目的でトレーニングループをシミュレートするために提供されています:
# config_experiment.py
import argparse
import random
import numpy as np
import wandb
# トレーニングと評価デモのコード
def train_one_epoch (epoch, lr, bs):
acc = 0.25 + ((epoch / 30 ) + (random. random() / 10 ))
loss = 0.2 + (1 - ((epoch - 1 ) / 10 + random. random() / 5 ))
return acc, loss
def evaluate_one_epoch (epoch):
acc = 0.1 + ((epoch / 20 ) + (random. random() / 10 ))
loss = 0.25 + (1 - ((epoch - 1 ) / 10 + random. random() / 6 ))
return acc, loss
def main (args):
# W&B Run を開始する
with wandb. init(project= "config_example" , config= args) as run:
# 設定辞書から値をアクセスして、
# 可読性のために変数に格納する
lr = run. config["learning_rate" ]
bs = run. config["batch_size" ]
epochs = run. config["epochs" ]
# トレーニングをシミュレートし、値を W&B にログする
for epoch in np. arange(1 , epochs):
train_acc, train_loss = train_one_epoch(epoch, lr, bs)
val_acc, val_loss = evaluate_one_epoch(epoch)
run. log(
{
"epoch" : epoch,
"train_acc" : train_acc,
"train_loss" : train_loss,
"val_acc" : val_acc,
"val_loss" : val_loss,
}
)
if __name__ == "__main__" :
parser = argparse. ArgumentParser(
formatter_class= argparse. ArgumentDefaultsHelpFormatter
)
parser. add_argument("-b" , "--batch_size" , type= int, default= 32 , help= "バッチサイズ" )
parser. add_argument(
"-e" , "--epochs" , type= int, default= 50 , help= "トレーニングエポックの数"
)
parser. add_argument(
"-lr" , "--learning_rate" , type= int, default= 0.001 , help= "学習率"
)
args = parser. parse_args()
main(args)
スクリプト全体で設定を行う
スクリプト全体で、設定オブジェクトにさらにパラメータを追加できます。次に示すコードスニペットでは、設定オブジェクトに新しいキーと値のペアを追加する方法を示しています:
import wandb
# 設定辞書オブジェクトを定義する
config = {
"hidden_layer_sizes" : [32 , 64 ],
"kernel_sizes" : [3 ],
"activation" : "ReLU" ,
"pool_sizes" : [2 ],
"dropout" : 0.5 ,
"num_classes" : 10 ,
}
# W&B を初期化する際に設定辞書を渡す
with wandb. init(project= "config_example" , config= config) as run:
# W&B を初期化した後に設定を更新する
run. config["dropout" ] = 0.2
run. config. epochs = 4
run. config["batch_size" ] = 32
複数の値を一度に更新できます:
run. config. update({"lr" : 0.1 , "channels" : 16 })
Run終了後に設定を行う
W&B Public API を使用して、完了済みの run の設定を更新できます。
API に対して、エンティティ、プロジェクト名、および run の ID を提供する必要があります。これらの詳細は Run オブジェクトや W&B App UI で確認できます:
with wandb. init() as run:
...
# Run オブジェクトから以下の値を見つけます。
# これが現在のスクリプトまたはノートブックから初期化された場合、または W&B アプリUIからそれらをコピーできます。
username = run. entity
project = run. project
run_id = run. id
# api.run() は wandb.init() と異なるタイプのオブジェクトを返すことに注意してください。
api = wandb. Api()
api_run = api. run(f " { username} / { project} / { run_id} " )
api_run. config["bar" ] = 32
api_run. update()
absl.FLAGS
absl
flags を渡すこともできます。
flags. DEFINE_string("model" , None , "model to run" ) # name, default, help
run. config. update(flags. FLAGS) # absl flags を設定に追加します
ファイルベースの設定
config-defaults.yaml
という名前のファイルを run スクリプトと同じディレクトリーに配置すると、run はファイルに定義されたキーと値のペアを自動的に取得し、それを run.config
に渡します。
以下のコードスニペットは、サンプルの config-defaults.yaml
YAML ファイルを示しています:
batch_size :
desc : サイズごとのミニバッチ
value : 32
config-defaults.yaml
から自動的に読み込まれたデフォルト値を、新しい値を wandb.init
の config
引数で設定して上書きできます。たとえば:
import wandb
# 独自の値を渡して config-defaults.yaml を上書きします
with wandb. init(config= {"epochs" : 200 , "batch_size" : 64 }) as run:
...
config-defaults.yaml
以外の設定ファイルを読み込むには、--configs command-line
引数を使用してファイルのパスを指定します:
python train.py --configs other-config.yaml
ファイルベースの設定のユースケースの例
Run のメタデータを含む YAML ファイルがあり、Python スクリプトでハイパーパラメーターの辞書を持っているとします。それらの両方をネストされた config
オブジェクトに保存できます:
hyperparameter_defaults = dict(
dropout= 0.5 ,
batch_size= 100 ,
learning_rate= 0.001 ,
)
config_dictionary = dict(
yaml= my_yaml_file,
params= hyperparameter_defaults,
)
with wandb. init(config= config_dictionary) as run:
...
TensorFlow v1 フラグ
TensorFlow のフラグを wandb.config
オブジェクトに直接渡すことができます。
with wandb. init() as run:
run. config. epochs = 4
flags = tf. app. flags
flags. DEFINE_string("data_dir" , "/tmp/data" )
flags. DEFINE_integer("batch_size" , 128 , "バッチサイズ" )
run. config. update(flags. FLAGS) # TensorFlow のフラグを設定に追加します
3 - プロジェクト
モデルのバージョンを比較し、スクラッチワークスペースで結果を探索し、ノートや可視化を保存するために学びをレポートにエクスポートする
A プロジェクト は、結果の可視化、実験の比較、アーティファクトの閲覧とダウンロード、オートメーションの作成などを行うための中央の場所です。
各プロジェクトには、その公開範囲を決定する公開設定があります。公開範囲についての詳細は、
プロジェクトの公開範囲 を参照してください。
各プロジェクトには、サイドバーからアクセスできる次の項目が含まれています:
Overview : プロジェクトのスナップショット
Workspace : 個人の可視化サンドボックス
Runs : プロジェクト内のすべての run を一覧表示するテーブル
Automations : プロジェクトで設定されたオートメーション
Sweeps : 自動探索と最適化
Reports : メモ、run、およびグラフの保存されたスナップショット
Artifacts : すべての run およびその run に関連するアーティファクトを含む
Overview タブ
Project name : プロジェクトの名前。W&B は、指定したプロジェクトフィールド名で run を初期化するときにプロジェクトを作成します。右上隅の Edit ボタンを選択することで、いつでもプロジェクト名を変更できます。
Description : プロジェクトの説明。
Project visibility : プロジェクトの公開範囲。それにアクセスできる人を決定する公開設定です。詳細はプロジェクトの公開範囲 を参照してください。
Last active : このプロジェクトにデータが最後にログ記録された日時のタイムスタンプ
Owner : このプロジェクトを所有するエンティティ
Contributors : このプロジェクトに貢献するユーザーの数
Total runs : このプロジェクトの総 run 数
Total compute : プロジェクト内のすべての run 時間を合計して得られるトータル
Undelete runs : ドロップダウンメニューをクリックし、「Undelete all runs」をクリックしてプロジェクト内の削除された run を復元します。
Delete project : 右上隅のドットメニューをクリックしてプロジェクトを削除
ライブ例を見る
Workspace タブ
プロジェクトのワークスペース は、実験を比較するための個人的なサンドボックスを提供します。プロジェクトを使用して、比較できるモデルを整理し、異なるアーキテクチャー、ハイパーパラメーター、データセット、プロセッシングなどで同じ問題に取り組みます。
Runs Sidebar : プロジェクト内のすべての run のリスト。
Dot menu : サイドバーの行にカーソルを合わせると、左側にメニューが表示されます。このメニューを使用して、run の名前を変更、run の削除、または active run の停止を行います。
Visibility icon : グラフで run をオンまたはオフにするために目のアイコンをクリックします。
Color : run の色を私たちのプリセットの1つまたはカスタムカラーに変更します。
Search : 名前で run を検索します。これにより、プロットで表示される run もフィルタリングされます。
Filter : サイドバーフィルターを使用して、表示される run のセットを絞り込みます。
Group : 設定した列を選択して run を動的にグループ化します。例えば、アーキテクチャーでグループ化することができます。グループ化すると、プロットに平均値に沿った線が表示され、グラフ上のポイントの分散の地域を示す影が表示されます。
Sort : 最小の損失や最大の精度を持つ run など、value で run をソートします。ソートは、どの run がグラフに表示されるかに影響します。
Expand button : サイドバーを完全なテーブルに拡張します。
Run count : 上部のかっこ内の数字は、プロジェクト内のすべての run 数です。数字 (N visualized) は、目のアイコンがオンになっていて、各プロットで可視化可能な run 数です。以下の例では、グラフは183 runのうち最初の10 runのみを表示しています。表示される run の最大数を増やすには、グラフを編集します。
Runs タブ で列をピン止め、非表示、または順序を変更すると、Runs サイドバーにもこれらのカスタマイズが反映されます。
Panels layout : このスクラッチスペースを使用して、結果を探索し、チャートを追加および削除し、異なるメトリクスに基づいてモデルのバージョンを比較します。
ライブ例を見る
Add a section of panels
セクションのドロップダウンメニューをクリックし、「Add section」をクリックして、セクションを作成します。セクションの名前を変更したり、ドラッグして順序を再編成したり、セクションを展開または折りたたむことができます。
各セクションには右上隅にオプションがあります:
Switch to custom layout : カスタムレイアウトでは、個々のパネルのサイズを変更できます。
Switch to standard layout : 標準レイアウトでは、セクション内のすべてのパネルのサイズを一括で変更でき、ページネーションが利用できます。
Add section : ドロップダウンメニューから上または下にセクションを追加するか、ページの下部のボタンをクリックして新しいセクションを追加します。
Rename section : セクションのタイトルを変更します。
Export section to report : このパネルのセクションを新しいレポートに保存します。
Delete section : セクション全体とすべてのチャートを削除します。これは、ワークスペースバーのページ下部にあるアンドゥボタンで取り消すことができます。
Add panel : プラスボタンをクリックしてセクションにパネルを追加します。
Move panels between sections
ドラッグアンドドロップしてセクションに整理します。また、パネルの右上隅にある「Move」ボタンをクリックしてセクションを選択し、パネルを移動します。
Resize panels
Standard layout : すべてのパネルは同じサイズに保たれ、ページがあります。セクションの右下隅をクリックアンドドラッグして、セクションのサイズを変更します。
Custom layout : 各パネルは個別にサイズが設定されており、ページはありません。
Search for metrics
ワークスペースの検索ボックスを使用してパネルを絞り込みます。この検索はパネルのタイトルに一致し、デフォルトでは表示されているメトリクスの名前となります。
Runs タブ
Runs タブを使用して、run をフィルタリング、グループ化、およびソートします。
次のタブには、Runs タブで実行できる一般的な操作がいくつか示されています。
Customize columns
Sort
Filter
Group
Runs タブは、プロジェクト内の run の詳細を表示します。デフォルトで多数の列が表示されます。
すべての列を表示するには、ページを水平にスクロールします。
列の順序を変更するには、列を左右にドラッグします。
列をピン止めするには、列名にカーソルを合わせて、表示されるアクションメニュー ...
をクリックし、次に Pin column をクリックします。ピン止めされた列は、ページの左側に、Name 列の後に表示されます。ピン止めされた列を取り除くには、Unpin column を選択します。
列を非表示にするには、列名にカーソルを合わせて、表示されるアクションメニュー ...
をクリックし、次に Hide column をクリックします。現在非表示のすべての列を表示するには、Columns をクリックします。
複数の列を一度に表示、非表示、ピン止め、およびピン解除するには、Columns をクリックします。
非表示の列の名前をクリックして表示します。
表示列の名前をクリックして非表示にします。
表示列の横のピンアイコンをクリックしてピン止めします。
Runs タブをカスタマイズすると、そのカスタマイズはWorkspace タブ の Runs セレクタにも反映されます。
指定した列の値でテーブル内のすべての行をソートします。
列タイトルにマウスをホバーします。ケバブメニューが表示されます(三つの垂直ドット)。
ケバブメニュー(三つの垂直ドット)を選択します。
Sort Asc または Sort Desc を選択して、行を昇順または降順にソートします。
上の画像は、val_acc
というテーブル列のソートオプションを表示する方法を示しています。
ダッシュボードの左上の Filter ボタンを使って、式に基づいてすべての行をフィルタリングします。
Add filter を選択して、行に1つ以上のフィルターを追加します。3つのドロップダウンメニューが表示され、左から右にかけて、フィルターのタイプは次のようになります: 列名、演算子、および値
列名
バイナリ関係
値
許可される値
String
=, ≠, ≤, ≥, IN, NOT IN,
整数, 浮動小数点数, 文字列, タイムスタンプ, null
式エディタは、オートコンプリートを使用して、列名と論理述語構造などの用語ごとのオプションのリストを表示します。複数の論理述部を使用して「ands」または「or」で式を組み合わせることができます(場合によっては括弧を使用します)。
上の画像は、`val_loss` 列に基づいたフィルターを示しています。このフィルターは、1以下の検証損失を持つ run を表示します。
特定の列の値で Group by ボタンを使い、すべての行をグループ化します。
デフォルトでは、これにより他の数値列がヒストグラムに変わり、グループ全体のその列の値の分布を示します。グループ化は、データ内の高レベルのパターンを理解するのに便利です。
Reports タブ
結果のスナップショットを一か所で確認し、チームと学びを共有します。
Sweeps タブ
スイープ をプロジェクトから新たに開始します。
Artifacts タブ
プロジェクトに関連付けられたすべてのArtifacts をトレーニングデータセットや ファインチューンされたモデル からメトリクスやメディアのテーブル まで表示します。
Overview パネル
概要パネルでは、アーティファクトの名前やバージョン、変更を検出し重複を防止するために使用されるハッシュダイジェスト、作成日、およびエイリアスなど、アーティファクトに関するさまざまな高レベル情報を見つけることができます。ここでエイリアスを追加または削除し、バージョンおよびアーティファクト全体に対してメモを取ることができます。
メタデータパネルは、アーティファクトが構築されたときに提供されるメタデータへのアクセスを提供します。このメタデータには、アーティファクトを再構築するために必要な設定引数、詳細情報を見つけるためのURL、またはアーティファクトをログする際に生成されたメトリクスが含まれている場合があります。さらに、アーティファクトを生成する run の設定や、アーティファクトをログする際の履歴メトリクスを見ることができます。
Usage パネル
Usage パネルは、ウェブアプリの外部で、例えばローカルマシン上で使用するためにアーティファクトをダウンロードするためのコードスニペットを提供します。このセクションはまた、アーティファクトを出力した run 及びアーティファクトを入力として使用する run へのリンクも示しています。
Files パネル
ファイルパネルは、アーティファクトに関連付けられたファイルとフォルダを一覧表示します。W&B は特定のファイルを run 用に自動的にアップロードします。例えば、requirements.txt
は run が使用した各ライブラリのバージョンを示し、wandb-metadata.json
および wandb-summary.json
は run に関する情報を含みます。他のファイルもアーティファクトやメディアなど、run の設定に応じてアップロードされる場合があります。このファイルツリーをナビゲートし、W&B ウェブアプリで直接内容を確認することができます。
Artifacts に関連付けられたテーブル は、このコンテキストでは特にリッチでインタラクティブです。Artifacts で Tables を使用する方法についての詳細はこちら から学べます。
Lineage パネル
リネージパネルは、プロジェクトに関連付けられたすべてのアーティファクトとそれらをお互いに接続する run を表示します。run タイプはブロックとして、アーティファクトは円として表示され、与えられたタイプの run が与えられたタイプのアーティファクトを消費または生成するときに矢印で示されます。左側の列で選択された特定のアーティファクトのタイプが強調表示されます。
個々のアーティファクトバージョンとそれらを接続する特定の run を表示するには、爆発切り替えをクリックしてください。
Action History Audit タブ
アクションヒストリー監査タブは、コレクションのすべてのエイリアスアクションとメンバーシップの変更を示しており、リソースの進化全体を監査できます。
Versions タブ
バージョン タブは、アーティファクトのすべてのバージョンと、バージョンがログ記録された時点での Run History の各数値のカラムを示しています。これにより、パフォーマンスを比較し、興味のあるバージョンを迅速に特定することができます。
プロジェクトにスターを付ける
プロジェクトにスターを付けると、そのプロジェクトを重要としてマークします。あなたとあなたのチームがスター付きで重要としてマークしたプロジェクトは、組織のホームページの上部に表示されます。
たとえば、次の画像では、zoo_experiment
と registry_demo
の 2 つのプロジェクトが重要としてマークされています。これらのプロジェクトは、組織のホームページの上部の スター付きプロジェクト セクション内に表示されています。
プロジェクトを重要としてマークする方法は2つあります: プロジェクトのオーバービュータブ内またはチームのプロファイルページ内です。
Project overview
Team profile
W&B App の https://wandb.ai/<team>/<project-name>
で W&B プロジェクトに移動します。
プロジェクトサイドバーから Overview タブを選択します。
右上隅の Edit ボタンの横にある星アイコンを選択します。
チームのプロファイルページにある https://wandb.ai/<team>/projects
に移動します。
Projects タブを選択します。
スターを付けたいプロジェクトの横にマウスをホバーし、表示された星アイコンをクリックします。
たとえば、次の画像は “Compare_Zoo_Models” プロジェクトの横にある星アイコンを示しています。
組織名を左上隅のアプリ内でクリックし、プロジェクトが組織のランディングページに表示されることを確認します。
プロジェクトを削除する
プロジェクトを削除するには、オーバービュータブの右の三点リーダーをクリックします。
プロジェクトが空の場合は、右上のドロップダウンメニューをクリックして Delete project を選択し、削除できます。
プロジェクトにメモを追加する
プロジェクトにメモを追加するには、説明オーバービューまたはワークスペース内のマークダウンパネルとして行います。
プロジェクトに説明オーバービューを追加
ページに追加した説明は、プロファイルの Overview タブに表示されます。
W&B プロジェクトに移動
プロジェクトサイドバーから Overview タブを選択
右上隅の Edit を選択
Description フィールドにメモを追加
Save ボタンを選択
Create reports to create descriptive notes comparing runs W&B レポートを作成して、プロットやマークダウンを並べて追加することもできます。異なる run を示すために異なるセクションを使用し、取り組んだことについてのストーリーを語ります。
ワークスペースに run のメモを追加
W&B プロジェクトに移動
プロジェクトサイドバーから Workspace タブを選択
右上のコーナーから Add panels ボタンを選択
表示されるモーダルから TEXT AND CODE ドロップダウンを選択
Markdown を選択
ワークスペース内に表示されるマークダウンパネルにメモを追加します。
4 - 実験管理の結果を見る
ランデータを対話的な可視化で探求するためのプレイグラウンド
W&B ワークスペースは、チャートをカスタマイズしモデル結果を探索するための個人のサンドボックスです。W&B ワークスペースは テーブル と パネルセクション で構成されています:
Tables : プロジェクトに記録されたすべてのRunがプロジェクトのテーブルに一覧表示されます。Runをオンオフしたり、色を変更したり、テーブルを拡張して各Runのノート、設定、およびサマリーメトリクスを表示することができます。
Panel sections : 1つ以上の パネル を含むセクションです。新しいパネルを作成し、整理し、ワークスペースのスナップショットを保存するためにReportsにエクスポートすることができます。
Workspaceの種類
主に2つのWorkspaceカテゴリがあります: 個人用ワークスペース と 保存されたビュー です。
個人用ワークスペース: モデルとデータの可視化の詳細な分析のためのカスタマイズ可能なワークスペースです。ワークスペースの所有者のみが編集し、変更を保存できます。チームメイトは個人用ワークスペースを閲覧できますが、他の人の個人用ワークスペースには変更を加えることはできません。
保存されたビュー: 保存されたビューは、ワークスペースの協力的なスナップショットです。チームの誰もが保存されたワークスペースビューを閲覧、編集、保存することができます。保存されたワークスペースビューを使用して、実験、Runなどをレビューおよび議論します。
次の画像は、Cécile-parkerのチームメイトによって作成された複数の個人用ワークスペースを示しています。このプロジェクトには保存されたビューがありません:
保存されたワークスペースビュー
チームのコラボレーションを向上させるために、カスタマイズされたワークスペースビューを作成します。保存されたビューを作成して、チャートとデータの好みのセットアップを整理します。
新しい保存されたワークスペースビューを作成する
個人用ワークスペースまたは保存されたビューに移動します。
ワークスペースを編集します。
ワークスペースの右上隅にある三つポチメニュー(三本の横線)をクリックし、新しいビューとして保存 をクリックします。
新しい保存されたビューはワークスペースナビゲーションメニューに表示されます。
保存されたワークスペースビューを更新する
保存された変更は、保存されたビューの以前の状態を上書きします。保存されていない変更は保持されません。W&Bで保存されたワークスペースビューを更新するには:
保存されたビューに移動します。
ワークスペース内のチャートとデータに必要な変更を加えます。
保存 ボタンをクリックして変更を確認します。
ワークスペースビューの更新を保存すると、確認ダイアログが表示されます。次回このプロンプトを表示しないようにするには、保存を確認する前に 今後このモーダルを表示しない オプションを選択します。
保存されたワークスペースビューを削除する
不要になった保存されたビューを削除します。
削除したい保存済みビューに移動します。
ビューの右上隅にある三本の横線(… )を選択します。
ビューを削除 を選択します。
削除を確認してワークスペースメニューからビューを削除します。
ワークスペースビューを共有する
ワークスペースのURLを直接共有することで、カスタマイズしたワークスペースをチームと共有します。ワークスペースプロジェクトにアクセスできるすべてのユーザーが、そのワークスペースの保存されたビューを見ることができます。
ワークスペースをプログラムで作成する
wandb-workspaces
は、W&B のワークスペースとレポートをプログラムで操作するためのPythonライブラリです。
wandb-workspaces
を使用してワークスペースをプログラムで定義します。wandb-workspaces
は、W&B のワークスペースとレポートをプログラムで操作するためのPythonライブラリです。
ワークスペースのプロパティを定義できます、例:
パネルのレイアウト、色、およびセクションの順序を設定します。
ワークスペース設定としてデフォルトのX軸、セクションの順序、および折りたたみ状態を設定します。
セクション内にパネルを追加してカスタマイズし、ワークスペースビューを整理します。
URLを使用して既存のワークスペースを読み込み、変更します。
既存のワークスペースに変更を保存するか、新しいビューとして保存します。
シンプルな式を使用してRunをプログラムでフィルタリング、グループ化、ソートします。
色や表示可否などの設定でRunの外観をカスタマイズします。
ワークスペース間でビューをコピーして、インテグレーションと再利用を行います。
Workspace API をインストール
wandb
に加えて、wandb-workspaces
をインストールすることを確認してください:
pip install wandb wandb-workspaces
プログラムでワークスペースビューを定義し保存する
import wandb_workspaces.reports.v2 as wr
workspace = ws. Workspace(entity= "your-entity" , project= "your-project" , views= [... ])
workspace. save()
既存のビューを編集する
existing_workspace = ws. Workspace. from_url("workspace-url" )
existing_workspace. views[0 ] = ws. View(name= "my-new-view" , sections= [... ])
existing_workspace. save()
ワークスペース 保存されたビュー
を別のワークスペースにコピーする
old_workspace = ws. Workspace. from_url("old-workspace-url" )
old_workspace_view = old_workspace. views[0 ]
new_workspace = ws. Workspace(entity= "new-entity" , project= "new-project" , views= [old_workspace_view])
new_workspace. save()
包括的なワークスペースAPIの例として、wandb-workspace examples
を参照してください。エンドツーエンドのチュートリアルについては、Programmatic Workspaces チュートリアルを参照してください。
5 - runs とは何ですか?
W&B の基本的な構成要素である Run について学びましょう。
W&B の run とは、W&B によってログ記録された単一の計算単位のことです。W&B の run をプロジェクト全体の原子要素として考えることができます。言い換えれば、各 run とは特定の計算の記録であり、モデルのトレーニング、結果のログ記録、ハイパーパラメータースイープなどを含みます。
run を開始する一般的なパターンには以下が含まれますが、これらに限定されません:
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 を Uncategorized
というプロジェクトに保存します。
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.finish()
を指定して run を終了したことを示してください。これにより、run がプロジェクトに正しくログ記録され、バックグラウンドで継続されないようにするのに役立ちます。
import wandb
run = wandb. init(entity= "<entity>" , project= "<project>" )
# トレーニングコード、ログ記録など
run. finish()
各 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 で確認できます。
https://wandb.ai/home の W&B App UI にアクセスします。
run を初期化した際に指定した W&B プロジェクトに移動します。
プロジェクトのワークスペース内で、 Runs タブを選択します。
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 の名前を使用してプロジェクトワークスペース内で run を素早く識別する方法として活用してください。
run の名前を指定するには、name
引数をwandb.init
メソッドに渡します。
import wandb
run = wandb. init(entity= "<project>" , project= "<project>" , name= "<run-name>" )
run にメモを追加
特定の run に追加したメモは、run ページの Overview タブやプロジェクトページの run 一覧表に表示されます。
あなたの W&B プロジェクトに移動します。
プロジェクトのサイドバーから Workspace タブを選択します。
run セレクタからメモを追加したい run を選択します。
Overview タブを選択します。
Description フィールド隣の鉛筆アイコンを選択して、メモを追加します。
run を停止する
W&B App またはプログラムを使用して run を停止します。
run を初期化したターミナルまたはコードエディタに移動します。
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 がもはやアクティブではないことを確認します:
run のログを記録していたプロジェクトに移動します。
run の名前を選択します。
停止した run の名前はターミナルまたはコードエディタの出力から見つけることができます。たとえば、前の例では、run の名前は legendary-meadow-2
です。
3. プロジェクトのサイドバーから **Overview** タブを選択します。
State フィールドの隣で、run の状態が running
から Killed
に変わります。
run のログを記録していたプロジェクトに移動します。
run セレクタ内で停止したい run を選択します。
プロジェクトのサイドバーから Overview タブを選択します。
State フィールドの隣の上部ボタンを選択します。
State フィールドの隣で、run の状態が running
から Killed
に変わります。
State fields を参照し、run の可能な状態の完全なリストを確認してください。
ログ記録された runs を見る
run の状態、run にログ記録されたアーティファクト、run 中に記録されたログファイルなど、特定の run に関する情報を表示します。
特定の run を表示するには:
https://wandb.ai/home の W&B App UI に移動します。
run を初期化した際に指定した W&B プロジェクトに移動します。
プロジェクトのサイドバー内で Workspace タブを選択します。
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 を一緒に整理したり、一時的なラベル(例:baseline
や production
)を適用するのに便利です。
W&B CLI version : run コマンドをホストしたマシンにインストールされている W&B CLI バージョン。
W&B は概要セクションの下に次の情報を保存します:
Artifact Outputs : run が生成したアーティファクトの出力。
Config : wandb.config
で保存された設定パラメータのリスト。
Summary : wandb.log()
で保存されたサマリーパラメータのリスト。デフォルトでは、W&B はこの値を最後にログ記録した値に設定します。
こちらでプロジェクトの概要の例を確認できます here 。
Workspace タブ
Workspace タブを使用して、生成されたプロットやカスタムプロット、システムメトリクスなどの可視化を表示、検索、グループ化、および配置してください。
こちらでワークスペースの例を確認できます here
Runs タブ
Runs タブを使用して、run をフィルタリング、グループ化、並べ替えます。
Runs タブで実行できる一般的なアクションを以下のタブで示しています。
Runs タブには、プロジェクト内の run の詳細が表示されます。デフォルトでは多くの列が表示されます。
表示されているすべての列を表示するには、ページを横にスクロールします。
列の順序を変更するには、列を左右にドラッグします。
列を固定するには、列名の上にカーソルを合わせ、表示されたアクションメニュー ...
をクリックしてから Pin column をクリックします。固定された列はページの左側に近い位置に表示されます。固定列を解除するには、Unpin column を選択します。
列を非表示にするには、列名の上にカーソルを合わせ、表示されたアクションメニュー ...
をクリックしてから Hide column をクリックします。現在非表示のすべての列を表示するには、Columns をクリックします。
一度に複数の列を表示、非表示、固定、または固定解除するには、Columns をクリックします。
非表示の列の名前をクリックして表示します。
表示されている列の名前をクリックして非表示にします。
表示された列の横にあるピンアイコンをクリックして固定します。
Runs タブをカスタマイズすると、そのカスタマイズは Workspace タブ の Runs セレクタにも反映されます。
Table のある列の値で全行を並べ替えます。
列タイトルにマウスを合わせます。ケバブメニュー(3つの垂直な点)が現れます。
ケバブメニュー(3つの垂直な点)を選択します。
並べ替え指定を選択して、降順または昇順で行を並べ替える。
上記の画像は、val_acc
と呼ばれる Table 列の並べ替えオプションを表示する方法を示しています。
フィルターボタン上の式を使用したすべての行のフィルタリング、ダッシュボード上部のフィルターボタンを使用できます。
行に1つ以上のフィルターを追加するには、Add filter を選択します。3 つのドロップダウンメニューが表示されます。左から右へのフィルタータイプは、列名、オペレーター、値に基づいています。る。
列名
二項関係
値
受け入れ値
ストリング
=, ≠, ≤, ≥, IN, NOT IN,
整数、浮動小数点、ストリング、タイムスタンプ、null
行編集案では、列名と論理述語構造に基づいてオートコンプリートを行い、各項目のオプションを示します。複数の論理述語を使用して「and」または「or」(場合によっては括弧)で1つの式に接続できます。
上記の画像は、`val_loss` 列に基づいたフィルターを示しています。フィルターは、検証損失が1以下の run を表示します。
ダッシュボード上の Group by ボタンを使用して、特定の列の値で全行をグループ化します。
デフォルトでは、これにより他の数値列が、その列のグループ全体の値の分布を示すヒストグラムに変わります。グループ化は、データ内のより高水準のパターンを理解するのに役立ちます。
System タブ
System tab には、CPU 使用率、システムメモリ、ディスク I/O、ネットワークトラフィック、GPU 使用率など、特定の run に対して追跡されるシステムメトリクスが表示されます。
W&B が追跡するシステムメトリクスの完全なリストについては、System metrics を参照してください。
システムタブの例はこちらから見ることができます here 。
Logs タブ
Log tab には、標準出力 (stdout
) や標準エラー (stderr
) などのコマンドラインに出力されたものが表示されます。
右上の「ダウンロード」ボタンを選択してログファイルをダウンロードします。
ログタブの例はこちらから見ることができます here .
Files タブ
Files tab を使用して、特定の run に関連付けられたファイル(モデルチェックポイント、検証セット例など)を表示してください。
ファイルタブの例はこちらから見ることができます here .
Artifacts タブ
Artifacts タブには、指定した run の入力および出力 Artifacts が一覧表示されます。
Artifacts タブの例はこちらから見ることができます here .
Run を削除する
W&B App を使用してプロジェクトから 1 つ以上の run を削除します。
削除したい runs を含むプロジェクトに移動します。
プロジェクトのサイドバーから Runs タブを選択します。
削除したい runs の横のチェックボックスを選択します。
テーブルの上部に表示される Delete ボタン(ゴミ箱アイコン)を選択します。
表示されたモーダルで Delete を選択します。
特定の ID を持つ run が削除された場合、その ID は再び使用されないことに注意してください。削除された ID で run を開始しようとするとエラーが表示され、開始が防止されます。
多くの run を含むプロジェクトでは、検索バーを使用して削除したい run を正規表現を使用してフィルタリングするか、ステータス、タグ、または他のプロパティに基づいて run をフィルターするためのフィルターボタンを使用することができます。
Run を整理する
このセクションでは、グループとジョブタイプを使用して run を整理する方法についての手順を紹介します。 run をグループ(たとえば、実験名)に割り当て、ジョブタイプ(たとえば、前処理、トレーニング、評価、デバッグ)を指定することで、ワークフローを簡素化し、モデルの比較を改善できます。
Run にグループまたはジョブタイプを割り当てる
W&B の各 run は グループ と ジョブタイプ で分類できます:
グループ :実験の広範なカテゴリで、run を整理およびフィルタリングするために使用されます。
ジョブタイプ :run の機能で、preprocessing
や training
、evaluation
のようなものです。
次のワークスペースの例 では、Fashion-MNIST データセットからの増加するデータ量を使用してベースラインモデルをトレーニングしています。ワークスペースは使用されたデータ量を示すために色を使用します:
黄色から濃緑 は、ベースラインモデルのためのデータ量の増加を示しています。
薄い青から紫、マゼンタ は、追加パラメーターを持つより複雑な「ダブル」モデルのためのデータ量を示しています。
W&B のフィルタリングオプションや検索バーを使用して、次のような特定の条件に基づいて run を比較します:
同じデータセットに対するトレーニング。
同じテストセットに対する評価。
フィルターを適用する際、Table ビューは自動的に更新されます。これにより、モデル間のパフォーマンスの違い(たとえば、どのクラスが他のモデルと比べてはるかに難しいか)を特定することができます。
5.1 - run をフィルタリングし検索する
プロジェクトページのサイドバーとテーブルの使い方
プロジェクトページを使用して、W&B にログされた run からインサイトを得ることができます。Workspace ページと Runs ページの両方で、run をフィルタリングおよび検索できます。
run をフィルタリングする
ステータス、タグ、またはその他のプロパティに基づいて、フィルター ボタンを使用して run をフィルタリングします。
タグで run をフィルタリングする
フィルター ボタンを使用して、タグに基づいて run をフィルタリングします。
正規表現で run をフィルタリングする
正規表現で望む結果が得られない場合は、タグ を使用して Runs Table で run をフィルタリングすることができます。タグは run 作成時、または完了後に追加できます。一旦タグが run に追加されると、以下の gif に示されているように、タグ フィルターを追加できます。
run を検索する
指定した正規表現を使用して run を見つけるには、regex を使用します。検索ボックスにクエリを入力すると、ワークスペースのグラフで表示される run がフィルタリングされ、テーブルの行もフィルタリングされます。
run をグループ化する
1 つまたは複数の列(隠し列を含む)で run をグループ化するには:
検索ボックスの下にある、罫線のついた紙のように見える Group ボタンをクリックします。
結果をグループ化する 1 つ以上の列を選択します。
グループ化された各 run セットはデフォルトで折りたたまれています。展開するには、グループ名の横にある矢印をクリックします。
最小値と最大値で run を並べ替える
ログされたメトリクスの最小値または最大値で run テーブルを並べ替えます。これは、記録された最良または最悪の値を表示したい場合に特に便利です。
次の手順は、記録された最小値または最大値に基づいて特定のメトリクスで run テーブルを並べ替える方法を説明します:
並べ替えたいメトリクスを含む列にマウスを合わせます。
ケバブ メニュー(三本の縦線)を選択します。
ドロップダウンから、Show min または Show max を選択します。
同じドロップダウンから、Sort by asc または Sort by desc を選択して、それぞれ昇順または降順で並べ替えます。
run の終了時間を検索する
クライアントプロセスからの最後のハートビートをログする End Time
という名前の列を提供します。このフィールドはデフォルトでは非表示になっています。
run テーブルを CSV にエクスポートする
すべての run、ハイパーパラメーター、およびサマリーメトリクスのテーブルを、ダウンロード ボタンを使用して CSV にエクスポートします。
5.2 - run をフォークする
W&B run をフォークする
run をフォークする機能はプライベートプレビューです。この機能へのアクセスをリクエストするには、support@wandb.com まで W&B サポートにお問い合わせください。
run を初期化する際に fork_from
を使用して、既存の W&B run から"フォーク"します。run をフォークすると、W&B はソース run の run ID
と step
を使用して新しい run を作成します。
run をフォークすることで、元の run に影響を与えずに、実験の特定のポイントから異なるパラメータやモデルを探索することができます。
run のフォークには wandb
SDK バージョン >= 0.16.5 が必要です
run のフォークには、単調に増加するステップが必要です。define_metric()
で定義された非単調なステップを使用してフォークポイントを設定することはできません。これは、run 履歴およびシステムメトリクスの重要な時間的順序を乱すためです。
フォークされた run を開始する
run をフォークするには、wandb.init()
で fork_from
引数を使用し、フォーク元としてのソース run ID
と step
を指定します:
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 を取得するには、次の手順に従います:
Overview タブにアクセスする: ソース run のページで Overview タブ に移動します。
不変の 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()
巻き戻しとフォークの互換性 フォークは、あなたの run を管理し実験する上でより多くの柔軟性を提供することにより、巻き戻し
を補完します。
run をフォークする際、W&B は特定のポイントで run から新しいブランチを作成し、異なるパラメータやモデルを試みることができます。
run を巻き戻す際、W&B は run 履歴自体を修正または変更することができます。
5.3 - run を移動する
このページでは、run を別のプロジェクト間で、またはチーム内外、またはあるチームから別のチームへの移動方法を示します。現在の場所と新しい場所の両方で run へのアクセス権が必要です。
Runs タブをカスタマイズするには、Project page を参照してください。
プロジェクト間で run を移動する
run をあるプロジェクトから別のプロジェクトに移動するには:
移動したい run を含むプロジェクトに移動します。
プロジェクトのサイドバーから Runs タブを選択します。
移動したい run の横にあるチェックボックスを選択します。
テーブルの上にある Move ボタンを選択します。
ドロップダウンから移動先のプロジェクトを選択します。
チームに run を移動する
あなたがメンバーであるチームに run を移動するには:
移動したい run を含むプロジェクトに移動します。
プロジェクトのサイドバーから Runs タブを選択します。
移動したい run の横にあるチェックボックスを選択します。
テーブルの上にある Move ボタンを選択します。
ドロップダウンから移動先のチームとプロジェクトを選択します。
5.4 - run を巻き戻す
巻き戻す
runを巻き戻す
runを巻き戻すオプションはプライベートプレビューです。この機能へのアクセスをリクエストするには、W&Bサポート(support@wandb.com )までお問い合わせください。
現在、W&Bがサポートしていないもの:
ログの巻き戻し : 新しいrunセグメントでログがリセットされます。
システムメトリクスの巻き戻し : W&Bは巻き戻しポイントの後にのみ新しいシステムメトリクスをログします。
アーティファクトの関連付け : W&Bは生成されたアーティファクトをそのソース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からフォークすると、W&Bは特定のポイントでrunを分岐させて異なるパラメータやモデルを試します。
runを巻き戻すと、W&Bはrun履歴そのものを修正または変更することを可能にします。
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 )) # 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を表示します:
Overviewタブにアクセスする : runのページでOverviewタブ に移動します。このタブはrunの詳細と履歴を包括的に表示します。
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.5 - run を再開
一時停止または終了した W&B Run を再開する
実行が停止またはクラッシュした場合にどのように動作するべきかを指定します。実行を再開または自動的に再開するためには、その実行に関連付けられた一意の実行IDをid
パラメータとして指定する必要があります。
run = wandb. init(entity= "<entity>" , \
project= "<project>" , id= "<run ID>" , resume= "<resume>" )
W&Bは、実行を保存したいW&B Projectの名前を指定することをお勧めします。
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" )
複数のプロセスが同じid
を同時に使用すると予期しない結果が発生します。
複数プロセスの管理方法については、分散トレーニング実験のログ を参照してください。
既存の実行を上書きせずに実行を再開する
停止またはクラッシュした実行を、既存の実行を上書きせずに再開します。これは、プロセスが正常に終了しない場合に特に役立ちます。次回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
スクリプトを再起動する必要があります。
ファイルシステムを共有できない場合は、
WANDB_RUN_ID
環境変数を指定するか、W&B Python SDKで実行IDを渡します。実行IDの詳細は、“What are runs?“ページの
カスタム実行ID セクションを参照してください。
中断可能なSweepsの実行を再開する
中断されたスイープ実行を自動的に再キューします。これは、スイープエージェントを停止の対象となる計算環境(SLURMジョブの中断可能なキュー、EC2スポットインスタンス、Google Cloud中断可能VMなど)で実行する場合に特に役立ちます。
mark_preempting
関数を使用して、W&Bが中断されたスイープ実行を自動的に再キューできるようにします。以下のコードスニペットの例
run = wandb. init() # 実行を初期化
run. mark_preempting()
以下の表は、スイープ実行の終了ステータスに基づいてW&Bが実行をどのように扱うかを概説しています。
ステータス
振る舞い
ステータスコード0
実行は成功裏に終了したと見なされ、再キューされません。
非ゼロステータス
W&Bは自動的に実行をスイープに関連付けられたランキューに追加します。
ステータスなし
実行はスイープランキューに追加されます。スイープエージェントは、キューが空になるまでランキューから実行を消費します。キューが空になると、スイープキューはスイープ検索アルゴリズムに基づいて新しい実行の生成を再開します。
5.6 - run を実験にまとめる
トレーニングと評価 run をグループ化して大規模な Experiments を構成する
個々のジョブを実験としてグループ化するには、一意のグループ 名を**wandb.init()**に渡します。
ユースケース
分散トレーニング : 実験が異なるトレーニングや評価スクリプトに分割されている場合、グループ化を使用してそれらを一つの大きな全体として見ることができます。
複数のプロセス : 複数の小さなプロセスを一つの実験としてグループ化します。
K-分割交差検証 : 異なるランダムシードを持つrunをグループ化して、大きな実験を見ます。こちらがスイープとグループ化を使用したK-分割交差検証の例です 。
グループ化を設定する方法は3つあります:
1. スクリプトでグループを設定する
オプションで group
と job_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 タブを選択して線と陰影を変更します。各グループの線には平均、最小、最大値を選択できます。陰影については無効にしたり、最小と最大、標準偏差、標準誤差を表示することができます。
5.7 - runs にタグでラベルを追加する
特定の特徴を持つ runs にタグを追加して、ログされたメトリクスやアーティファクトデータからは見えない情報をラベル付けできます。
たとえば、ある run のモデルが in_production
であること、run が preemptible
であること、この run が baseline
を表していることなどを示すためにタグを追加できます。
1つまたは複数の runs にタグを追加する
プログラムによって、または対話的に runs にタグを追加します。
あなたのユースケースに基づいて、以下のタブからニーズに最も合ったものを選択してください。
W&B Python SDK
Public API
Project page
Run page
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 にタグ付けするのに最も適しています。
プロジェクトワークスペースに移動します。
プロジェクトのサイドバーから Runs を選択します。
テーブルから1つまたは複数の runs を選択します。
1つまたは複数の runs を選択すると、テーブルの上にある Tag ボタンを選択します。
追加したいタグを入力し、そのタグを追加するために Create new tag チェックボックスを選択します。
このメソッドは、1つの run に手動でタグを適用するのに最も適しています。
プロジェクトワークスペースに移動します。
プロジェクトのワークスペース内の runs リストから run を1つ選択します。
プロジェクトサイドバーから Overview を選択します。
Tags の横にある灰色のプラスアイコン (+ ) ボタンを選択します。
追加したいタグを入力し、新しいタグを追加するためにテキストボックスの下にある Add を選択します。
1つまたは複数の runs からタグを削除する
W&B App の UI を使って、runs からタグを削除することもできます。
このメソッドは、大量の runs からタグを削除するのに最も適しています。
プロジェクトの Run サイドバーで、右上のテーブルアイコンを選択します。これにより、サイドバーがフルランズテーブルに展開されます。
テーブル内の run にカーソルを合わせると、左側にチェックボックスが表示されるか、すべての runs を選択するためのチェックボックスがヘッダー行に表示されます。
チェックボックスを選択して一括操作を有効にします。
タグを削除したい runs を選択します。
run の行の上にある Tag ボタンを選択します。
run から削除するために、タグの横にあるチェックボックスを選択します。
Run ページの左サイドバーで、上部の Overview タブを選択します。ここで run のタグが表示されます。
タグにカーソルを合せ、「x」を選択して run から削除します。
5.8 - アラートを送信する
Python コードからトリガーされたアラートを Slack またはメールに送信する
run がクラッシュしたり、カスタムトリガーで Slack やメールでアラートを作成します。例えば、トレーニングループの勾配が膨らみ始めた場合(NaNを報告)や、ML パイプライン内のステップが完了した場合などです。アラートは、個人およびチームプロジェクトの両方を含む、run を初期化するすべての Projects に適用されます。
その後、Slack(またはメール)で W&B Alerts メッセージを確認します。
アラートの作成方法
以下のガイドは、マルチテナントクラウドでのアラートにのみ適用されます。
プライベートクラウドまたは W&B 専用クラウドで W&B Server を使用している場合は、Slack アラートの設定についてはこちらのドキュメント を参照してください。
アラートを設定するための主なステップは2つあります。
W&B の User Settings で Alerts をオンにする
コードに run.alert()
を追加する
アラートが正しく設定されているか確認する
1. W&B User Settings でアラートをオンにする
User Settings の中で:
Alerts セクションまでスクロールします
Scriptable run alerts をオンにして run.alert()
からのアラートを受け取ります
Connect Slack を使用して、アラートを投稿する Slack チャンネルを選択します。アラートを非公開に保持するため、Slackbot チャンネルをお勧めします。
Email は W&B にサインアップしたときに使用したメールアドレスに送られます。これらのアラートがフォルダに入り、受信トレイを埋めないようにメールにフィルターを設定することをお勧めします。
W&B Alerts を初めて設定する際、またはアラートの受け取り方を変更したい場合にのみ、これを行う必要があります。
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 Settings で Scriptable 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 チャンネルを選択します。
6 - Jupyter ノートブックをトラッキングする
Jupyter を使用して W&B と連携し、ノートブックから離れることなくインタラクティブな可視化を得ましょう。
W&B を Jupyter と組み合わせることで、ノートブックを離れることなくインタラクティブな可視化を実現できます。カスタム分析、実験管理、プロトタイプをすべて完全にログしながら結合します。
Jupyter ノートブックにおける W&B のユースケース
反復実験 : 実験を実行および再実行して、パラメータを調整し、すべての実行を手動でメモを取ることなく自動的に W&B に保存します。
コード保存 : モデルを再現する際、ノートブックのどのセルが実行されたか、どの順序で実行されたかを知るのは難しいです。各実験のセル実行の記録を保存するために、設定ページ でコード保存をオンにしてください。
カスタム分析 : 実行が W&B にログされたら、APIからデータフレームを取得して、カスタム分析を行い、その結果を W&B にログしてレポートで保存し、共有できます。
ノートブックでの始め方
W&B をインストールしてアカウントをリンクするために、次のコードでノートブックを開始します:
!pip install wandb -qqq
import wandb
wandb.login()
次に、実験を設定してハイパーパラメーターを保存します:
wandb. init(
project= "jupyter-projo" ,
config= {
"batch_size" : 128 ,
"learning_rate" : 0.01 ,
"dataset" : "CIFAR-100" ,
},
)
wandb.init()
を実行した後、新しいセルを %%wandb
から開始して、ノートブックでライブグラフを表示します。このセルを複数回実行すると、データは run に追加されます。
%%wandb
# ここにトレーニングループ
この例のノートブック で試してみてください。
ノートブックでライブ W&B インターフェイスを直接レンダリング
既存のダッシュボード、スイープ、またはレポートをノートブック内で直接表示することも可能です。%wandb
マジックを使います:
# プロジェクトワークスペースを表示
%wandb USERNAME/PROJECT
# 単一の run を表示
%wandb USERNAME/PROJECT/runs/RUN_ID
# スイープを表示
%wandb USERNAME/PROJECT/sweeps/SWEEP_ID
# レポートを表示
%wandb USERNAME/PROJECT/reports/REPORT_ID
# 埋め込まれた iframe の高さを指定
%wandb USERNAME/PROJECT -h 2048
%%wandb
または %wandb
マジックの代替として、wandb.init()
を実行した後、任意のセルを wandb.run
で終わらせてインライングラフを表示するか、私たちの API から返された任意のレポート、スイープ、または run オブジェクトに ipython.display(...)
を呼び出すこともできます。
# まず wandb.run を初期化
wandb. init()
# セルが wandb.run を出力すれば、ライブグラフが見られます
wandb. run
W&B における追加の Jupyter 機能
Colab における簡単な認証 : Colab で最初に wandb.init
を呼び出すと、ブラウザーで W&B にログインしている場合、ランタイムを自動的に認証します。run ページの Overviewタブに Colab へのリンクが表示されます。
Jupyter マジック : ダッシュボード、スイープ、レポートをノートブック内で直接表示する機能です。%wandb
マジックはプロジェクト、スイープ、またはレポートへのパスを受け取り、W&B インターフェイスをノートブック内に直接レンダリングします。
Docker化された Jupyter のローンチ : wandb docker --jupyter
を呼び出して、dockerコンテナを起動し、コードをマウントし、Jupyter がインストールされていることを確認し、ポート 8888 で起動します。
順序を気にせずにセルを実行 : デフォルトでは、次に wandb.init
が呼び出されるまで run を finished
としてマークしません。それにより、複数のセル(例: データを設定するセル、トレーニングするセル、テストするセル)を任意の順序で実行し、すべて同じ run にログできます。設定 でコード保存をオンにすると、実行順序と状態で実行されたセルもログされ、最も非線形なパイプラインでさえ再現できます。Jupyter ノートブックで run を手動で完了としてマークするには、run.finish
を呼び出してください。
import wandb
run = wandb. init()
# トレーニングスクリプトとログはここに
run. finish()
7 - ログ オブジェクト と メディア
メトリクス、ビデオ、カスタムプロットなどを追跡する
W&B Python SDK を使用して、メトリクス、メディア、またはカスタムオブジェクトの辞書をステップにログします。W&B は各ステップごとにキーと値のペアを収集し、wandb.log()
でデータをログするたびにそれらを統一された辞書に格納します。スクリプトからログされたデータは、wandb
と呼ばれるディレクトリにローカルに保存され、その後 W&B クラウドまたは プライベートサーバー に同期されます。
キーと値のペアは、各ステップに同じ値を渡した場合にのみ統一された辞書に保存されます。step
に異なる値をログした場合、W&B はすべての収集されたキーと値をメモリに書き込みます。
デフォルトでは、wandb.log
を呼び出すたびに新しい step
になります。W&B は、チャートやパネルを作成する際にステップをデフォルトの x 軸として使用します。カスタムの x 軸を作成して使用するか、カスタムの要約メトリックをキャプチャすることも選択できます。詳細は、ログの軸をカスタマイズする を参照してください。
wandb.log()
を使用して、各 step
の連続する値をログします: 0, 1, 2, といった具合です。特定の履歴ステップに書き込むことは不可能です。W&B は「現在」と「次」のステップにのみ書き込みます。
自動でログされるデータ
W&B は、W&B Experiment 中に次の情報を自動でログします:
システムメトリクス : CPU と GPU の使用率、ネットワークなど。これらは run ページ のシステムタブに表示されます。GPU に関しては、nvidia-smi
で取得されます。
コマンドライン : stdout と stderr が取得され、run ページ のログタブに表示されます。
アカウントの Settings ページ でコードの保存 をオンにして、以下をログします:
Git コミット : 最新の git コミットを取得し、run ページの overview タブに表示されます。コミットされていない変更がある場合は diff.patch
ファイルも表示されます。
依存関係 : requirements.txt
ファイルがアップロードされ、run ページのファイルタブに表示されます。run 用に wandb
ディレクトリに保存したファイルも含まれます。
特定の W&B API 呼び出しでログされるデータ
W&B を使用することで、ログしたいものを正確に決定できます。次に、よくログされるオブジェクトのリストを示します:
Datasets : 画像や他のデータセットサンプルを W&B にストリームするためには、特にログする必要があります。
Plots : グラフを追跡するために wandb.plot
を wandb.log
と一緒に使用します。詳細はログでのグラフ を参照してください。
Tables : wandb.Table
を使用してデータをログし、W&B でビジュアライズおよびクエリを行います。詳細はログでのテーブル を参照してください。
PyTorch 勾配 : モデルの重みの勾配を UI にヒストグラムとして表示するために wandb.watch(model)
を追加します。
設定情報 : ハイパーパラメーター、データセットへのリンク、使用しているアーキテクチャーの名前などを設定パラメーターとしてログします。このように渡します:wandb.init(config=your_config_dictionary)
。詳細はPyTorch インテグレーション ページをご覧ください。
メトリクス : wandb.log
を使用してモデルのメトリクスを表示します。トレーニングループ内で精度や損失のようなメトリクスをログすると、UI にライブ更新グラフが表示されます。
一般的なワークフロー
最高の精度を比較する : Runs 間でメトリクスの最高値を比較するには、そのメトリクスの要約値を設定します。デフォルトでは、各キーの最後にログした値が要約に設定されます。これは UI のテーブルで、要約メトリクスに基づいて run を並べ替えたりフィルタリングしたりするのに便利です。best の精度に基づいてテーブルまたは棒グラフで run を比較するのに役立ちます。例:wandb.run.summary["best_accuracy"] = best_accuracy
複数のメトリクスを1つのチャートで表示 : wandb.log
の同じ呼び出し内で複数のメトリクスをログすると、例えばこうなります: wandb.log({"acc": 0.9, "loss": 0.1})
。UI ではどちらもプロットすることができます。
x 軸をカスタマイズする : 同じログ呼び出しにカスタム x 軸を追加して、W&B ダッシュボードで別の軸に対してメトリクスを視覚化します。例:wandb.log({'acc': 0.9, 'epoch': 3, 'batch': 117})
。特定のメトリクスに対するデフォルトの x 軸を設定するには、Run.define_metric() を使用してください。
リッチメディアとチャートをログする : wandb.log
は、画像やビデオのようなメディア からtables やcharts に至るまで、多様なデータタイプのログをサポートしています。
ベストプラクティスとヒント
Experiments やログのためのベストプラクティスとヒントについては、Best Practices: Experiments and Logging を参照してください。
7.1 - メディアとオブジェクトをログする
3D ポイント クラウドや分子から HTML、ヒストグラムまで、豊富なメディアをログする
私たちは画像、ビデオ、音声などをサポートしています。リッチメディアをログして、結果を探索し、Run、Models、Datasetsを視覚的に比較しましょう。例やハウツーガイドは以下をご覧ください。
メディアタイプの参考ドキュメントをお探しですか?この
ページ が必要です。
前提条件
W&B SDKを使用してメディアオブジェクトをログするためには、追加の依存関係をインストールする必要があるかもしれません。以下のコマンドを実行してこれらの依存関係をインストールできます:
画像
画像をログして、入力、出力、フィルター重み、活性化状態などを追跡しましょう。
画像はNumPy配列、PIL画像、またはファイルシステムから直接ログできます。
ステップごとに画像をログするたびに、UIに表示するために保存されます。画像パネルを拡大し、ステップスライダーを使用して異なるステップの画像を確認します。これにより、トレーニング中にモデルの出力がどのように変化するかを比較しやすくなります。
トレーニング中のログのボトルネックを防ぎ、結果を表示する際の画像読み込みのボトルネックを防ぐために、1ステップあたり50枚以下の画像をログすることをお勧めします。
配列を画像としてログする
PIL Imagesをログする
ファイルから画像をログする
配列を手動で画像として構築する際に、make_grid
from torchvision
を使用するなど、配列を直接提供します。
配列はPillow を使用してpngに変換されます。
images = wandb. Image(image_array, caption= "Top: Output, Bottom: Input" )
wandb. log({"examples" : images})
最後の次元が1の場合はグレースケール、3の場合はRGB、4の場合はRGBAと仮定します。配列が浮動小数点数を含む場合、それらを0
から255
の整数に変換します。異なる方法で画像を正規化したい場合は、mode
を手動で指定するか、"Logging PIL Images"
タブで説明されているように、単にPIL.Image
を提供することができます。
配列から画像への変換を完全に制御するために、PIL.Image
を自分で構築し、直接提供してください。
images = [PIL. Image. fromarray(image) for image in image_array]
wandb. log({"examples" : [wandb. Image(image) for image in images]})
さらに制御したい場合は、任意の方法で画像を作成し、ディスクに保存し、ファイルパスを提供します。
im = PIL. fromarray(... )
rgb_im = im. convert("RGB" )
rgb_im. save("myimage.jpg" )
wandb. log({"example" : wandb. Image("myimage.jpg" )})
画像オーバーレイ
セマンティックセグメンテーションマスクをログし、W&B UIを通じて(不透明度の変更、時間経過による変化の確認など)それらと対話します。
オーバーレイをログするには、wandb.Image
のmasks
キーワード引数に以下のキーと値を持つ辞書を提供する必要があります:
画像マスクを表す2つのキーのうちの1つ:
"mask_data"
:各ピクセルの整数クラスラベルを含む2D NumPy配列
"path"
:(文字列)保存された画像マスクファイルへのパス
"class_labels"
:(オプション)画像マスク内の整数クラスラベルを可読クラス名にマッピングする辞書
複数のマスクをログするには、以下のコードスニペットのように、複数のキーを含むマスク辞書をログします。
ライブ例を参照してください
サンプルコード
mask_data = np. array([[1 , 2 , 2 , ... , 2 , 2 , 1 ], ... ])
class_labels = {1 : "tree" , 2 : "car" , 3 : "road" }
mask_img = wandb. Image(
image,
masks= {
"predictions" : {"mask_data" : mask_data, "class_labels" : class_labels},
"ground_truth" : {
# ...
},
# ...
},
)
画像にバウンディングボックスをログし、UIで異なるセットのボックスを動的に可視化するためにフィルターや切り替えを使用します。
ライブ例を参照してください
バウンディングボックスをログするには、wandb.Image
のboxes
キーワード引数に以下のキーと値を持つ辞書を提供する必要があります:
box_data
:各ボックス用の辞書リスト。ボックス辞書形式は以下に説明します。
position
:ボックスの位置とサイズを表す辞書で、以下で説明する2つの形式のいずれか。すべてのボックスが同じ形式を使用する必要はありません。
オプション 1: {"minX", "maxX", "minY", "maxY"}
。各ボックスの次元の上下限を定義する座標セットを提供します。
オプション 2: {"middle", "width", "height"}
。middle
座標を[x,y]
として、width
とheight
をスカラーとして指定します。
class_id
:ボックスのクラス識別を表す整数。以下のclass_labels
キーを参照。
scores
:スコアの文字列ラベルと数値の辞書。UIでボックスをフィルタリングするために使用できます。
domain
:ボックス座標の単位/形式を指定してください。この値を"pixel"に設定 してください。ボックス座標が画像の次元内の整数のようにピクセル空間で表されている場合、デフォルトで、domainは画像の割合/百分率として表され、0から1までの浮動小数点数として解釈されます。
box_caption
:(オプション)このボックス上に表示されるラベルテキストとしての文字列
class_labels
:(オプション)class_id
を文字列にマッピングする辞書。デフォルトではclass_0
、class_1
などのクラスラベルを生成します。
この例をチェックしてください:
class_id_to_label = {
1 : "car" ,
2 : "road" ,
3 : "building" ,
# ...
}
img = wandb. Image(
image,
boxes= {
"predictions" : {
"box_data" : [
{
# デフォルトの相対/小数領域で表現された1つのボックス
"position" : {"minX" : 0.1 , "maxX" : 0.2 , "minY" : 0.3 , "maxY" : 0.4 },
"class_id" : 2 ,
"box_caption" : class_id_to_label[2 ],
"scores" : {"acc" : 0.1 , "loss" : 1.2 },
# ピクセル領域で表現された別のボックス
# (説明目的のみ、すべてのボックスは同じ領域/形式である可能性が高い)
"position" : {"middle" : [150 , 20 ], "width" : 68 , "height" : 112 },
"domain" : "pixel" ,
"class_id" : 3 ,
"box_caption" : "a building" ,
"scores" : {"acc" : 0.5 , "loss" : 0.7 },
# ...
# 必要に応じて多くのボックスをログします
}
],
"class_labels" : class_id_to_label,
},
# 意味のあるボックスのグループごとに一意のキーネームでログします
"ground_truth" : {
# ...
},
},
)
wandb. log({"driving_scene" : img})
テーブル内の画像オーバーレイ
テーブル内でセグメンテーションマスクをログするには、テーブルの各行に対してwandb.Image
オブジェクトを提供する必要があります。
以下のコードスニペットに例があります:
table = wandb. Table(columns= ["ID" , "Image" ])
for id, img, label in zip(ids, images, labels):
mask_img = wandb. Image(
img,
masks= {
"prediction" : {"mask_data" : label, "class_labels" : class_labels}
# ...
},
)
table. add_data(id, img)
wandb. log({"Table" : table})
テーブル内でバウンディングボックス付き画像をログするには、テーブルの各行にwandb.Image
オブジェクトを提供する必要があります。
以下のコードスニペットに例があります:
table = wandb. Table(columns= ["ID" , "Image" ])
for id, img, boxes in zip(ids, images, boxes_set):
box_img = wandb. Image(
img,
boxes= {
"prediction" : {
"box_data" : [
{
"position" : {
"minX" : box["minX" ],
"minY" : box["minY" ],
"maxX" : box["maxX" ],
"maxY" : box["maxY" ],
},
"class_id" : box["class_id" ],
"box_caption" : box["caption" ],
"domain" : "pixel" ,
}
for box in boxes
],
"class_labels" : class_labels,
}
},
)
ヒストグラム
基本ヒストグラムログ
柔軟なヒストグラムログ
Summary内のヒストグラム
リスト、配列、テンソルなどの数字のシーケンスが最初の引数として提供されると、自動的にnp.histogram
を呼んでヒストグラムを構築します。すべての配列/テンソルはフラット化されます。num_bins
キーワード引数を使用して64
ビンのデフォルト設定を上書きできます。最大サポートビン数は512
です。
UIでは、トレーニングステップがx軸に、メトリック値がy軸に、色で表現されたカウントでヒストグラムがプロットされ、トレーニング中にログされたヒストグラムを比較しやすくしています。詳細については、このパネルの"Summary内のヒストグラム"タブを参照してください。
wandb. log({"gradients" : wandb. Histogram(grads)})
もっと制御したい場合は、np.histogram
を呼び出し、その返されたタプルをnp_histogram
キーワード引数に渡します。
np_hist_grads = np. histogram(grads, density= True , range= (0.0 , 1.0 ))
wandb. log({"gradients" : wandb. Histogram(np_hist_grads)})
wandb. run. summary. update( # Summaryにのみある場合、Overviewタブにのみ表示されます
{"final_logits" : wandb. Histogram(logits)}
)
ファイルを形式 'obj'
, 'gltf'
, 'glb'
, 'babylon'
, 'stl'
, 'pts.json'
でログすれば、runが終了した際にUIでそれらをレンダリングします。
wandb. log(
{
"generated_samples" : [
wandb. Object3D(open("sample.obj" )),
wandb. Object3D(open("sample.gltf" )),
wandb. Object3D(open("sample.glb" )),
]
}
)
ライブ例を見る
Summary内にあるヒストグラムは、Run Page のOverviewタブに表示されます。履歴にある場合、Chartsタブで時間経過によるビンのヒートマップをプロットします。
3D可視化
3Dポイントクラウドとバウンディングボックスを持つLidarシーンをログします。レンダリングするポイントの座標と色を含むNumPy配列を渡します。
point_cloud = np. array([[0 , 0 , 0 , COLOR]])
wandb. log({"point_cloud" : wandb. Object3D(point_cloud)})
:::info
W&B UIはデータを30万ポイントに制限します。
:::
NumPy配列フォーマット
色のスキームに柔軟性を持たせるために、3つの異なるデータ形式のNumPy配列がサポートされています。
[[x, y, z], ...]
nx3
[[x, y, z, c], ...]
nx4
, cは範囲[1, 14]内のカテゴリ
(セグメンテーションに便利)
[[x, y, z, r, g, b], ...]
nx6 | r,g,b
は赤、緑、青のカラー チャネルに対して範囲[0,255]
の値
Pythonオブジェクト
このスキーマを使用して、Pythonオブジェクトを定義し、以下に示すように the from_point_cloud
method に渡すことができます。
points
は、単純なポイントクラウドレンダラーで上記に示されたのと同じフォーマットを使用してレンダリングするポイントの座標と色を含むNumPy配列です 。
boxes
は3つの属性を持つPython辞書のNumPy配列です:
corners
- 8つのコーナーのリスト
label
- ボックスにレンダリングされるラベルを表す文字列 (オプション)
color
- ボックスの色を表すrgb値
score
- バウンディングボックスに表示される数値で、表示するバウンディングボックスのフィルタリングに使用できます(例:score
> 0.75
のバウンディングボックスのみを表示する)。(オプション)
type
はレンダリングされるシーンタイプを表す文字列です。現在サポートされている値はlidar/beta
のみです。
point_list = [
[
2566.571924017235 , # x
746.7817289698219 , # y
- 15.269245470863748 ,# z
76.5 , # red
127.5 , # green
89.46617199365393 # blue
],
[ 2566.592983606823 , 746.6791987335685 , - 15.275803826279521 , 76.5 , 127.5 , 89.45471117247024 ],
[ 2566.616361739416 , 746.4903185513501 , - 15.28628929674075 , 76.5 , 127.5 , 89.41336375503832 ],
[ 2561.706014951675 , 744.5349468458361 , - 14.877496818222781 , 76.5 , 127.5 , 82.21868245418283 ],
[ 2561.5281847916694 , 744.2546118233013 , - 14.867862032341005 , 76.5 , 127.5 , 81.87824684536432 ],
[ 2561.3693562897465 , 744.1804761656741 , - 14.854129178142523 , 76.5 , 127.5 , 81.64137897587152 ],
[ 2561.6093071504515 , 744.0287526628543 , - 14.882135189841177 , 76.5 , 127.5 , 81.89871499537098 ],
# ... and so on
]
run. log({"my_first_point_cloud" : wandb. Object3D. from_point_cloud(
points = point_list,
boxes = [{
"corners" : [
[ 2601.2765123137915 , 767.5669506323393 , - 17.816764802288663 ],
[ 2599.7259021588347 , 769.0082337923552 , - 17.816764802288663 ],
[ 2599.7259021588347 , 769.0082337923552 , - 19.66876480228866 ],
[ 2601.2765123137915 , 767.5669506323393 , - 19.66876480228866 ],
[ 2604.8684867834395 , 771.4313904894723 , - 17.816764802288663 ],
[ 2603.3178766284827 , 772.8726736494882 , - 17.816764802288663 ],
[ 2603.3178766284827 , 772.8726736494882 , - 19.66876480228866 ],
[ 2604.8684867834395 , 771.4313904894723 , - 19.66876480228866 ]
],
"color" : [0 , 0 , 255 ], # バウンディングボックスのRGB色
"label" : "car" , # バウンディングボックスに表示される文字列
"score" : 0.6 # バウンディングボックスに表示される数値
}],
vectors = [
{"start" : [0 , 0 , 0 ], "end" : [0.1 , 0.2 , 0.5 ], "color" : [255 , 0 , 0 ]}, # 色は任意
],
point_cloud_type = "lidar/beta" ,
)})
ポイントクラウドを表示するとき、Controlキーを押しながらマウスを使用すると、内部空間を移動できます。
ポイントクラウドファイル
the from_file
method を使用して、ポイントクラウドデータが満載のJSONファイルをロードできます。
run. log({"my_cloud_from_file" : wandb. Object3D. from_file(
"./my_point_cloud.pts.json"
)})
ポイントクラウドデータのフォーマット方法の例を以下に示します。
{
"boxes" : [
{
"color" : [
0 ,
255 ,
0
],
"score" : 0.35 ,
"label" : "My label" ,
"corners" : [
[
2589.695869075582 ,
760.7400443552185 ,
-18.044831294622487
],
[
2590.719039645323 ,
762.3871153874499 ,
-18.044831294622487
],
[
2590.719039645323 ,
762.3871153874499 ,
-19.54083129462249
],
[
2589.695869075582 ,
760.7400443552185 ,
-19.54083129462249
],
[
2594.9666662674313 ,
757.4657929961453 ,
-18.044831294622487
],
[
2595.9898368371723 ,
759.1128640283766 ,
-18.044831294622487
],
[
2595.9898368371723 ,
759.1128640283766 ,
-19.54083129462249
],
[
2594.9666662674313 ,
757.4657929961453 ,
-19.54083129462249
]
]
}
],
"points" : [
[
2566.571924017235 ,
746.7817289698219 ,
-15.269245470863748 ,
76.5 ,
127.5 ,
89.46617199365393
],
[
2566.592983606823 ,
746.6791987335685 ,
-15.275803826279521 ,
76.5 ,
127.5 ,
89.45471117247024
],
[
2566.616361739416 ,
746.4903185513501 ,
-15.28628929674075 ,
76.5 ,
127.5 ,
89.41336375503832
]
],
"type" : "lidar/beta"
}
NumPy配列
上記で定義された配列フォーマット を使用して、numpy
配列を直接 the from_numpy
method でポイントクラウドを定義できます。
run. log({"my_cloud_from_numpy_xyz" : wandb. Object3D. from_numpy(
np. array(
[
[0.4 , 1 , 1.3 ], # x, y, z
[1 , 1 , 1 ],
[1.2 , 1 , 1.2 ]
]
)
)})
run. log({"my_cloud_from_numpy_cat" : wandb. Object3D. from_numpy(
np. array(
[
[0.4 , 1 , 1.3 , 1 ], # x, y, z, カテゴリ
[1 , 1 , 1 , 1 ],
[1.2 , 1 , 1.2 , 12 ],
[1.2 , 1 , 1.3 , 12 ],
[1.2 , 1 , 1.4 , 12 ],
[1.2 , 1 , 1.5 , 12 ],
[1.2 , 1 , 1.6 , 11 ],
[1.2 , 1 , 1.7 , 11 ],
]
)
)})
run. log({"my_cloud_from_numpy_rgb" : wandb. Object3D. from_numpy(
np. array(
[
[0.4 , 1 , 1.3 , 255 , 0 , 0 ], # x, y, z, r, g, b
[1 , 1 , 1 , 0 , 255 , 0 ],
[1.2 , 1 , 1.3 , 0 , 255 , 255 ],
[1.2 , 1 , 1.4 , 0 , 255 , 255 ],
[1.2 , 1 , 1.5 , 0 , 0 , 255 ],
[1.2 , 1 , 1.1 , 0 , 0 , 255 ],
[1.2 , 1 , 0.9 , 0 , 0 , 255 ],
]
)
)})
wandb. log({"protein" : wandb. Molecule("6lu7.pdb" )})
分子データはpdb
、pqr
、mmcif
、mcif
、cif
、sdf
、sd
、gro
、mol2
、mmtf.
のいずれかの10のファイル形式でログできます。
W&Bはまた、SMILES文字列、rdkit
のmol
ファイル、rdkit.Chem.rdchem.Mol
オブジェクトからの分子データのログをサポートします。
resveratrol = rdkit. Chem. MolFromSmiles("Oc1ccc(cc1)C=Cc1cc(O)cc(c1)O" )
wandb. log(
{
"resveratrol" : wandb. Molecule. from_rdkit(resveratrol),
"green fluorescent protein" : wandb. Molecule. from_rdkit("2b3p.mol" ),
"acetaminophen" : wandb. Molecule. from_smiles("CC(=O)Nc1ccc(O)cc1" ),
}
)
runが終了すると、UIで分子の3D可視化と対話できるようになります。
AlphaFoldを使用したライブ例を見る
PNG 画像
wandb.Image
はnumpy
配列やPILImage
のインスタンスをデフォルトでPNGに変換します。
wandb. log({"example" : wandb. Image(... )})
# または複数の画像
wandb. log({"example" : [wandb. Image(... ) for img in images]})
ビデオ
ビデオはwandb.Video
データ型を使用してログします:
wandb. log({"example" : wandb. Video("myvideo.mp4" )})
現在、メディアブラウザでビデオを見ることができます。 プロジェクトワークスペース、runワークスペース、またはレポートに移動し、Add visualization をクリックしてリッチメディアパネルを追加します。
分子の2Dビュー
wandb.Image
データ型とrdkit
を使用して分子の2Dビューをログできます:
molecule = rdkit. Chem. MolFromSmiles("CC(=O)O" )
rdkit. Chem. AllChem. Compute2DCoords(molecule)
rdkit. Chem. AllChem. GenerateDepictionMatching2DStructure(molecule, molecule)
pil_image = rdkit. Chem. Draw. MolToImage(molecule, size= (300 , 300 ))
wandb. log({"acetic_acid" : wandb. Image(pil_image)})
その他のメディア
W&Bは、さまざまな他のメディアタイプのログもサポートしています。
オーディオ
wandb. log({"whale songs" : wandb. Audio(np_array, caption= "OooOoo" , sample_rate= 32 )})
1ステップあたりの最大100のオーディオクリップをログできます。詳細な使い方については、audio-file
を参照してください。
ビデオ
wandb. log({"video" : wandb. Video(numpy_array_or_path_to_video, fps= 4 , format= "gif" )})
numpy配列が供給された場合、時間、チャンネル、幅、高さの順であると仮定します。 デフォルトでは4fpsのgif画像を作成します(numpyオブジェクトを渡す場合、ffmpeg
とmoviepy
pythonライブラリが必要です)。 サポートされているフォーマットは、"gif"
、"mp4"
、"webm"
、そして"ogg"
です。wandb.Video
に文字列を渡すと、ファイルが存在し、wandbにアップロードする前にサポートされたフォーマットであることを確認します。 BytesIO
オブジェクトを渡すと、指定されたフォーマットを拡張子とする一時ファイルを作成します。
W&BのRun とProject ページで、メディアセクションにビデオが表示されます。
詳細な使い方については、video-file
を参照してください。
テキスト
wandb.Table
を使用して、UIに表示するテーブルにテキストをログします。デフォルトで、列ヘッダーは["Input", "Output", "Expected"]
です。最適なUIパフォーマンスを確保するために、デフォルトで最大行数は10,000に設定されています。ただし、ユーザーはwandb.Table.MAX_ROWS = {DESIRED_MAX}
を使用して明示的に上限を超えることができます。
columns = ["Text" , "Predicted Sentiment" , "True Sentiment" ]
# メソッド 1
data = [["I love my phone" , "1" , "1" ], ["My phone sucks" , "0" , "-1" ]]
table = wandb. Table(data= data, columns= columns)
wandb. log({"examples" : table})
# メソッド 2
table = wandb. Table(columns= columns)
table. add_data("I love my phone" , "1" , "1" )
table. add_data("My phone sucks" , "0" , "-1" )
wandb. log({"examples" : table})
また、pandas DataFrame
オブジェクトを渡すこともできます。
table = wandb. Table(dataframe= my_dataframe)
詳細な使い方については、string
を参照してください。
HTML
wandb. log({"custom_file" : wandb. Html(open("some.html" ))})
wandb. log({"custom_string" : wandb. Html('<a href="https://mysite">Link</a>' )})
カスタムHTMLは任意のキーでログ可能で、runページ上にHTMLパネルを接続します。デフォルトではスタイルが注入されます。デフォルトスタイルをオフにするには、inject=False
を渡します。
wandb. log({"custom_file" : wandb. Html(open("some.html" ), inject= False )})
詳細な使い方については、html-file
を参照してください。
7.2 - モデルをログする
モデルをログする
以下のガイドでは、W&B run にモデルをログし、それと対話する方法を説明します。
以下の API は、実験管理ワークフローの一環としてモデルを追跡するのに便利です。このページに記載されている API を使用して、run にモデルをログし、メトリクス、テーブル、メディア、その他のオブジェクトにアクセスします。
モデル以外にも、データセットやプロンプトなど、シリアライズされたデータの異なるバージョンを作成し追跡したい場合は、W&B Artifacts を使用することをお勧めします。
モデルやその他のオブジェクトを W&B で追跡するための リネージグラフ を探索します。
これらのメソッドで作成されたモデル アーティファクトとの対話(プロパティの更新、メタデータ、エイリアス、説明など)を行います。
W&B Artifacts や高度なバージョン管理ユースケースの詳細については、Artifacts ドキュメントをご覧ください。
モデルを run にログする
log_model
を使用して、指定したディレクトリ内にコンテンツを含むモデルアーティファクトをログします。 log_model
メソッドは、結果のモデルアーティファクトを W&B run の出力としてもマークします。
モデルを W&B run の入力または出力としてマークすると、モデルの依存関係とモデルの関連付けを追跡できます。W&B アプリ UI 内でモデルのリネージを確認します。詳細については、Artifacts チャプターの アーティファクトグラフを探索して移動する ページを参照してください。
モデルファイルが保存されているパスを path
パラメータに指定します。パスには、ローカルファイル、ディレクトリ、または s3://bucket/path
などの外部バケットへの 参照 URI を指定できます。
<>
内に囲まれた値を自分のもので置き換えることを忘れないでください。
import wandb
W&B run を初期化
run = wandb.init(project="", entity="")
モデルをログする
run.log_model(path="", name="")
オプションで、name
パラメータにモデルアーティファクトの名前を指定できます。name
が指定されていない場合、W&B は入力パスのベース名に run ID をプレフィックスとして使用して名前を生成します。
モデルに W&B が割り当てた
name
またはユーザーが指定した
name
を追跡してください。モデルのパスを取得するには、
use_model
メソッドでモデルの名前が必要です。
log_model
の詳細については、API リファレンスガイドを参照してください。
例: モデルを run にログする
import os
import wandb
from tensorflow import keras
from tensorflow.keras import layers
config = {"optimizer" : "adam" , "loss" : "categorical_crossentropy" }
# W&B run を初期化
run = wandb. init(entity= "charlie" , project= "mnist-experiments" , config= config)
# ハイパーパラメーター
loss = run. config["loss" ]
optimizer = run. config["optimizer" ]
metrics = ["accuracy" ]
num_classes = 10
input_shape = (28 , 28 , 1 )
# トレーニング アルゴリズム
model = keras. Sequential(
[
layers. Input(shape= input_shape),
layers. Conv2D(32 , kernel_size= (3 , 3 ), activation= "relu" ),
layers. MaxPooling2D(pool_size= (2 , 2 )),
layers. Conv2D(64 , kernel_size= (3 , 3 ), activation= "relu" ),
layers. MaxPooling2D(pool_size= (2 , 2 )),
layers. Flatten(),
layers. Dropout(0.5 ),
layers. Dense(num_classes, activation= "softmax" ),
]
)
# トレーニング用のモデルを設定
model. compile(loss= loss, optimizer= optimizer, metrics= metrics)
# モデルを保存
model_filename = "model.h5"
local_filepath = "./"
full_path = os. path. join(local_filepath, model_filename)
model. save(filepath= full_path)
# モデルを W&B run にログする
run. log_model(path= full_path, name= "MNIST" )
run. finish()
ユーザーが log_model
を呼び出したとき、MNIST
という名前のモデルアーティファクトが作成され、ファイル model.h5
がモデルアーティファクトに追加されました。あなたのターミナルまたはノートブックは、モデルがログされた run に関する情報を見つける場所についての情報を出力します。
View run different- surf- 5 at: https:// wandb. ai/ charlie/ mnist- experiments/ runs/ wlby6fuw
Synced 5 W& B file(s), 0 media file(s), 1 artifact file(s) and 0 other file(s)
Find logs at: ./ wandb/ run- 20231206_103511 - wlby6fuw/ logs
ログされたモデルをダウンロードして使用する
以前に W&B run にログされたモデルファイルにアクセスしてダウンロードするには、use_model
関数を使用します。
取得したいモデルファイルが保存されているモデルアーティファクトの名前を指定します。提供した名前は、既存のログされたモデルアーティファクトの名前と一致している必要があります。
最初に log_model
でファイルをログした際に name
を定義しなかった場合、割り当てられたデフォルト名は、入力パスのベース名にrun ID をプレフィックスとして付けたものになります。
<>
内に囲まれた他の値を自分のもので置き換えることを忘れないでください。
import wandb
# run を初期化
run = wandb. init(project= "<your-project>" , entity= "<your-entity>" )
# モデルにアクセスしてダウンロードする。ダウンロードされたアーティファクトのパスが返されます
downloaded_model_path = run. use_model(name= "<your-model-name>" )
use_model
関数は、ダウンロードされたモデルファイルのパスを返します。このパスを追跡して、後でこのモデルにリンクしたい場合に備えてください。上記のコードスニペットでは、返されたパスが downloaded_model_path
という変数に保存されています。
例: ログされたモデルをダウンロードして使用する
たとえば、以下のコードスニペットでは、ユーザーが use_model
API を呼び出しています。彼らは取得したいモデルアーティファクトの名前を指定し、またバージョン/エイリアスも提供しています。そして、API から返されるパスを downloaded_model_path
変数に保存しました。
import wandb
entity = "luka"
project = "NLP_Experiments"
alias = "latest" # モデルバージョンのセマンティックなニックネームまたは識別子
model_artifact_name = "fine-tuned-model"
# run を初期化
run = wandb. init(project= project, entity= entity)
# モデルにアクセスしてダウンロードする。ダウンロードされたアーティファクトのパスが返されます
downloaded_model_path = run. use_model(name = f " { model_artifact_name} : { alias} " )
use_model
API リファレンスガイドでは、利用可能なパラメータや返り値の型についての詳細情報が記載されています。
モデルを W&B モデルレジストリにログしリンクする
link_model
メソッドは、現在のところレガシー W&B モデルレジストリとしか互換性がありませんが、これは間もなく廃止される予定です。モデルアーティファクトを新しいバージョンのモデルレジストリにリンクする方法については、レジストリの
ドキュメント をご覧ください。
link_model
メソッドを使用して、モデルファイルを W&B run にログし、それを W&B モデルレジストリ にリンクします。登録されたモデルが存在しない場合、W&B は registered_model_name
パラメータにあなたが提供した名前で新しいものを作成します。
モデルをリンクすることは、他のチームメンバーが視聴および利用できる中央集権的なチームのリポジトリにモデルを「ブックマーク」または「公開」することに類似しています。
モデルをリンクすると、そのモデルは Registry に重複されることも、プロジェクトから移動してレジストリに入れられることもありません。リンクされたモデルは、プロジェクト内の元のモデルへのポインターです。
Registry を使用して、タスクごとに最高のモデルを整理したり、モデルのライフサイクルを管理したり、MLライフサイクル全体での追跡や監査を容易にしたり、Webhooks やジョブでの下流アクションを自動化 することができます。
Registered Model は、Model Registry にリンクされたモデルバージョンのコレクションまたはフォルダーです。登録されたモデルは通常、単一のモデリングユースケースまたはタスクの候補モデルを表します。
以下のコードスニペットは、link_model
API を使用してモデルをリンクする方法を示しています。<>
内に囲まれた他の値を自分のもので置き換えることを忘れないでください。
import wandb
run = wandb. init(entity= "<your-entity>" , project= "<your-project>" )
run. link_model(path= "<path-to-model>" , registered_model_name= "<registered-model-name>" )
run. finish()
link_model
API リファレンスガイドでは、オプションのパラメータに関する詳細情報が記載されています。
registered-model-name
が Model Registry 内に既に存在する登録済みのモデル名と一致する場合、そのモデルはその登録済みモデルにリンクされます。そのような登録済みモデルが存在しない場合、新しいものが作成され、そのモデルが最初にリンクされます。
例えば、既に Model Registry に “Fine-Tuned-Review-Autocompletion"という名前の登録済みモデルが存在し、いくつかのモデルバージョンが既にリンクされていると仮定します: v0, v1, v2。link_model
を registered-model-name="Fine-Tuned-Review-Autocompletion"
を使用して呼び出した場合、新しいモデルは既存の登録済みモデルに v3 としてリンクされます。この名前の登録済みモデルが存在しない場合、新しいものが作成され、新しいモデルが v0 としてリンクされます。
例: モデルを W&B モデルレジストリにログしリンクする
例えば、以下のコードスニペットでは、モデルファイルをログし、登録済みのモデル名 "Fine-Tuned-Review-Autocompletion"
にモデルをリンクする方法を示しています。
これを行うために、ユーザーは link_model
API を呼び出します。API を呼び出す際に、モデルの内容を示すローカルファイルパス (path
) と、リンクするための登録済みモデルの名前 (registered_model_name
) を提供します。
import wandb
path = "/local/dir/model.pt"
registered_model_name = "Fine-Tuned-Review-Autocompletion"
run = wandb. init(project= "llm-evaluation" , entity= "noa" )
run. link_model(path= path, registered_model_name= registered_model_name)
run. finish()
リマインダー: 登録済みモデルは、ブックマークされたモデルバージョンのコレクションを管理します。
7.3 - ログ テーブル
W&B でテーブルをログします。
wandb.Table
を使って、データをログに記録し W&B で視覚化・クエリできるようにします。このガイドでは次のことを学びます:
テーブルを作成する
データを追加する
データを取得する
テーブルを保存する
テーブルを作成する
Table(テーブル)を定義するには、各データ行に表示したい列を指定します。各行はトレーニングデータセットの単一の項目、トレーニング中の特定のステップやエポック、テスト項目でのモデルの予測、モデルが生成したオブジェクトなどです。各列には固定の型があり、数値、テキスト、ブール値、画像、ビデオ、オーディオなどがあります。あらかじめ型を指定する必要はありません。各列に名前を付け、その型のデータのみをその列のインデックスに渡してください。より詳細な例については、このレポート を参照してください。
wandb.Table
コンストラクタを次の2つの方法のいずれかで使用します:
行のリスト: 名前付きの列とデータの行をログに記録します。例えば、次のコードスニペットは 2 行 3 列のテーブルを生成します:
wandb. Table(columns= ["a" , "b" , "c" ], data= [["1a" , "1b" , "1c" ], ["2a" , "2b" , "2c" ]])
Pandas DataFrame: wandb.Table(dataframe=my_df)
を使用して DataFrame をログに記録します。列の名前は DataFrame から抽出されます。
既存の配列またはデータフレームから
# モデルが4つの画像で予測を返したと仮定します
# 次のフィールドが利用可能です:
# - 画像ID
# - 画像ピクセル(wandb.Image() でラップ)
# - モデルの予測ラベル
# - 正解ラベル
my_data = [
[0 , wandb. Image("img_0.jpg" ), 0 , 0 ],
[1 , wandb. Image("img_1.jpg" ), 8 , 0 ],
[2 , wandb. Image("img_2.jpg" ), 7 , 1 ],
[3 , wandb. Image("img_3.jpg" ), 1 , 1 ],
]
# 対応する列で wandb.Table() を作成
columns = ["id" , "image" , "prediction" , "truth" ]
test_table = wandb. Table(data= my_data, columns= columns)
データを追加する
Tables は可変です。スクリプトが実行中に最大 200,000 行までテーブルにデータを追加できます。テーブルにデータを追加する方法は2つあります:
行を追加する : table.add_data("3a", "3b", "3c")
。新しい行はリストとして表現されないことに注意してください。行がリスト形式の場合は *
を使ってリストを位置引数に展開します: table.add_data(*my_row_list)
。行にはテーブルの列数と同じ数のエントリが含まれている必要があります。
列を追加する : table.add_column(name="col_name", data=col_data)
。col_data
の長さは現在のテーブルの行数と同じである必要があります。ここで col_data
はリストデータや NumPy NDArray でも構いません。
データを段階的に追加する
このコードサンプルは、次第に W&B テーブルを作成し、データを追加する方法を示しています。信頼度スコアを含む事前定義された列でテーブルを定義し、推論中に行ごとにデータを追加します。また、run を再開するときにテーブルにデータを段階的に追加 することもできます。
# 各ラベルの信頼度スコアを含むテーブルの列を定義
columns = ["id" , "image" , "guess" , "truth" ]
for digit in range(10 ): # 各数字 (0-9) に対する信頼度スコア列を追加
columns. append(f "score_ { digit} " )
# 定義された列でテーブルを初期化
test_table = wandb. Table(columns= columns)
# テストデータセットを通過し、データを行ごとにテーブルに追加
# 各行は画像 ID、画像、予測されたラベル、正解ラベル、信頼度スコアを含みます
for img_id, img in enumerate(mnist_test_data):
true_label = mnist_test_data_labels[img_id] # 正解ラベル
guess_label = my_model. predict(img) # 予測ラベル
test_table. add_data(
img_id, wandb. Image(img), guess_label, true_label
) # テーブルに行データを追加
Run を再開した際にデータを追加
再開した Run において、既存のテーブルをアーティファクトから読み込み、最後のデータ行を取得して、更新されたメトリクスを追加することで W&B テーブルを段階的に更新できます。次に、互換性を保つためにテーブルを再初期化し、更新されたバージョンを W&B に再度ログに記録します。
# アーティファクトから既存のテーブルを読み込む
best_checkpt_table = wandb. use_artifact(table_tag). get(table_name)
# 再開のためにテーブルの最後のデータ行を取得
best_iter, best_metric_max, best_metric_min = best_checkpt_table. data[- 1 ]
# 必要に応じて最高のメトリクスを更新
# テーブルに更新されたデータを追加
best_checkpt_table. add_data(best_iter, best_metric_max, best_metric_min)
# 更新されたデータでテーブルを再初期化し、互換性を確保
best_checkpt_table = wandb. Table(
columns= ["col1" , "col2" , "col3" ], data= best_checkpt_table. data
)
# 更新されたテーブルを Weights & Biases にログする
wandb. log({table_name: best_checkpt_table})
データを取得する
データが Table にあるとき、列または行ごとにアクセスできます:
行イテレータ : ユーザーは Table の行イテレータを利用して、for ndx, row in table.iterrows(): ...
のようにデータの行を効率的に反復処理できます。
列を取得する : ユーザーは table.get_column("col_name")
を使用してデータの列を取得できます。convert_to="numpy"
を渡すと、列を NumPy のプリミティブ NDArray に変換できます。これは、列に wandb.Image
などのメディアタイプが含まれている場合に、基になるデータに直接アクセスするのに便利です。
テーブルを保存する
スクリプトでモデルの予測のテーブルなどのデータを生成した後、それを W&B に保存して結果をリアルタイムで視覚化します。
Run にテーブルをログする
wandb.log()
を使用してテーブルを Run に保存します:
run = wandb. init()
my_table = wandb. Table(columns= ["a" , "b" ], data= [["1a" , "1b" ], ["2a" , "2b" ]])
run. log({"table_key" : my_table})
同じキーにテーブルがログに記録されるたびに、新しいバージョンのテーブルが作成され、バックエンドに保存されます。これにより、複数のトレーニングステップにわたって同じテーブルをログに記録し、モデルの予測がどのように向上するかを確認したり、異なる Run 間でテーブルを比較したりすることができます。同じテーブルに最大 200,000 行までログに記録できます。
200,000 行以上をログに記録するには、以下のように制限をオーバーライドできます:
wandb.Table.MAX_ARTIFACT_ROWS = X
ただし、これにより UI でのクエリの速度低下などのパフォーマンス問題が発生する可能性があります。
プログラムによるテーブルへのアクセス
バックエンドでは、Tables は Artifacts として保存されています。特定のバージョンにアクセスする場合は、artifact API を使用して行うことができます:
with wandb. init() as run:
my_table = run. use_artifact("run-<run-id>-<table-name>:<tag>" ). get("<table-name>" )
Artifacts の詳細については、デベロッパーガイドの Artifacts チャプター を参照してください。
テーブルを視覚化する
この方法でログに記録されたテーブルは、Run ページと Project ページの両方でワークスペースに表示されます。詳細については、テーブルの視覚化と分析 を参照してください。
アーティファクトテーブル
artifact.add()
を使用して、テーブルをワークスペースの代わりに Run の Artifacts セクションにログします。これは、データセットを1回ログに記録し、今後の Run のために参照したい場合に役立ちます。
run = wandb. init(project= "my_project" )
# 各重要なステップのために wandb Artifact を作成
test_predictions = wandb. Artifact("mnist_test_preds" , type= "predictions" )
# [上記のように予測データを構築]
test_table = wandb. Table(data= data, columns= columns)
test_predictions. add(test_table, "my_test_key" )
run. log_artifact(test_predictions)
画像データを使用した artifact.add()
の詳細な例については、この Colab を参照してください: 画像データを使った artifact.add() の詳細な例 また Artifacts と Tables を使ったバージョン管理と重複排除データの例 に関してはこのレポートを参照してください。
アーティファクトテーブルを結合する
wandb.JoinedTable(table_1, table_2, join_key)
を使用して、ローカルに構築したテーブルや他のアーティファクトから取得したテーブルを結合できます。
引数
説明
table_1
(str, wandb.Table
, ArtifactEntry) アーティファクト内の wandb.Table
へのパス、テーブルオブジェクト、または ArtifactEntry
table_2
(str, wandb.Table
, ArtifactEntry) アーティファクト内の wandb.Table
へのパス、テーブルオブジェクト、または ArtifactEntry
join_key
(str, [str, str]) 結合を行うキーまたはキーのリスト
以前にアーティファクトコンテキストでログに記録した2つのテーブルを結合するには、アーティファクトからそれらを取得し、新しいテーブルに結合した結果を格納します。この例では、'original_songs'
という名前のオリジナルの曲のテーブルと 'synth_songs'
という名前の同じ曲の合成バージョンのテーブルを結合する方法を示しています。以下のコード例は 2 つのテーブルを "song_id"
で結合し、結果のテーブルを新しい W&B テーブルとしてアップロードします:
import wandb
run = wandb. init(project= "my_project" )
# オリジナルの曲のテーブルを取得
orig_songs = run. use_artifact("original_songs:latest" )
orig_table = orig_songs. get("original_samples" )
# 合成曲のテーブルを取得
synth_songs = run. use_artifact("synth_songs:latest" )
synth_table = synth_songs. get("synth_samples" )
# "song_id" でテーブルを結合
join_table = wandb. JoinedTable(orig_table, synth_table, "song_id" )
join_at = wandb. Artifact("synth_summary" , "analysis" )
# テーブルをアーティファクトに追加し W&B にログする
join_at. add(join_table, "synth_explore" )
run. log_artifact(join_at)
このチュートリアルを読む と、異なるアーティファクトオブジェクトに保存された 2 つのテーブルを組み合わせる方法の例が示されています。
7.4 - ログサマリーメトリクス
時間とともに変化する値に加えて、モデルや前処理ステップを要約する単一の値を追跡することも重要です。この情報を W&B Run の summary
辞書にログします。Run の summary 辞書は numpy 配列、PyTorch テンソル、TensorFlow テンソルを扱うことができます。値がこれらのタイプのいずれかの場合、バイナリファイルにテンソル全体を保存し、メトリクスを summary オブジェクトに保存します。たとえば最小値、平均、分散、パーセンタイルなどです。
最後に wandb.log
でログされた値は、自動的に W&B Run の summary 辞書に設定されます。summary メトリクス辞書が変更されると、以前の値は失われます。
次のコードスニペットは、W&B にカスタムの summary メトリクスを提供する方法を示しています。
wandb. init(config= args)
best_accuracy = 0
for epoch in range(1 , args. epochs + 1 ):
test_loss, test_accuracy = test()
if test_accuracy > best_accuracy:
wandb. summary["best_accuracy" ] = test_accuracy
best_accuracy = test_accuracy
トレーニングが完了した後、既存の W&B Run の summary 属性を更新することができます。W&B Public API を使用して、summary 属性を更新してください。
api = wandb. Api()
run = api. run("username/project/run_id" )
run. summary["tensor" ] = np. random. random(1000 )
run. summary. update()
summary メトリクスをカスタマイズする
カスタム summary メトリクスは、トレーニングにおける最良のステップでのモデルのパフォーマンスを wandb.summary
にキャプチャするのに便利です。たとえば、最終的な値の代わりに、最大精度や最小損失値をキャプチャしたいかもしれません。
デフォルトでは、summary は履歴からの最終的な値を使用します。summary メトリクスをカスタマイズするには、define_metric
の中に summary
引数を渡します。以下の値を受け付けます。
"min"
"max"
"mean"
"best"
"last"
"none"
"best"
を使用するには、任意の objective
引数を "minimize"
または "maximize"
に設定する必要があります。
次の例は、損失と精度の最小値と最大値を summary に追加する方法を示しています。
import wandb
import random
random. seed(1 )
wandb. init()
# 損失の最小値および最大値を summary に追加
wandb. define_metric("loss" , summary= "min" )
wandb. define_metric("loss" , summary= "max" )
# 精度の最小値および最大値を summary に追加
wandb. define_metric("acc" , summary= "min" )
wandb. define_metric("acc" , summary= "max" )
for i in range(10 ):
log_dict = {
"loss" : random. uniform(0 , 1 / (i + 1 )),
"acc" : random. uniform(1 / (i + 1 ), 1 ),
}
wandb. log(log_dict)
summary メトリクスを閲覧する
Run の Overview ページまたはプロジェクトの runs テーブルで summary 値を表示することができます。
Run Overview
Run Table
W&B Public API
W&B アプリに移動します。
Workspace タブを選択します。
runs のリストから、summary 値をログした run の名前をクリックします。
Overview タブを選択します。
Summary セクションで summary 値を表示します。
W&B アプリに移動します。
Runs タブを選択します。
runs テーブル内で、summary 値の名前に基づいて列内の summary 値を表示することができます。
W&B Public API を使用して、run の summary 値を取得することができます。
次のコード例は、W&B Public API と pandas を使用して特定の run にログされた summary 値を取得する方法の一例を示しています。
import wandb
import pandas
entity = "<your-entity>"
project = "<your-project>"
run_name = "<your-run-name>" # summary 値を持つ run の名前
all_runs = []
for run in api. runs(f " { entity} / { project_name} " ):
print("Fetching details for run: " , run. id, run. name)
run_data = {
"id" : run. id,
"name" : run. name,
"url" : run. url,
"state" : run. state,
"tags" : run. tags,
"config" : run. config,
"created_at" : run. created_at,
"system_metrics" : run. system_metrics,
"summary" : run. summary,
"project" : run. project,
"entity" : run. entity,
"user" : run. user,
"path" : run. path,
"notes" : run. notes,
"read_only" : run. read_only,
"history_keys" : run. history_keys,
"metadata" : run. metadata,
}
all_runs. append(run_data)
# DataFrame に変換
df = pd. DataFrame(all_runs)
# 列名(run)に基づいて行を取得し、辞書に変換
df[df['name' ]== run_name]. summary. reset_index(drop= True ). to_dict()
7.5 - ログ軸をカスタマイズする
define_metric
を使用してカスタム x 軸 を設定します。 カスタム x 軸は、トレーニング中に過去の異なるタイムステップに非同期でログを記録する必要がある場合に便利です。たとえば、RL ではエピソードごとの報酬やステップごとの報酬を追跡する場合に役立ちます。
Google Colab で define_metric
を試す →
軸をカスタマイズする
デフォルトでは、すべてのメトリクスは同じ x 軸に対してログが記録されます。これは、 W&B 内部の step
です。時には、以前のステップにログを記録したい場合や、別の x 軸を使用したい場合があります。
以下は、デフォルトのステップの代わりにカスタムの x 軸メトリクスを設定する例です。
import wandb
wandb. init()
# カスタム x 軸メトリクスを定義
wandb. define_metric("custom_step" )
# どのメトリクスがそれに対してプロットされるかを定義
wandb. define_metric("validation_loss" , step_metric= "custom_step" )
for i in range(10 ):
log_dict = {
"train_loss" : 1 / (i + 1 ),
"custom_step" : i** 2 ,
"validation_loss" : 1 / (i + 1 ),
}
wandb. log(log_dict)
x 軸はグロブを使用して設定することもできます。現在、文字列のプレフィックスを持つグロブのみが使用可能です。次の例では、プレフィックス "train/"
を持つすべてのログされたメトリクスを、x 軸 "train/step"
にプロットします:
import wandb
wandb. init()
# カスタム x 軸メトリクスを定義
wandb. define_metric("train/step" )
# 他のすべての train/ メトリクスをこのステップに使用するように設定
wandb. define_metric("train/*" , step_metric= "train/step" )
for i in range(10 ):
log_dict = {
"train/step" : 2 ** i, # W&B 内部ステップと指数的な成長
"train/loss" : 1 / (i + 1 ), # x 軸は train/step
"train/accuracy" : 1 - (1 / (1 + i)), # x 軸は train/step
"val/loss" : 1 / (1 + i), # x 軸は内部 wandb ステップ
}
wandb. log(log_dict)
7.6 - 実験からプロットを作成して追跡する
機械学習実験からプロットを作成し、追跡する。
Using the methods in wandb.plot
, you can track charts with wandb.log
, including charts that change over time during training. To learn more about our custom charting framework, check out this guide .
Basic charts
これらのシンプルなチャートにより、メトリクスと結果の基本的な可視化を簡単に構築できます。
Line
Scatter
Bar
Histogram
Multi-line
wandb.plot.line()
カスタムなラインプロット、任意の軸上で順序付けられたポイントのリストをログします。
data = [[x, y] for (x, y) in zip(x_values, y_values)]
table = wandb. Table(data= data, columns= ["x" , "y" ])
wandb. log(
{
"my_custom_plot_id" : wandb. plot. line(
table, "x" , "y" , title= "Custom Y vs X Line Plot"
)
}
)
これは任意の2次元軸に曲線をログするために使用できます。二つの値のリストをプロットする場合、リスト内の値の数は正確に一致する必要があります。例えば、それぞれのポイントはxとyを持っている必要があります。
See in the app
Run the code
wandb.plot.scatter()
カスタムな散布図をログします—任意の軸xとy上のポイント(x, y)のリスト。
data = [[x, y] for (x, y) in zip(class_x_scores, class_y_scores)]
table = wandb. Table(data= data, columns= ["class_x" , "class_y" ])
wandb. log({"my_custom_id" : wandb. plot. scatter(table, "class_x" , "class_y" )})
これは任意の2次元軸に散布ポイントをログするために使用できます。二つの値のリストをプロットする場合、リスト内の値の数は正確に一致する必要があります。例えば、それぞれのポイントはxとyを持っている必要があります。
See in the app
Run the code
wandb.plot.bar()
カスタムな棒グラフをログします—数行でバーとしてラベル付けされた値のリストをネイティブに:
data = [[label, val] for (label, val) in zip(labels, values)]
table = wandb. Table(data= data, columns= ["label" , "value" ])
wandb. log(
{
"my_bar_chart_id" : wandb. plot. bar(
table, "label" , "value" , title= "Custom Bar Chart"
)
}
)
これは任意の棒グラフをログするために使用できます。リスト内のラベルと値の数は正確に一致する必要があります。それぞれのデータポイントは両方を持たなければなりません。
See in the app
Run the code
wandb.plot.histogram()
カスタムなヒストグラムをログします—発生のカウント/頻度でリスト内の値をビンへソートします—数行でネイティブに。予測信頼度スコア(scores
)のリストがあって、その分布を可視化したいとします。
data = [[s] for s in scores]
table = wandb. Table(data= data, columns= ["scores" ])
wandb. log({"my_histogram" : wandb. plot. histogram(table, "scores" , title= "Histogram" )})
これは任意のヒストグラムをログするために使用できます。data
はリストのリストで、行と列の2次元配列をサポートすることを意図しています。
See in the app
Run the code
wandb.plot.line_series()
複数の線、または複数の異なるx-y座標ペアのリストを一つの共有x-y軸上にプロットします:
wandb. log(
{
"my_custom_id" : wandb. plot. line_series(
xs= [0 , 1 , 2 , 3 , 4 ],
ys= [[10 , 20 , 30 , 40 , 50 ], [0.5 , 11 , 72 , 3 , 41 ]],
keys= ["metric Y" , "metric Z" ],
title= "Two Random Metrics" ,
xname= "x units" ,
)
}
)
xとyのポイントの数は正確に一致する必要があることに注意してください。複数のy値のリストに合ったx値のリストを一つ提供することも、または各y値のリストに対して個別のx値のリストを提供することもできます。
See in the app
Model evaluation charts
これらのプリセットチャートは、wandb.plot
メソッド内蔵で、スクリプトからチャートを直接ログして、UIで正確に確認したい情報をすぐに把握できます。
Precision-recall curves
ROC curves
Confusion matrix
wandb.plot.pr_curve()
Precision-Recall curve を1行で作成します:
wandb. log({"pr" : wandb. plot. pr_curve(ground_truth, predictions)})
コードが以下のものにアクセスできるときに、これをログできます:
一連の例に対するモデルの予測スコア(predictions
)
それらの例に対応する正解ラベル(ground_truth
)
(オプションで)ラベル/クラス名のリスト(labels=["cat", "dog", "bird"...]
で、ラベルインデックスが0はcat、1はdog、2はbirdを意味するなど)
(オプションで)プロットで可視化するラベルのサブセット
See in the app
Run the code
wandb.plot.roc_curve()
ROC curve を1行で作成します:
wandb. log({"roc" : wandb. plot. roc_curve(ground_truth, predictions)})
コードが以下のものにアクセスできるときに、これをログできます:
一連の例に対するモデルの予測スコア(predictions
)
それらの例に対応する正解ラベル(ground_truth
)
(オプションで)ラベル/クラス名のリスト(labels=["cat", "dog", "bird"...]
で、ラベルインデックスが0はcat、1はdog、2はbirdを意味するなど)
(オプションで)プロットで可視化するラベルのサブセット(まだリスト形式)
See in the app
Run the code
wandb.plot.confusion_matrix()
マルチクラスの混同行列 を1行で作成します:
cm = wandb. plot. confusion_matrix(
y_true= ground_truth, preds= predictions, class_names= class_names
)
wandb. log({"conf_mat" : cm})
コードが以下のものにアクセスできるときに、これをログできます:
一連の例に対するモデルの予測ラベル(preds
)または正規化された確率スコア(probs
)。確率は(例の数、クラスの数)という形でなければなりません。確率または予測のどちらでも良いですが両方を提供することはできません。
それらの例に対応する正解ラベル(y_true
)
文字列のラベル/クラス名のフルリスト(例:class_names=["cat", "dog", "bird"]
で、インデックス0がcat
、1がdog
、2がbird
である場合)
See in the app
Run the code
Interactive custom charts
完全なカスタマイズを行う場合、内蔵のCustom Chart preset を調整するか、新しいプリセットを作成し、チャートを保存します。チャートIDを使用して、そのカスタムプリセットに直接スクリプトからデータをログします。
# 作成したい列を持つテーブルを作成
table = wandb. Table(data= data, columns= ["step" , "height" ])
# テーブルの列からチャートのフィールドへマップ
fields = {"x" : "step" , "value" : "height" }
# 新しいカスタムチャートプリセットにテーブルを使用
# 自分の保存したチャートプリセットを使用するには、vega_spec_nameを変更
# タイトルを編集するには、string_fieldsを変更
my_custom_chart = wandb. plot_table(
vega_spec_name= "carey/new_chart" ,
data_table= table,
fields= fields,
string_fields= {"title" : "Height Histogram" },
)
Run the code
Matplotlib and Plotly plots
W&BのCustom Charts をwandb.plot
で使用する代わりに、matplotlib やPlotly で生成されたチャートをログすることができます。
import matplotlib.pyplot as plt
plt. plot([1 , 2 , 3 , 4 ])
plt. ylabel("some interesting numbers" )
wandb. log({"chart" : plt})
matplotlib
プロットまたは図オブジェクトをwandb.log()
に渡すだけです。デフォルトでは、プロットをPlotly プロットに変換します。プロットを画像としてログしたい場合はwandb.Image
にプロットを渡すことができます。Plotlyチャートを直接受け入れることもできます。
「空のプロットをログしようとしました」というエラーが発生した場合は、プロットとは別に図をfig = plt.figure()
として保存してから、wandb.log
でfig
をログできます。
Log custom HTML to W&B Tables
W&Bでは、PlotlyやBokehからインタラクティブなチャートをHTMLとしてログし、Tablesに追加することをサポートしています。
インタラクティブなPlotlyチャートをwandb TablesにHTML形式でログできます。
import wandb
import plotly.express as px
# 新しいrunを初期化
run = wandb. init(project= "log-plotly-fig-tables" , name= "plotly_html" )
# テーブルを作成
table = wandb. Table(columns= ["plotly_figure" ])
# Plotly図のパスを作成
path_to_plotly_html = "./plotly_figure.html"
# 例のPlotly図
fig = px. scatter(x= [0 , 1 , 2 , 3 , 4 ], y= [0 , 1 , 4 , 9 , 16 ])
# Plotly図をHTMLに書き込み
# auto_playをFalseに設定すると、アニメーション付きのPlotlyチャートが自動的にテーブル内で再生されないようにします
fig. write_html(path_to_plotly_html, auto_play= False )
# Plotly図をHTMLファイルとしてTableに追加
table. add_data(wandb. Html(path_to_plotly_html))
# Tableをログ
run. log({"test_table" : table})
wandb. finish()
インタラクティブなBokehチャートをwandb TablesにHTML形式でログできます。
from scipy.signal import spectrogram
import holoviews as hv
import panel as pn
from scipy.io import wavfile
import numpy as np
from bokeh.resources import INLINE
hv. extension("bokeh" , logo= False )
import wandb
def save_audio_with_bokeh_plot_to_html (audio_path, html_file_name):
sr, wav_data = wavfile. read(audio_path)
duration = len(wav_data) / sr
f, t, sxx = spectrogram(wav_data, sr)
spec_gram = hv. Image((t, f, np. log10(sxx)), ["Time (s)" , "Frequency (hz)" ]). opts(
width= 500 , height= 150 , labelled= []
)
audio = pn. pane. Audio(wav_data, sample_rate= sr, name= "Audio" , throttle= 500 )
slider = pn. widgets. FloatSlider(end= duration, visible= False )
line = hv. VLine(0 ). opts(color= "white" )
slider. jslink(audio, value= "time" , bidirectional= True )
slider. jslink(line, value= "glyph.location" )
combined = pn. Row(audio, spec_gram * line, slider). save(html_file_name)
html_file_name = "audio_with_plot.html"
audio_path = "hello.wav"
save_audio_with_bokeh_plot_to_html(audio_path, html_file_name)
wandb_html = wandb. Html(html_file_name)
run = wandb. init(project= "audio_test" )
my_table = wandb. Table(columns= ["audio_with_plot" ], data= [[wandb_html], [wandb_html]])
run. log({"audio_table" : my_table})
run. finish()
7.7 - 実験管理で CSV ファイルを追跡する
W&B にデータをインポートしてログする方法
W&B Python ライブラリを使用して、CSV ファイルをログし、W&B ダッシュボード で可視化します。W&B ダッシュボードは、機械学習モデルからの結果を整理し可視化する中心的な場所です。これは、W&B にログされていない以前の機械学習実験の情報を含む CSV ファイル やデータセットを含む CSV ファイル がある場合に特に便利です。
データセットの CSV ファイルをインポートしてログする
W&B Artifacts を使用することをお勧めします。CSV ファイルの内容を再利用しやすくするためです。
まず、CSV ファイルをインポートします。以下のコードスニペットでは、iris.csv
ファイル名をあなたの CSV ファイル名に置き換えてください:
import wandb
import pandas as pd
# CSV を新しい DataFrame に読み込む
new_iris_dataframe = pd. read_csv("iris.csv" )
CSV ファイルを W&B Table に変換し、W&B ダッシュボード を利用します。
# DataFrame を W&B Table に変換
iris_table = wandb. Table(dataframe= new_iris_dataframe)
次に、W&B Artifact を作成し、テーブルを Artifact に追加します:
# テーブルを Artifact に追加し、行制限を 200,000 に増やし、再利用しやすくする
iris_table_artifact = wandb. Artifact("iris_artifact" , type= "dataset" )
iris_table_artifact. add(iris_table, "iris_table" )
# データを保存するために、生の CSV ファイルを Artifact 内にログする
iris_table_artifact. add_file("iris.csv" )
W&B Artifacts についての詳細は、Artifacts チャプター を参照してください。
最後に、wandb.init
を使用して W&B で追跡しログするために新しい W&B Run を開始します:
# データをログするために W&B run を開始
run = wandb. init(project= "tables-walkthrough" )
# テーブルをログして run で可視化
run. log({"iris" : iris_table})
# そして行制限を増やすためにアーティファクトとしてログ!
run. log_artifact(iris_table_artifact)
wandb.init()
API は新しいバックグラウンドプロセスを開始し、データを Run にログし、デフォルトで wandb.ai に同期します。W&B ワークスペースダッシュボードでライブの可視化を表示します。以下の画像はコードスニペットのデモの出力を示しています。
以下は、前述のコードスニペットを含む完全なスクリプトです:
import wandb
import pandas as pd
# CSV を新しい DataFrame に読み込む
new_iris_dataframe = pd. read_csv("iris.csv" )
# DataFrame を W&B Table に変換
iris_table = wandb. Table(dataframe= new_iris_dataframe)
# テーブルを Artifact に追加し、行制限を 200,000 に増やし、再利用しやすくする
iris_table_artifact = wandb. Artifact("iris_artifact" , type= "dataset" )
iris_table_artifact. add(iris_table, "iris_table" )
# データを保存するために、生の CSV ファイルを Artifact 内にログする
iris_table_artifact. add_file("iris.csv" )
# データをログするために W&B run を開始
run = wandb. init(project= "tables-walkthrough" )
# テーブルをログして run で可視化
run. log({"iris" : iris_table})
# そして行制限を増やすためにアーティファクトとしてログ!
run. log_artifact(iris_table_artifact)
# run を終了する (ノートブックで便利)
run. finish()
実験の CSV をインポートしてログする
場合によっては、実験の詳細が CSV ファイルにあることがあります。そのような CSV ファイルに共通する詳細には次のようなものがあります:
実験
モデル名
ノート
タグ
層の数
最終トレイン精度
最終評価精度
トレーニング損失
実験 1
mnist-300-layers
トレーニングデータに過剰適合
[latest]
300
0.99
0.90
[0.55, 0.45, 0.44, 0.42, 0.40, 0.39]
実験 2
mnist-250-layers
現行の最良モデル
[prod, best]
250
0.95
0.96
[0.55, 0.45, 0.44, 0.42, 0.40, 0.39]
実験 3
mnist-200-layers
ベースラインモデルより悪かったため、デバッグ必要
[debug]
200
0.76
0.70
[0.55, 0.45, 0.44, 0.42, 0.40, 0.39]
…
…
…
…
…
…
…
実験 N
mnist-X-layers
ノート
…
…
…
…
[…, …]
W&B は実験の CSV ファイルを受け取り、W&B 実験 Run に変換することができます。次のコードスニペットとコードスクリプトで、実験の CSV ファイルをインポートしてログする方法を示しています:
最初に、CSV ファイルを読み込んで Pandas DataFrame に変換します。"experiments.csv"
を CSV ファイル名に置き換えてください:
import wandb
import pandas as pd
FILENAME = "experiments.csv"
loaded_experiment_df = pd. read_csv(FILENAME)
PROJECT_NAME = "Converted Experiments"
EXPERIMENT_NAME_COL = "Experiment"
NOTES_COL = "Notes"
TAGS_COL = "Tags"
CONFIG_COLS = ["Num Layers" ]
SUMMARY_COLS = ["Final Train Acc" , "Final Val Acc" ]
METRIC_COLS = ["Training Losses" ]
# 作業を容易にするための Pandas DataFrame のフォーマット
for i, row in loaded_experiment_df. iterrows():
run_name = row[EXPERIMENT_NAME_COL]
notes = row[NOTES_COL]
tags = row[TAGS_COL]
config = {}
for config_col in CONFIG_COLS:
config[config_col] = row[config_col]
metrics = {}
for metric_col in METRIC_COLS:
metrics[metric_col] = row[metric_col]
summaries = {}
for summary_col in SUMMARY_COLS:
summaries[summary_col] = row[summary_col]
次に、wandb.init()
を使用して W&B で追跡し、ログするための新しい W&B Run を開始します:
run = wandb. init(
project= PROJECT_NAME, name= run_name, tags= tags, notes= notes, config= config
)
実験が進行するにつれて、メトリクスのすべてのインスタンスをログし、W&B で表示、クエリ、および分析可能にすることをお勧めするかもしれません。これを実現するには、run.log()
コマンドを使用します:
また、run の結果を定義するために最終的なサマリーメトリクスをオプションでログすることもできます。これを実現するには、W&B define_metric
API を使用します。この例では、run.summary.update()
によりサマリーメトリクスを run に追加します:
run. summary. update(summaries)
サマリーメトリクスの詳細については、Log Summary Metrics を参照してください。
以下は、上記のサンプルテーブルを W&B ダッシュボード に変換する完全な例のスクリプトです:
FILENAME = "experiments.csv"
loaded_experiment_df = pd. read_csv(FILENAME)
PROJECT_NAME = "Converted Experiments"
EXPERIMENT_NAME_COL = "Experiment"
NOTES_COL = "Notes"
TAGS_COL = "Tags"
CONFIG_COLS = ["Num Layers" ]
SUMMARY_COLS = ["Final Train Acc" , "Final Val Acc" ]
METRIC_COLS = ["Training Losses" ]
for i, row in loaded_experiment_df. iterrows():
run_name = row[EXPERIMENT_NAME_COL]
notes = row[NOTES_COL]
tags = row[TAGS_COL]
config = {}
for config_col in CONFIG_COLS:
config[config_col] = row[config_col]
metrics = {}
for metric_col in METRIC_COLS:
metrics[metric_col] = row[metric_col]
summaries = {}
for summary_col in SUMMARY_COLS:
summaries[summary_col] = row[summary_col]
run = wandb. init(
project= PROJECT_NAME, name= run_name, tags= tags, notes= notes, config= config
)
for key, val in metrics. items():
if isinstance(val, list):
for _val in val:
run. log({key: _val})
else :
run. log({key: val})
run. summary. update(summaries)
run. finish()
7.8 - 分散トレーニング実験をログする
W&B を使用して、複数の GPU を用いた分散トレーニング実験をログする。
分散トレーニングでは、複数の GPU を使ってモデルが並列にトレーニングされます。W&B は、分散トレーニング実験をトラッキングするための2つのパターンをサポートしています。
ワンプロセス : 単一のプロセスから W&B を初期化し(wandb.init
)、実験をログします(wandb.log
)。これは PyTorch Distributed Data Parallel (DDP)クラスを使った分散トレーニング実験のログに一般的なソリューションです。ユーザーは他のプロセスからメインのロギングプロセスにデータを送るために、多重処理キュー(または他の通信プリミティブ)を使用することもあります。
多数のプロセス : 各プロセスで W&B を初期化し(wandb.init
)、実験をログします(wandb.log
)。各プロセスは実質的に別々の実験です。W&B を初期化する際に、group
パラメータを使用して共有実験を定義し、W&B App UI のログした値を一緒にグループ化します。
次に示す例は、PyTorch DDP を使って単一のマシン上で2つの GPU でメトリクスを W&B でトラッキングする方法を示しています。PyTorch DDP (torch.nn
の DistributedDataParallel
)は、分散トレーニングのための人気のあるライブラリです。基本的な原則はどの分散トレーニングセットアップにも適用されますが、実装の詳細は異なる場合があります。
方法 1: ワンプロセス
この方法では、ランク 0 のプロセスのみをトラッキングします。この方法を実装するには、ランク 0 のプロセス内で W&B を初期化し(wandb.init
)、W&B Run を開始し、メトリクスをログ(wandb.log
)します。この方法はシンプルで堅牢ですが、他のプロセスからモデルメトリクス(例えば、ロス値や各バッチからの入力)をログしません。使用状況やメモリなどのシステムメトリクスは、すべての GPU に利用可能な情報であるため、引き続きログされます。
単一のプロセスで利用可能なメトリクスのみをトラッキングする場合、この方法を使用してください。 典型的な例には、GPU/CPU 使用率、共有 validation set 上の挙動、勾配とパラメータ、代表的なデータ例上の損失値が含まれます。
サンプル Python スクリプト (log-ddp.py
) では、ランクが 0 かどうかを確認します。そのためには、まず torch.distributed.launch
を使って複数のプロセスを開始します。次に、--local_rank
コマンドライン引数を使用してランクを確認します。ランクが 0 に設定されている場合、train()
関数内で条件付きで wandb
ロギングを設定します。Python スクリプト内では、次のように確認します。
if __name__ == "__main__" :
# 引数を取得
args = parse_args()
if args. local_rank == 0 : # メインプロセスでのみ
# wandb run を初期化
run = wandb. init(
entity= args. entity,
project= args. project,
)
# DDP でモデルをトレーニング
train(args, run)
else :
train(args)
W&B App UI を探索して、単一プロセスからトラッキングされたメトリクスの ダッシュボードの例 をご覧ください。ダッシュボードは、両方の GPU に対してトラッキングされた温度や使用率などのシステムメトリクスを表示します。
しかし、エポックとバッチサイズの関数としてのロス値は、単一の GPU からのみログされました。
方法 2: 多数のプロセス
この方法では、ジョブ内の各プロセスをトラッキングし、各プロセスから個別に wandb.init()
と wandb.log()
を呼び出します。トレーニングの終了時には wandb.finish()
を呼び出して、run が完了したことを示し、すべてのプロセスが正常に終了するようにすることをお勧めします。
この方法では、さらに多くの情報がログにアクセス可能になりますが、W&B App UI に複数の W&B Runs が報告されます。複数の実験にわたって W&B Runs を追跡するのが困難になる可能性があります。これを軽減するために、W&B を初期化する際に group
パラメータに値を与えて、どの W&B Run がどの実験に属しているかを追跡します。実験でのトレーニングと評価の W&B Runs の追跡方法の詳細については、Group Runs を参照してください。
個々のプロセスからメトリクスをトラッキングしたい場合はこの方法を使用してください。 典型的な例には、各ノードでのデータと予測(データ分散のデバッグ用)やメインノードの外側での個々のバッチのメトリクスが含まれます。この方法は、すべてのノードからのシステムメトリクスやメインノードで利用可能な要約統計データを取得するために必要ありません。
以下の Python コードスニペットは、W&B を初期化する際に group
パラメータを設定する方法を示しています。
if __name__ == "__main__" :
# 引数を取得
args = parse_args()
# run を初期化
run = wandb. init(
entity= args. entity,
project= args. project,
group= "DDP" , # 実験のすべての run を1つのグループに
)
# DDP でモデルをトレーニング
train(args, run)
W&B App UI を探索して、複数のプロセスからトラッキングされたメトリクスの ダッシュボードの例 をご覧ください。左側のサイドバーに 2 つの W&B Runs が組み合わされたものが示されています。グループをクリックして、その実験専用のグループページを表示します。専用のグループページには、各プロセスから別々にログされたメトリクスが表示されます。
前の画像は W&B App UI ダッシュボードを示しています。サイドバーには2つの実験が表示されています。1つは「null」とラベル付けされ、黄色のボックスで囲まれた2つ目は「DPP」と呼ばれます。グループを展開すると([Group] ドロップダウンを選択)、その実験に関連する W&B Runs を見ることができます。
共通の分散トレーニングの問題を避けるために W&B Service を使用
W&B と分散トレーニングを使用する場合、2つの一般的な問題に遭遇することがあります。
トレーニングの開始時のハング - wandb
プロセスが、分散トレーニングからの多重処理と干渉するためにハングすることがあります。
トレーニングの終了時のハング - トレーニングジョブが、wandb
プロセスがいつ終了する必要があるかを知らない場合、ハングすることがあります。Python スクリプトの最後に wandb.finish()
API を呼び出して、W&B に Run が終了したことを通知します。wandb.finish() API はデータのアップロードを完了し、W&B の終了を引き起こします。
wandb service
を使用して、分散ジョブの信頼性を向上させることをお勧めします。上記のトレーニングの問題は、wandb service が利用できない W&B SDK のバージョンで一般的に見られます。
W&B Service の有効化
お使いのバージョンの W&B SDK に応じて、すでにデフォルトで W&B Service が有効になっているかもしれません。
W&B SDK 0.13.0 以上
W&B SDK バージョン 0.13.0
以上のバージョンでは、W&B Service がデフォルトで有効です。
W&B SDK 0.12.5 以上
W&B SDK バージョン 0.12.5 以上の場合は、Python スクリプトを修正して W&B Service を有効にします。wandb.require
メソッドを使用し、メイン関数内で文字列 "service"
を渡します。
if __name__ == "__main__" :
main()
def main ():
wandb. require("service" )
# スクリプトの残りがここに来る
最適な体験のために、最新バージョンへのアップグレードをお勧めします。
W&B SDK 0.12.4 以下
W&B SDK バージョン 0.12.4 以下を使用する場合は、マルチスレッドを代わりに使用するために、WANDB_START_METHOD
環境変数を "thread"
に設定します。
マルチプロセスの例々
以下のコードスニペットは、高度な分散ユースケースの一般的なメソッドを示しています。
プロセスの生成
ワークスレッドを生成するプロセス内で W&B Run を開始する場合は、メイン関数で wandb.setup()
メソッドを使用します。
import multiprocessing as mp
def do_work (n):
run = wandb. init(config= dict(n= n))
run. log(dict(this= n * n))
def main ():
wandb. setup()
pool = mp. Pool(processes= 4 )
pool. map(do_work, range(4 ))
if __name__ == "__main__" :
main()
W&B Run の共有
W&B Run オブジェクトを引数として渡して、プロセス間で W&B Runs を共有します。
def do_work (run):
run. log(dict(this= 1 ))
def main ():
run = wandb. init()
p = mp. Process(target= do_work, kwargs= dict(run= run))
p. start()
p. join()
if __name__ == "__main__" :
main()
記録の順序は保証できないことに注意してください。同期はスクリプトの作成者が行う必要があります。
8 - 実験を再現する
実験を再現し、チームメンバーが作成した結果を検証して確認します。
実験を再現する前に、以下の事項に注意する必要があります:
run がログされたプロジェクトの名前
再現したい run の名前
実験を再現するには:
run がログされたプロジェクトに移動します。
左のサイドバーで Workspace タブを選択します。
run のリストから再現したい run を選択します。
Overview をクリックします。
続けるには、指定されたハッシュで実験のコードをダウンロードするか、実験のリポジトリ全体をクローンします。
Python スクリプトまたはノートブックをダウンロード
GitHub
実験の Python スクリプトまたはノートブックをダウンロードします:
Command フィールドで、実験を作成したスクリプトの名前をメモしておきます。
左のナビゲーションバーで Code タブを選択します。
スクリプトまたはノートブックに対応するファイルの横にある Download をクリックします。
チームメイトが実験を作成するときに使用した GitHub リポジトリをクローンします。以下の手順で行います:
必要に応じて、チームメイトが実験を作成する際に使用した GitHub リポジトリへのアクセス権を取得します。
GitHub リポジトリの URL を含む Git repository フィールドをコピーします。
リポジトリをクローンします:
git clone https://github.com/your-repo.git && cd your-repo
Git state フィールドをターミナルにコピー&ペーストします。Git state は、チームメイトが実験を作成するときに使用した正確なコミットをチェックアウトする一連の Git コマンドです。以下のコードスニペットで指定されている値を自分の値に置き換えます:
git checkout -b "<run-name>" 0123456789012345678901234567890123456789
左のナビゲーションバーで Files を選択します。
requirements.txt
ファイルをダウンロードし、作業ディレクトリーに保存します。このディレクトリーには、クローンした GitHub リポジトリまたはダウンロードした Python スクリプトまたはノートブックが含まれている必要があります。
(推奨)Python 仮想環境を作成します。
requirements.txt
ファイルに指定された要件をインストールします。
pip install -r requirements.txt
これでコードと依存関係が揃ったので、スクリプトまたはノートブックを実行して実験を再現できます。リポジトリをクローンした場合は、スクリプトまたはノートブックが置かれているディレクトリーに移動する必要があるかもしれません。そうでなければ、作業ディレクトリーからスクリプトまたはノートブックを実行できます。
Python ノートブック
Python スクリプト
Python ノートブックをダウンロードした場合、ノートブックをダウンロードしたディレクトリーに移動して、以下のコマンドをターミナルで実行します:
Python スクリプトをダウンロードした場合、スクリプトをダウンロードしたディレクトリーに移動して、ターミナルで以下のコマンドを実行してください。<>
で囲まれた値を自分のものに置き換えます:
python <your-script-name>.py
9 - 実験管理の制限とパフォーマンス
W&B のページを、これらの推奨範囲内でログを記録することにより、より速く反応がよい状態に保ちましょう。
ページをW&Bで速く、応答性を高めるために、以下の推奨範囲内でログを記録してください。
ログに関する考慮事項
wandb.log
を使用して実験のメトリクスを追跡します。ログに記録されたメトリクスは、チャートを生成し、テーブルに表示されます。ログに記録されるデータが多すぎると、アプリケーションが遅くなる可能性があります。
異なるメトリクスの数
より速いパフォーマンスのために、プロジェクト内の異なるメトリクスの合計数を10,000未満に抑えてください。
import wandb
wandb. log(
{
"a" : 1 , # "a" は異なるメトリクスです
"b" : {
"c" : "hello" , # "b.c" は異なるメトリクスです
"d" : [1 , 2 , 3 ], # "b.d" は異なるメトリクスです
},
}
)
W&Bは自動的にネストされた値をフラット化します。これは、辞書を渡すと、W&Bがそれをドットで区切られた名前に変えることを意味します。設定値については、W&Bは名前に3つのドットをサポートしています。要約値については、W&Bは4つのドットをサポートしています。
ワークスペースが突然遅くなった場合、最近のRunsが意図せず何千もの新しいメトリクスを記録していないか確認してください。もしそのような場合があれば、それらのRunsを削除し、望ましいメトリクスでそれらを再作成することを検討してください。
値の幅
単一のログに記録された値のサイズを1 MB未満に、単一の wandb.log
コールの合計サイズを25 MB未満に制限してください。この制限は wandb.Media
の型( wandb.Image
、 wandb.Audio
など)には適用されません。
# ❌ 推奨されません
wandb. log({"wide_key" : range(10000000 )})
# ❌ 推奨されません
with open("large_file.json" , "r" ) as f:
large_data = json. load(f)
wandb. log(large_data)
広い値は、広い値を持つメトリクスだけでなく、run内のすべてのメトリクスのプロットの読み込み時間に影響を与える可能性があります。
たとえ推奨される量を超えた値を記録しても、データは保存され追跡されます。ただし、プロットの読み込みが遅くなるかもしれません。
メトリクスの頻度
記録するメトリクスに応じたログ頻度を選択してください。一つの目安として、メトリクスが広ければ、その分頻度を減らしてログを記録する必要があります。W&Bの推奨は次の通りです:
スカラー: メトリクスあたり < 100,000 ログポイント
メディア: メトリクスあたり < 50,000 ログポイント
ヒストグラム: メトリクスあたり < 10,000 ログポイント
# 合計100万ステップのトレーニングループ
for step in range(1000000 ):
# ❌ 推奨されません
wandb. log(
{
"scalar" : step, # 100,000スカラー
"media" : wandb. Image(... ), # 100,000画像
"histogram" : wandb. Histogram(... ), # 100,000ヒストグラム
}
)
# ✅ 推奨されます
if step % 1000 == 0 :
wandb. log(
{
"histogram" : wandb. Histogram(... ), # 10,000ヒストグラム
},
commit= False ,
)
if step % 200 == 0 :
wandb. log(
{
"media" : wandb. Image(... ), # 50,000画像
},
commit= False ,
)
if step % 100 == 0 :
wandb. log(
{
"scalar" : step, # 100,000スカラー
},
commit= True ,
) # ステップごとにまとめてメトリクスをコミットします
W&Bはあなたのログに記録されたデータを受け入れ続けますが、ガイドラインを超えるとページの読み込みが遅くなる可能性があります。
設定のサイズ
runの設定の合計サイズを10 MB未満に制限してください。大きな値をログに記録すると、プロジェクトワークスペースとRunsテーブルの操作が遅くなる可能性があります。
# ✅ 推奨されます
wandb. init(
config= {
"lr" : 0.1 ,
"batch_size" : 32 ,
"epochs" : 4 ,
}
)
# ❌ 推奨されません
wandb. init(
config= {
"steps" : range(10000000 ),
}
)
# ❌ 推奨されません
with open("large_config.json" , "r" ) as f:
large_config = json. load(f)
wandb. init(config= large_config)
Workspaceに関する考慮事項
Runの数
読み込み時間を短縮するために、1つのプロジェクトでのRunsの総数を次のように抑えてください:
SaaSクラウド上で100,000以下
専用クラウドまたはセルフマネージドで10,000以下
これらの閾値を超えるRunの数は、プロジェクトのワークスペースやRunsテーブルの操作を遅くする可能性があります。特に次のRunsをグループ化する際や、Run中に大量の異なるメトリクスを収集する際に影響を与えます。メトリクスの数 セクションも参照してください。
チームが頻繁に同じRunsセットにアクセスする場合、たとえば最近のRunsセットなど、使用頻度が低いRunsを一括で新しい「アーカイブ」プロジェクトに移動する ことを考慮してください。動作中のプロジェクトに小さなRunsセットだけを残してください。
Workspaceのパフォーマンス
このセクションでは、ワークスペースのパフォーマンスを最適化するためのヒントを紹介します。
パネルの数
デフォルトでは、ワークスペースは 自動 で、ログに記録された各キーの標準パネルを生成します。もし、大きなプロジェクトのワークスペースに多くのログされたキーのパネルが含まれている場合、ワークスペースの読み込みと使用が遅くなることがあります。パフォーマンスを向上させるために、次のことができます:
ワークスペースを手動モードにリセットし、デフォルトでパネルを含まないようにします。
Quick add を使用して、可視化する必要があるログされたキーのパネルを選択的に追加します。
一度に一つずつ使われていないパネルを削除しても、パフォーマンスへの影響はほとんどありません。代わりに、ワークスペースをリセットし、選択的に必要なパネルだけを追加してください。
ワークスペースの設定方法の詳細については、パネル を参照してください。
セクションの数
ワークスペースに何百ものセクションがあると、パフォーマンスが低下する可能性があります。メトリクスの高レベルなグループ化に基づいてセクションを作成し、メトリクスごとに1つのセクションを持つアンチパターンを避けることを考慮してください。
あまりにも多くのセクションがあり、パフォーマンスが低下していると感じた場合、プレフィックスではなくサフィックスによってセクションを作成するワークスペースの設定を検討してください。これにより、セクションが少なくなり、パフォーマンスが向上する可能性があります。
メトリクスの数
1つのRunで5,000から100,000のメトリクスをログに記録する場合、W&Bでは手動ワークスペース の使用をお勧めします。手動モードでは、異なるメトリクスセットを探索する際に、まとめてパネルを追加および削除することが容易です。より集中されたプロットセットにより、ワークスペースの読み込みが速くなります。プロットされていないメトリクスも通常どおり収集および保存されます。
ワークスペースを手動モードにリセットするには、ワークスペースのアクション ...
メニューをクリックし、ワークスペースをリセット をクリックします。ワークスペースのリセットは、Runに保存されたメトリクスに影響を与えません。ワークスペースの管理についての詳細はこちらをご覧ください 。
ファイルの数
1つのRunでアップロードされるファイルの総数を1,000以下に抑えてください。多くのファイルをログに記録する必要がある場合は、W&B Artifactsを使用できます。1つのRunで1,000ファイルを超えると、Runページの動作が遅くなる可能性があります。
Reportsとワークスペース
レポートは、パネル、テキスト、メディアの任意の配置の自由な組み合わせで構成されており、洞察を容易に同僚と共有することができます。
対照的に、ワークスペースは、数十から数十万のRunsにわたる数十から数百のメトリクスの高密度で性能の高い分析を可能にします。ワークスペースは、Reportsと比較してキャッシュ、クエリ、および読み込み機能が最適化されています。ワークスペースは主に分析に使用されるプロジェクト、または20以上のプロットを一緒に表示する必要がある場合に推奨されます。
Pythonスクリプトのパフォーマンス
Pythonスクリプトのパフォーマンスが低下する理由はいくつかあります:
データのサイズが大きすぎること。大きなデータサイズは、トレーニングループに>1 msのオーバーヘッドを導入する可能性があります。
ネットワークの速度と、W&Bのバックエンドがどのように構成されているか
1秒あたり数回 wandb.log
を呼び出すこと。これは、 wandb.log
が呼び出されるたびにトレーニングループに小さな遅延が追加されるためです。
頻繁なログがトレーニングのRunsを遅くしている場合、
このColab を参照し、ログ戦略を変更することでより良いパフォーマンスを得る方法を確認してください。
W&Bはレート制限以外の制限を主張しません。W&B Python SDKは、制限を超えるリクエストに対して指数関数的な「バックオフ」と「リトライ」を自動的に完了します。W&B Python SDKは、コマンドラインで「ネットワーク障害」と応答します。無償アカウントの場合、W&Bは合理的な閾値を超える使用が極端な場合に連絡することがあります。
レート制限
W&B SaaSクラウドAPIは、システムの整合性を保ち、利用可能性を確保するためにレート制限を実施しています。この対策により、共有インフラストラクチャで利用可能なリソースを特定のユーザーが独占することを防ぎ、サービスがすべてのユーザーにとってアクセス可能であることを保証します。いくつかの理由で、レート制限が低くなることがあります。
レート制限は変更される場合があります。
レート制限HTTPヘッダー
前述の表では、レート制限HTTPヘッダーについて説明しています:
ヘッダー名
説明
RateLimit-Limit
時間枠ごとに利用可能なクォータの量(0から1000の範囲でスケール)
RateLimit-Remaining
現在のレート制限ウィンドウでのクォータの量(0から1000の範囲でスケール)
RateLimit-Reset
現在のクォータがリセットされるまでの秒数
メトリクスログAPIのレート制限
あなたのスクリプトの wandb.log
の呼び出しは、トレーニングデータをW&Bに記録するためのメトリクスログAPIを使用します。このAPIは、オンラインまたはオフライン同期 を通じて利用されます。いずれの場合でも、ローリング時間枠でのレート制限クォータ制限を課しています。これには、合計リクエストサイズとリクエストレート(時間内のリクエスト数)に対する制限が含まれます。
W&Bは、W&Bプロジェクトごとにレート制限を適用します。したがって、1つのチームに3つのプロジェクトがある場合、各プロジェクトには独自のレート制限クォータがあります。Teams and Enterprise plans のユーザーは、無料プランのユーザーよりも高いレート制限を持っています。
メトリクスログAPIを使用中にレート制限に達すると、標準出力にエラーを示す関連メッセージが表示されます。
メトリクスログAPIのレート制限を超えないための提案
レート制限を超えると、 run.finish()
がレート制限がリセットされるまで遅れる可能性があります。これを避けるために、以下の戦略を検討してください:
W&B Python SDKのバージョンを更新する:W&B Python SDKの最新バージョンを使用していることを確認してください。W&B Python SDKは定期的に更新され、リクエストのリトライやクォータの使用を最適化するための強化されたメカニズムが含まれています。
メトリクスログ頻度を減らす:クォータを節約するためにメトリクスのログ頻度を最小限に抑えます。たとえば、メトリクスを毎エポックではなく、5エポックごとにログに記録するためにコードを修正することができます:
if epoch % 5 == 0 : # 5エポックごとにメトリクスをログ
wandb. log({"acc" : accuracy, "loss" : loss})
手動データ同期:レート制限を受けた場合、W&BはRunデータをローカルに保存します。wandb sync <run-file-path>
コマンドを使用してデータを手動で同期することができます。詳細については wandb sync
リファレンスを参照してください。
GraphQL APIのレート制限
W&B モデル UI と SDK のパブリック API は、データのクエリと修正のためにサーバーにGraphQLリクエストを行います。SaaSクラウドのすべてのGraphQLリクエストに対して、W&Bは認証されていないリクエストに対してIPアドレスごと、認証されたリクエストに対してユーザーごとにレート制限を適用します。制限は、固定された時間枠内のリクエストレート(1秒あたりのリクエスト)に基づいており、あなたのプライシングプランがデフォルトの制限を決定します。プロジェクトパスを指定する関連SDKリクエスト(レポート、Runs、Artifactsなど)については、W&Bはプロジェクトごとにレート制限を適用し、データベースクエリ時間で測定します。
Teams and Enterprise plans のユーザーは、無料プランのユーザーよりも高いレート制限を受け取ります。
W&B Models SDKのパブリックAPIを使用しているときにレート制限に達した場合、標準出力にエラーを示す関連メッセージが表示されます。
GraphQL APIのレート制限を超えないための提案
W&B Models SDKのパブリックAPI を使用して大量のデータを取得している場合、リクエストの間に少なくとも1秒待機することを検討してください。 429
ステータスコードを受け取ったり、応答ヘッダーで RateLimit-Remaining=0
が表示された場合は、 RateLimit-Reset
に指定された秒数を待機してからリトライしてください。
ブラウザの考慮事項
W&Bアプリはメモリを大量に使用する可能性があり、Chromeでのパフォーマンスが最も高くなります。コンピューターのメモリに応じて、W&Bが3つ以上のタブでアクティブであるとパフォーマンスが低下する可能性があります。予想外にパフォーマンスが遅い場合、他のタブやアプリケーションを閉じることを検討してください。
W&Bへのパフォーマンス問題の報告
W&Bはパフォーマンスを重視しており、すべてのラグ報告を調査します。調査を迅速に進めるために、読み込み時間の遅さを報告するときに、キーのメトリクスとパフォーマンスイベントをキャプチャするW&Bの組み込みパフォーマンスロガーを呼び出すことを検討してください。遅くなっているページにURLパラメータ &PERF_LOGGING
を追加し、コンソールの出力をアカウントチームまたはサポートチームと共有してください。
10 - データのインポートとエクスポート
MLFlow から データ をインポートし、保存した データ を W&B にエクスポートまたは更新します。
データをエクスポートまたはインポートするには、W&B パブリックAPIを使用します。
この機能には python>=3.8 が必要です
MLFlow からデータをインポート
W&B は、MLFlow からのデータのインポートをサポートしており、実験、runs、アーティファクト、メトリクス、その他のメタデータを含みます。
依存関係をインストール:
# 注意: これは py38+ が必要です
pip install wandb[ importers]
W&B にログインします。初めてログインする場合は、表示されるプロンプトに従ってください。
既存の MLFlow サーバーからすべての run をインポートします:
from wandb.apis.importers.mlflow import MlflowImporter
importer = MlflowImporter(mlflow_tracking_uri= "..." )
runs = importer. collect_runs()
importer. import_runs(runs)
デフォルトでは、importer.collect_runs()
は MLFlow サーバーからすべての run を収集します。特定のサブセットをアップロードしたい場合は、自分で runs イテラブルを構築し、それをインポーターに渡すことができます。
import mlflow
from wandb.apis.importers.mlflow import MlflowRun
client = mlflow. tracking. MlflowClient(mlflow_tracking_uri)
runs: Iterable[MlflowRun] = []
for run in mlflow_client. search_runs(... ):
runs. append(MlflowRun(run, client))
importer. import_runs(runs)
アーティファクトのインポートをスキップするには、artifacts=False
を渡します:
importer. import_runs(runs, artifacts= False )
特定の W&B エンティティとプロジェクトにインポートするには、Namespace
を渡します:
from wandb.apis.importers import Namespace
importer. import_runs(runs, namespace= Namespace(entity, project))
データのエクスポート
パブリックAPIを使用して、W&B に保存したデータをエクスポートまたは更新します。このAPIを使用する前に、スクリプトからデータをログします。詳細はクイックスタート を確認してください。
パブリックAPIのユースケース
データのエクスポート : カスタム分析のために Jupyter ノートブックにデータフレームを取り込みます。データを探索した後、例えば wandb.init(job_type="analysis")
のように新しい分析 run を作成し、結果を記録して学びを同期できます。
既存の runs の更新 : W&B run に関連して記録されたデータを更新することができます。例えば、最初はログされていなかったアーキテクチャーやハイパーパラメーターの情報を追加するために設定を更新することがあるでしょう。
利用可能な関数の詳細については、生成されたリファレンスドキュメント を参照してください。
APIキーを作成する
APIキーは、マシンをW&Bに認証します。ユーザープロフィールからAPIキーを生成できます。
右上のユーザープロフィールアイコンをクリックします。
ユーザー設定 を選択し、APIキー セクションまでスクロールします。
表示 をクリックします。表示されるAPIキーをコピーします。APIキーを非表示にするには、ページを再読み込みします。
run パスを見つける
パブリックAPIを使用するには、しばしば <entity>/<project>/<run_id>
という形式の run パスが必要になります。アプリUIでrunページを開き、Overviewタブ をクリックしてrunパスを取得します。
run データをエクスポートする
完了済みまたはアクティブな run からデータをダウンロードします。一般的な用途には、カスタム分析のために Jupyter ノートブックにデータフレームをダウンロードしたり、カスタムロジックを使用して自動化された環境で利用したりすることが含まれます。
import wandb
api = wandb. Api()
run = api. run("<entity>/<project>/<run_id>" )
run オブジェクトで最もよく使用される属性は次のとおりです:
属性
意味
run.config
run の設定情報を保持する辞書。トレーニング run のハイパーパラメーターや、データセットアーティファクトを作成するためのrun に使用する前処理メソッドなどが含まれます。これらはrun の入力と考えてください。
run.history()
モデルがトレーニングされている間に変化する値を保存することを意図した辞書のリスト。wandb.log()
コマンドはこのオブジェクトに追記します。
run.summary
run の結果を総括した情報の辞書。これには精度や損失のようなスカラー値や大きなファイルが含まれます。デフォルトでは、wandb.log()
がログされた時系列の最終値をサマリーに設定します。サマリーの内容は直接設定することもできます。サマリーはrun の出力と考えてください。
過去の runs データも変更したり更新したりすることができます。デフォルトでは、APIオブジェクトのインスタンス1つにつき、すべてのネットワークリクエストがキャッシュされます。実行中のスクリプトでリアルタイム情報が必要な場合、api.flush()
を呼び出して更新された値を取得してください。
属性の理解
以下のrunに対して:
n_epochs = 5
config = {"n_epochs" : n_epochs}
run = wandb. init(project= project, config= config)
for n in range(run. config. get("n_epochs" )):
run. log(
{"val" : random. randint(0 , 1000 ), "loss" : (random. randint(0 , 1000 ) / 1000.00 )}
)
run. finish()
これは上記のrunオブジェクトの属性に対する異なる出力です。
run.config
run.history()
_step val loss _runtime _timestamp
0 0 500 0.244 4 1644345412
1 1 45 0.521 4 1644345412
2 2 240 0.785 4 1644345412
3 3 31 0.305 4 1644345412
4 4 525 0.041 4 1644345412
run.summary
{
"_runtime" : 4 ,
"_step" : 4 ,
"_timestamp" : 1644345412 ,
"_wandb" : {"runtime" : 3 },
"loss" : 0.041 ,
"val" : 525 ,
}
サンプリング
デフォルトの history メソッドは、メトリクスを固定されたサンプル数(デフォルトは500)にサンプリングします。大規模なrunのすべてのデータをエクスポートしたい場合は、run.scan_history()
メソッドを使用してください。詳細はAPIリファレンス を参照してください。
複数の runs のクエリ
このサンプルスクリプトはプロジェクトを検索し、CSVにrun の名前、設定、サマリーステータスを出力します。 <entity>
と <project>
をそれぞれあなたのW&Bエンティティとプロジェクト名に置き換えてください。
import pandas as pd
import wandb
api = wandb. Api()
entity, project = "<entity>" , "<project>"
runs = api. runs(entity + "/" + project)
summary_list, config_list, name_list = [], [], []
for run in runs:
# .summary には、精度のようなメトリクスの出力キー/値が含まれています。
# ._json_dict を呼び出して大きなファイルを省略します
summary_list. append(run. summary. _json_dict)
# .config にはハイパーパラメーターが含まれています。
# _ で始まる特別な値は削除します。
config_list. append({k: v for k, v in run. config. items() if not k. startswith("_" )})
# .name は、run の人間が読み取り可能な名前です。
name_list. append(run. name)
runs_df = pd. DataFrame(
{"summary" : summary_list, "config" : config_list, "name" : name_list}
)
runs_df. to_csv("project.csv" )
W&B API は、api.runs() を使用してプロジェクト内の runs を横断してクエリを実行する方法も提供しています。最も一般的なユースケースはカスタム分析のために runs データをエクスポートすることです。クエリインターフェースは MongoDB が使用するもの と同じです。
runs = api. runs(
"username/project" ,
{"$or" : [{"config.experiment_name" : "foo" }, {"config.experiment_name" : "bar" }]},
)
print(f "Found { len(runs)} runs" )
api.runs
を呼び出すと、反復可能でリストのように動作する Runs
オブジェクトが返されます。デフォルトでは、オブジェクトは要求に応じて1回に50のrunを順番にロードしますが、per_page
キーワード引数を使用してページごとにロードする数を変更できます。
api.runs
はorder
キーワード引数も受け取ります。デフォルトの順序は -created_at
です。昇順にするには +created_at
を指定してください。設定やサマリーの値でソートすることもできます。例えば、summary.val_acc
または config.experiment_name
です。
エラーハンドリング
W&B サーバーと話す際にエラーが発生すると、wandb.CommError
が発生します。元の例外は exc
属性を通じて調査できます。
API を通じて最新の git コミットを取得する
UIでは、runをクリックし、その run ページの Overview タブをクリックして最新の git コミットを見ることができます。それはまた、ファイル wandb-metadata.json
の中にあります。パブリックAPIを使用して、run.commit
を使用して git ハッシュを取得できます。
run 中の run の名前とIDを取得する
wandb.init()
を呼び出した後、スクリプトからランダム run IDまたは人間読み書き可能なrun名にアクセスできます。
一意の run ID(8文字のハッシュ):wandb.run.id
ランダム run 名前(人間読み書き可能):wandb.run.name
run の識別子を効果的に設定する方法について考えている場合、以下を推奨します:
run ID :生成されたハッシュのままにしておきます。これはプロジェクト内の run で一意である必要があります。
run 名前 :短く、読み書き可能で、おそらく一意であるべきです。そうすれば、チャートの異なる線間で違いをつけることができます。
run ノート :run内で何をしているかを簡単に説明するのに最適です。wandb.init(notes="your notes here")
で設定できます。
run タグ :run タグで動的に追跡し、UIでフィルターを使用して興味のある run に絞り込みます。スクリプトからタグを設定し、runsテーブルやrunページのoverviewタブでUIからも編集できます。詳細な指示はこちら を参照してください。
公開APIの例
matplotlib または seaborn で視覚化するためにデータをエクスポート
一般的なエクスポートパターンについては、APIの例 を確認してください。また、カスタムプロットや拡張されたrunテーブルでダウンロードボタンをクリックして、ブラウザからCSVをダウンロードすることもできます。
run からメトリクスを読む
この例では、wandb.log({"accuracy": acc})
で保存されたrunのタイムスタンプと精度を出力します。
import wandb
api = wandb. Api()
run = api. run("<entity>/<project>/<run_id>" )
if run. state == "finished" :
for i, row in run. history(). iterrows():
print(row["_timestamp" ], row["accuracy" ])
runs のフィルタリング
MongoDBクエリ言語を使用してフィルターできます。
日付
runs = api. runs(
"<entity>/<project>" ,
{"$and" : [{"created_at" : {"$lt" : "YYYY-MM-DDT##" , "$gt" : "YYYY-MM-DDT##" }}]},
)
特定の run のメトリクスを読む
run から特定のメトリクスを取り出すには、keys
引数を使用します。run.history()
の場合、デフォルトのサンプル数は500です。特定のメトリクスを含まないログステップは、出力データフレームで NaN
として表示されます。keys
引数を使用すると、APIは指定したメトリックキーを含むステップをより頻繁にサンプリングします。
import wandb
api = wandb. Api()
run = api. run("<entity>/<project>/<run_id>" )
if run. state == "finished" :
for i, row in run. history(keys= ["accuracy" ]). iterrows():
print(row["_timestamp" ], row["accuracy" ])
2つの run を比較する
これは run1
と run2
の間で異なる設定パラメーターを出力します。
import pandas as pd
import wandb
api = wandb. Api()
# `<entity>`, `<project>`, `<run_id>` で置き換える
run1 = api. run("<entity>/<project>/<run_id>" )
run2 = api. run("<entity>/<project>/<run_id>" )
df = pd. DataFrame([run1. config, run2. config]). transpose()
df. columns = [run1. name, run2. name]
print(df[df[run1. name] != df[run2. name]])
出力:
c_10_sgd_0.025_0.01_long_switch base_adam_4_conv_2fc
batch_size 32 16
n_conv_layers 5 4
optimizer rmsprop adam
run が完了した後に、run のメトリクスを更新する
この例では、以前のrunの精度を 0.9
に設定します。また、numpy_array のヒストグラムに以前のrunの精度ヒストグラムを変更します。
import wandb
api = wandb. Api()
run = api. run("<entity>/<project>/<run_id>" )
run. summary["accuracy" ] = 0.9
run. summary["accuracy_histogram" ] = wandb. Histogram(numpy_array)
run. summary. update()
完了した run でメトリクスをリネームする
この例ではテーブル内のサマリー列の名前を変更します。
import wandb
api = wandb. Api()
run = api. run("<entity>/<project>/<run_id>" )
run. summary["new_name" ] = run. summary["old_name" ]
del run. summary["old_name" ]
run. summary. update()
列のリネームはテーブルにのみ適用されます。チャートは元の名前でメトリクスを参照し続けます。
既存の run の設定を更新する
この例では設定のひとつを更新します。
import wandb
api = wandb. Api()
run = api. run("<entity>/<project>/<run_id>" )
run. config["key" ] = updated_value
run. update()
システムリソースの消費をCSVファイルにエクスポートする
以下のスニペットは、システムリソースの消費を見つけ、それらをCSVに保存します。
import wandb
run = wandb. Api(). run("<entity>/<project>/<run_id>" )
system_metrics = run. history(stream= "events" )
system_metrics. to_csv("sys_metrics.csv" )
サンプリングされていないメトリクスデータを取得する
history からデータを取得するとき、デフォルトでは500ポイントにサンプリングされます。run.scan_history()
を使用すると全てのログデータポイントが取得できます。以下は、historyでログされたすべての loss
データポイントをダウンロードする例です。
import wandb
api = wandb. Api()
run = api. run("<entity>/<project>/<run_id>" )
history = run. scan_history()
losses = [row["loss" ] for row in history]
history からページ分割されたデータを取得する
メトリクスがバックエンドでゆっくりと取得されている場合やAPIリクエストがタイムアウトしている場合、scan_history でページサイズを下げて、個々のリクエストがタイムアウトしないようにすることができます。デフォルトのページサイズは500なので、どのサイズが最適か試してみてください。
import wandb
api = wandb. Api()
run = api. run("<entity>/<project>/<run_id>" )
run. scan_history(keys= sorted(cols), page_size= 100 )
プロジェクト内のすべてのrun からメトリクスをCSVファイルにエクスポートする
このスクリプトは、プロジェクト内のrunを取得し、その名前、設定、およびサマリーステータスを含むデータフレームとCSVを生成します。 <entity>
と <project>
をそれぞれあなたのW&Bエンティティとプロジェクト名に置き換えます。
import pandas as pd
import wandb
api = wandb. Api()
entity, project = "<entity>" , "<project>"
runs = api. runs(entity + "/" + project)
summary_list, config_list, name_list = [], [], []
for run in runs:
# .summary には、精度のようなメトリクスの出力キー/値が含まれています。
# ._json_dict を呼び出して大きなファイルを省略します
summary_list. append(run. summary. _json_dict)
# .config にはハイパーパラメーターが含まれています。
# _ で始まる特別な値は削除します。
config_list. append({k: v for k, v in run. config. items() if not k. startswith("_" )})
# .name は、run の人間が読み取り可能な名前です。
name_list. append(run. name)
runs_df = pd. DataFrame(
{"summary" : summary_list, "config" : config_list, "name" : name_list}
)
runs_df. to_csv("project.csv" )
run の開始時間を取得する
このコードスニペットは、run が作成された時間を取得します。
import wandb
api = wandb. Api()
run = api. run("entity/project/run_id" )
start_time = run. created_at
完了した run にファイルをアップロードする
以下のコードスニペットは、選択したファイルを完了したrunにアップロードします。
import wandb
api = wandb. Api()
run = api. run("entity/project/run_id" )
run. upload_file("file_name.extension" )
run からファイルをダウンロードする
これは、cifar プロジェクトの run ID uxte44z7 に関連付けられたファイル “model-best.h5” を見つけ、ローカルに保存します。
import wandb
api = wandb. Api()
run = api. run("<entity>/<project>/<run_id>" )
run. file("model-best.h5" ). download()
run からすべてのファイルをダウンロードする
これはrunに関連付けられたすべてのファイルを見つけ、ローカルに保存します。
import wandb
api = wandb. Api()
run = api. run("<entity>/<project>/<run_id>" )
for file in run. files():
file. download()
特定のスイープから run を取得する
このスニペットは特定のスイープに関連するすべてのrunをダウンロードします。
import wandb
api = wandb. Api()
sweep = api. sweep("<entity>/<project>/<sweep_id>" )
sweep_runs = sweep. runs
スイープから最高の run を取得する
次のスニペットは、与えられたスイープから最高のrun を取得します。
import wandb
api = wandb. Api()
sweep = api. sweep("<entity>/<project>/<sweep_id>" )
best_run = sweep. best_run()
best_run
は、スイープの設定の metric
パラメータで定義されたメトリクスが最高のrunです。
スイープから最高のモデルファイルをダウンロードする
このスニペットは、runでmodel.h5
にモデルファイルを保存したスイープから、最高の検証精度を持つモデルファイルをダウンロードします。
import wandb
api = wandb. Api()
sweep = api. sweep("<entity>/<project>/<sweep_id>" )
runs = sorted(sweep. runs, key= lambda run: run. summary. get("val_acc" , 0 ), reverse= True )
val_acc = runs[0 ]. summary. get("val_acc" , 0 )
print(f "Best run { runs[0 ]. name} with { val_acc} % val accuracy" )
runs[0 ]. file("model.h5" ). download(replace= True )
print("Best model saved to model-best.h5" )
run から特定の拡張子のすべてのファイルを削除する
このスニペットは、runの特定の拡張子を持つファイルを削除します。
import wandb
api = wandb. Api()
run = api. run("<entity>/<project>/<run_id>" )
extension = ".png"
files = run. files()
for file in files:
if file. name. endswith(extension):
file. delete()
システムメトリクスデータをダウンロードする
このスニペットは、run のすべてのシステムリソース消費メトリクスのデータフレームを生成し、CSVに保存します。
import wandb
api = wandb. Api()
run = api. run("<entity>/<project>/<run_id>" )
system_metrics = run. history(stream= "events" )
system_metrics. to_csv("sys_metrics.csv" )
サマリーメトリクスを更新する
サマリーメトリクスを更新する辞書を渡すことができます。
summary. update({"key" : val})
run を実行したコマンドを取得する
各runは、runの概要ページでそれを開始したコマンドをキャプチャします。このコマンドを API から取得するには次のように実行できます。
import wandb
api = wandb. Api()
run = api. run("<entity>/<project>/<run_id>" )
meta = json. load(run. file("wandb-metadata.json" ). download())
program = ["python" ] + [meta["program" ]] + meta["args" ]
11 - 環境変数
W&B 環境変数を設定します。
スクリプトを自動化された環境で実行するとき、スクリプトの実行前またはスクリプト内で設定された環境変数を使って wandb を制御できます。
# これは秘密であり、バージョン管理にチェックインするべきではありません
WANDB_API_KEY= $YOUR_API_KEY
# 名前とメモはオプションです
WANDB_NAME= "My first run"
WANDB_NOTES= "Smaller learning rate, more regularization."
# wandb/settingsファイルをチェックインしない場合にのみ必要です
WANDB_ENTITY= $username
WANDB_PROJECT= $project
# スクリプトをクラウドに同期したくなければ
os. environ["WANDB_MODE" ] = "offline"
# Sweep IDの追跡をRunオブジェクトと関連クラスに追加
os. environ["WANDB_SWEEP_ID" ] = "b05fq58z"
オプションの環境変数
これらのオプションの環境変数を使用して、リモートマシンでの認証をセットアップすることができます。
変数名
使用法
WANDB_ANONYMOUS
allow
, never
, または must
に設定して、ユーザーが秘密のURLで匿名のrunsを作成できるようにします。
WANDB_API_KEY
あなたのアカウントに関連付けられた認証キーを設定します。キーは設定ページ で確認できます。このキーは、リモートマシンで wandb login
が実行されていない場合に設定する必要があります。
WANDB_BASE_URL
wandb/local を使用している場合、この環境変数を http://YOUR_IP:YOUR_PORT
に設定してください。
WANDB_CACHE_DIR
これはデフォルトで ~/.cache/wandb に設定されています。この環境変数を使用してこの場所を上書きすることができます。
WANDB_CONFIG_DIR
これはデフォルトで ~/.config/wandb に設定されています。この環境変数を使用してこの場所を上書きすることができます。
WANDB_CONFIG_PATHS
カンマで区切られたyamlファイルのリストをwandb.configにロードします。config を参照してください。
WANDB_CONSOLE
stdout / stderr ロギングを無効にする場合はこれを “off” に設定します。これが機能する環境では、デフォルトで “on” に設定されています。
WANDB_DATA_DIR
ステージングアーティファクトがアップロードされる場所。デフォルトの場所はプラットフォームに依存し、platformdirs
Pythonパッケージからの user_data_dir
の値を使用します。
WANDB_DIR
すべての生成されたファイルを wandb ディレクトリーではなくここに保存するために絶対パスを設定します。このディレクトリーが存在しており、プロセスが実行されるユーザーが書き込めることを確認してください 。この設定は、ダウンロードされたアーティファクトの場所には影響しません、それらの場所を設定するには代わりに WANDB_ARTIFACT_DIR を使用してください。
WANDB_ARTIFACT_DIR
すべてのダウンロードされたアーティファクトを artifacts ディレクトリーではなくここに保存するために絶対パスを設定します。このディレクトリーが存在しており、プロセスが実行されるユーザーが書き込めることを確認してください。この設定は、生成されたメタデータファイルの場所には影響しません、それらの場所を設定するには代わりに WANDB_DIR を使用してください。
WANDB_DISABLE_GIT
gitリポジトリをプローブし、最新のコミット / 差分をキャプチャするのを防ぎます。
WANDB_DISABLE_CODE
ノートブックやgit差分の保存を防ぐためにtrueに設定します。gitリポジトリ内にいる場合、依然として現在のコミットを保存します。
WANDB_DOCKER
dockerイメージのダイジェストを設定してrunsの復元を有効にします。これはwandb dockerコマンドで自動的に設定されます。イメージダイジェストを取得するには wandb docker my/image/name:tag --digest
を実行します。
WANDB_ENTITY
あなたのrunに関連付けられたentityです。トレーニングスクリプトのディレクトリーで wandb init
を実行した場合、wandb という名前のディレクトリーが作成され、デフォルトのentityが保存され、ソース管理にチェックインされます。このファイルを作成したくない場合やファイルを上書きしたい場合、環境変数を使用できます。
WANDB_ERROR_REPORTING
wandbが致命的なエラーをエラートラッキングシステムにログするのを防ぎたい場合はfalseに設定します。
WANDB_HOST
システムが提供するホスト名を使用せずにwandbインターフェースで表示したいホスト名を設定します。
WANDB_IGNORE_GLOBS
無視するファイルのグロブのカンマ区切りリストを設定します。これらのファイルはクラウドに同期されません。
WANDB_JOB_NAME
wandb
が作成するジョブに対する名前を指定します。
WANDB_JOB_TYPE
ジョブタイプを指定します。「トレーニング」や「評価」など、異なるタイプのrunsを示します。詳細についてはgrouping を参照してください。
WANDB_MODE
“offline” に設定すると、wandbはrunメタデータをローカルに保存し、サーバーに同期しなくなります。disabled
に設定すると、wandbは完全にオフになります。
WANDB_NAME
あなたのrunの人間が読める名前。設定されていない場合、ランダムに生成されます。
WANDB_NOTEBOOK_NAME
jupyterで実行されている場合、この変数でノートブックの名前を設定できます。これを自動検出しようとします。
WANDB_NOTES
あなたのrunに関する長いメモ。Markdownが許可されており、UIで後で編集できます。
WANDB_PROJECT
あなたのrunに関連付けられたプロジェクトです。これも wandb init
で設定できますが、環境変数は値を上書きします。
WANDB_RESUME
デフォルトでは never に設定されています。auto に設定すると、wandbは自動的に失敗したrunsを再開します。must に設定すると、開始時に必ずrunが存在するように強制します。常に独自のユニークなIDを生成したい場合、allow に設定して常に WANDB_RUN_ID を設定してください。
WANDB_RUN_GROUP
自動的にrunsをまとめるためのexperiment nameを指定します。詳細についてはgrouping を参照してください。
WANDB_RUN_ID
スクリプトの単一runに対応する、グローバルにユニークな文字列(プロジェクトごとに)を設定します。64文字以内でなければなりません。すべての非単語文字はダッシュに変換されます。失敗時の既存のrunを再開するために使用できます。
WANDB_SILENT
wandbログステートメントを黙らせるために true に設定します。これを設定すると、すべてのログが WANDB_DIR /debug.log に書き込まれます。
WANDB_SHOW_RUN
あなたのオペレーティングシステムがサポートしていれば、runのURLを自動的にブラウザで開くために true に設定します。
WANDB_SWEEP_ID
Run
オブジェクトおよび関連クラスにSweep IDの追跡を追加し、UIに表示します。
WANDB_TAGS
runに適用されるタグのカンマ区切りリスト。
WANDB_USERNAME
runに関連付けられたあなたのチームメンバーのユーザー名。これは、サービスアカウントAPIキーと共に使用して、自動化されたrunsをあなたのチームのメンバーに帰属させることができます。
WANDB_USER_EMAIL
runに関連付けられたあなたのチームメンバーのメール。これはサービスアカウントAPIキーと共に使用して、自動化されたrunsをあなたのチームのメンバーに帰属させることができます。
Singularity 環境
Singularity でコンテナを実行している場合、上記の変数に SINGULARITYENV_ をプレフィックスとしてつけて環境変数を渡すことができます。Singularity環境変数に関する詳細はこちら で確認できます。
AWSでの実行
AWSでバッチジョブを実行している場合、W&Bのクレデンシャルでマシンを認証するのは簡単です。設定ページ からAPIキーを取得し、AWSバッチジョブ仕様 で WANDB_API_KEY
環境変数を設定します。