W&B コア
W&B Core は W&B Models と W&B Weave をサポートする基盤フレームワークであり、W&B Platform によってサポートされています。
W&B Core は、ML ライフサイクル全体にわたる機能を提供します。W&B Core を使用すると、次のことができます:
1 - Artifacts
W&B アーティファクトの概要、仕組み、および開始方法。
W&B Artifacts を使用して、W&B Runs の入力と出力としてデータをトラッキングし、バージョン管理します。たとえば、モデルトレーニングの run では、データセットを入力として受け取り、トレーニングされたモデルを出力として生成することがあります。ハイパーパラメーター、メタデータ、メトリクスを run にログし、アーティファクトを使用してモデルをトレーニングするために使用されるデータセットを入力としてログ、トラッキング、およびバージョン管理し、生成されたモデルのチェックポイントを出力として管理できます。
ユースケース
あなたの ML ワークフロー全体で、runs の入力と出力としてアーティファクトを使用することができます。データセット、モデル、または他のアーティファクトをプロセシングの入力として使用することができます。
ユースケース
入力
出力
モデルトレーニング
データセット (トレーニングおよび検証データ)
トレーニングされたモデル
データセットの前処理
データセット (生データ)
データセット (前処理済みデータ)
モデルの評価
モデル + データセット (テストデータ)
W&B Table
モデルの最適化
モデル
最適化されたモデル
続くコードスニペットは順番に実行されることを意図しています。
アーティファクトを作成する
4行のコードでアーティファクトを作成します:
W&B run を作成する。
wandb.Artifact
API を使用してアーティファクトオブジェクトを作成する。
モデルファイルやデータセットなど、一つ以上のファイルをアーティファクトオブジェクトに追加する。
あなたのアーティファクトを W&B にログする。
例として、続くコードスニペットは example_artifact
という名前のアーティファクトに dataset.h5
というファイルをログする方法を示しています:
import wandb
run = wandb. init(project= "artifacts-example" , job_type= "add-dataset" )
artifact = wandb. Artifact(name= "example_artifact" , type= "dataset" )
artifact. add_file(local_path= "./dataset.h5" , name= "training_dataset" )
artifact. save()
# アーティファクトのバージョン "my_data" を dataset.h5 のデータを持つデータセットとしてログします
外部オブジェクトストレージに保存されているファイルやディレクトリーへの参照の追加方法については、
外部ファイルのトラッキング ページを参照してください。
アーティファクトをダウンロードする
use_artifact
メソッドを使用して、あなたの run に入力としてマークしたいアーティファクトを指定します。
続くコードスニペットに続けて、この次のコードブロックは training_dataset
アーティファクトの使用方法を示しています:
artifact = run. use_artifact(
"training_dataset:latest"
) # "my_data" アーティファクトを使用する run オブジェクトを返します
これはアーティファクトオブジェクトを返します。
次に、返されたオブジェクトを使用して、アーティファクトのすべての内容をダウンロードします:
datadir = (
artifact. download()
) # `my_data` アーティファクト全体をデフォルトのディレクトリにダウンロードします。
次のステップ
アーティファクトをバージョン管理 し、更新 する方法を学びます。
オートメーション を使用して、あなたのアーティファクトに対する変更に反応して下流のワークフローをトリガーしたり、Slack チャンネルに通知する方法を学びます。
トレーニングされたモデルを収容するスペースであるレジストリ について学びます。
Python SDK と CLI リファレンスガイドを探索します。
1.1 - アーティファクトを作成する
W&B アーティファクトを作成し、構築します。ファイルや URI リファレンスをアーティファクトに追加する方法を学びましょう。
W&B Python SDK を使用して、W&B Runs から artifacts を構築します。ファイル、ディレクトリ、URI、並行実行からのファイルを artifacts に追加 できます。ファイルをアーティファクトに追加した後、W&B サーバーまたは自分のプライベートサーバー に保存します。
Amazon S3 に保存されているファイルなど、外部ファイルのトラッキング方法については、外部ファイルのトラッキング ページをご覧ください。
アーティファクトの構築方法
3 つのステップで W&B Artifact を構築します。
1. wandb.Artifact()
でアーティファクト Python オブジェクトを作成する
wandb.Artifact()
クラスを初期化して、アーティファクトオブジェクトを作成します。以下のパラメータを指定します。
Name : アーティファクトの名前を指定します。名前は一意で説明的、かつ記憶しやすいものにしてください。Artifacts の名前は、W&B アプリ UI でアーティファクトを識別するとき、またそのアーティファクトを使用したいときに使用します。
Type : タイプを指定します。タイプはシンプルで説明的で、機械学習パイプラインの単一ステップに対応するものでなければなりません。一般的なアーティファクトタイプには 'dataset'
や 'model'
があります。
指定した「name」と「type」は、有向非循環グラフを作成するために使用されます。これは、W&B アプリでアーティファクトのリネージを見ることができることを意味します。
詳細については、アーティファクトグラフの探索とトラバース をご覧ください。
Artifacts は、たとえ異なる types パラメータを指定しても、同じ名前を持つことはできません。つまり、cats
という名前のタイプ dataset
のアーティファクトを作成し、同じ名前のタイプ model
のアーティファクトを作成することはできません。
アーティファクトオブジェクトを初期化する際に、オプションで説明とメタデータを提供できます。利用可能な属性とパラメータの詳細については、Python SDK Reference Guide の wandb.Artifact
クラス定義をご覧ください。
次の例は、データセットアーティファクトを作成する方法を示しています。
import wandb
artifact = wandb. Artifact(name= "<replace>" , type= "<replace>" )
先行のコードスニペット内の文字列の引数を、自分の 固有の名前とタイプで置き換えてください。
2. アーティファクトに 1 つ以上のファイルを追加する
ファイル、ディレクトリ、外部 URI リファレンス(例: Amazon S3)などをアーティファクトメソッドで追加します。たとえば、単一のテキストファイルを追加するには、add_file
メソッドを使用します。
artifact. add_file(local_path= "hello_world.txt" , name= "optional-name" )
また、複数のファイルを add_dir
メソッドで追加することもできます。ファイルを追加する方法の詳細については、アーティファクトの更新 をご覧ください。
3. アーティファクトを W&B サーバーに保存する
最後に、アーティファクトを W&B サーバーに保存します。Artifacts は run に関連付けられます。したがって、run オブジェクトの log_artifact()
メソッドを使用してアーティファクトを保存します。
# W&B Run を作成します。'job-type' を置き換えます。
run = wandb. init(project= "artifacts-example" , job_type= "job-type" )
run. log_artifact(artifact)
W&B Run の外でアーティファクトを作成することもできます。詳細については、外部ファイルのトラッキング をご覧ください。
log_artifact
の呼び出しは、パフォーマンスを向上させるために非同期で行われます。これにより、ループ内でアーティファクトをログする際に予期しない挙動が生じることがあります。たとえば、
for i in range(10 ):
a = wandb. Artifact(
"race" ,
type= "dataset" ,
metadata= {
"index" : i,
},
)
# ... アーティファクト a にファイルを追加 ...
run. log_artifact(a)
アーティファクトバージョン v0 は、そのメタデータにインデックス 0 があることを保証しません。アーティファクトは任意の順序でログされる可能性があるためです。
アーティファクトにファイルを追加
以下のセクションでは、異なるファイルタイプおよび並行実行からのアーティファクトを構築する方法を説明します。
以下の例では、複数のファイルとディレクトリ構造を持つプロジェクトディレクトリを前提とします。
project-directory
|-- images
| |-- cat.png
| +-- dog.png
|-- checkpoints
| +-- model.h5
+-- model.h5
単一ファイルを追加
以下のコードスニペットは、ローカルの単一ファイルをアーティファクトに追加する方法を示しています。
# 単一のファイルを追加
artifact. add_file(local_path= "path/file.format" )
たとえば、作業中のローカルディレクトリに 'file.txt'
というファイルがあるとします。
artifact. add_file("path/file.txt" ) # `file.txt` として追加されました
アーティファクトは次の内容を持つようになります。
file.txt
オプションで、アーティファクト内の name
パラメータの希望するパスを渡して下さい。
artifact. add_file(local_path= "path/file.format" , name= "new/path/file.format" )
アーティファクトは次のように保存されます。
new/path/file.txt
API Call
Resulting artifact
artifact.add_file('model.h5')
model.h5
artifact.add_file('checkpoints/model.h5')
model.h5
artifact.add_file('model.h5', name='models/mymodel.h5')
models/mymodel.h5
複数ファイルを追加
以下のコードスニペットは、ローカルのディレクトリ全体をアーティファクトに追加する方法を示しています。
# ディレクトリを再帰的に追加
artifact. add_dir(local_path= "path/file.format" , name= "optional-prefix" )
以下の API 呼び出しは、以下のアーティファクトコンテンツを生成します。
API Call
Resulting artifact
artifact.add_dir('images')
cat.png
dog.png
artifact.add_dir('images', name='images')
images/cat.png
images/dog.png
artifact.new_file('hello.txt')
hello.txt
URI リファレンスを追加
アーティファクトは、URI が W&B ライブラリが扱えるスキームを持つ場合、再現性のためにチェックサムやその他の情報をトラッキングします。
add_reference
メソッドを使用して、アーティファクトに外部 URI リファレンスを追加します。 'uri'
文字列を自分の URI で置き換えてください。オプションで、アーティファクト内の name
パラメータの希望するパスを渡して下さい。
# URI リファレンスを追加
artifact. add_reference(uri= "uri" , name= "optional-name" )
現在、アーティファクトは以下の URI スキームをサポートしています。
http(s)://
: HTTP 上でアクセス可能なファイルへのパス。HTTP サーバーが ETag
や Content-Length
レスポンスヘッダーをサポートしている場合、アーティファクトはエタグとサイズメタデータの形でチェックサムをトラッキングします。
s3://
: S3 内のオブジェクトまたはオブジェクトプレフィックスへのパス。アーティファクトは、参照されたオブジェクトのためのチェックサムとバージョン管理情報(バケットにオブジェクトバージョン管理が有効になっている場合)をトラッキングします。オブジェクトプレフィックスは、プレフィックスの下にあるオブジェクトを最大 10,000 個まで含むように展開されます。
gs://
: GCS 内のオブジェクトまたはオブジェクトプレフィックスへのパス。アーティファクトは、参照されたオブジェクトのためのチェックサムとバージョン管理情報(バケットにオブジェクトバージョン管理が有効になっている場合)をトラッキングします。オブジェクトプレフィックスは、プレフィックスの下にあるオブジェクトを最大 10,000 個まで含むように展開されます。
以下の API 呼び出しは、以下のアーティファクトを生成します。
API call
Resulting artifact contents
artifact.add_reference('s3://my-bucket/model.h5')
model.h5
artifact.add_reference('s3://my-bucket/checkpoints/model.h5')
model.h5
artifact.add_reference('s3://my-bucket/model.h5', name='models/mymodel.h5')
models/mymodel.h5
artifact.add_reference('s3://my-bucket/images')
cat.png
dog.png
artifact.add_reference('s3://my-bucket/images', name='images')
images/cat.png
images/dog.png
並行実行からアーティファクトにファイルを追加
大規模な datasets または分散トレーニングの場合、複数の並行 run が単一のアーティファクトに貢献する必要があるかもしれません。
import wandb
import time
# デモンストレーションのために、run を並行して起動するために ray を使用します。
# 並行 run は任意の方法で調整できます。
import ray
ray. init()
artifact_type = "dataset"
artifact_name = "parallel-artifact"
table_name = "distributed_table"
parts_path = "parts"
num_parallel = 5
# 並行ライターの各バッチは、その独自の
# グループ名を持つ必要があります。
group_name = "writer-group- {} " . format(round(time. time()))
@ray.remote
def train (i):
"""
各ライターは、アーティファクトに 1 つの画像を追加します。
"""
with wandb. init(group= group_name) as run:
artifact = wandb. Artifact(name= artifact_name, type= artifact_type)
# wandb テーブルにデータを追加します。この場合、例としてデータを使用します。
table = wandb. Table(columns= ["a" , "b" , "c" ], data= [[i, i * 2 , 2 ** i]])
# アーティファクト内のフォルダーにテーブルを追加します。
artifact. add(table, " {} /table_ {} " . format(parts_path, i))
# アーティファクトをアップサーティングすることで、アーティファクトにデータを作成または追加します。
run. upsert_artifact(artifact)
# 並行して run を起動
result_ids = [train. remote(i) for i in range(num_parallel)]
# ファイルがアーティファクトに追加されたことを確認するために
# すべてのライターを待機します。
ray. get(result_ids)
# すべてのライターが終了したら、アーティファクトを終了して
# 使用可能であることをマークします。
with wandb. init(group= group_name) as run:
artifact = wandb. Artifact(artifact_name, type= artifact_type)
# "PartitionTable" を作成し、フォルダーのテーブルを指すようにして
# アーティファクトに追加します。
artifact. add(wandb. data_types. PartitionedTable(parts_path), table_name)
# アーティファクトを終了することで、このバージョンへの
# 将来の"upserts"を禁止します。
run. finish_artifact(artifact)
1.2 - アーティファクトをダウンロードして使用する
複数の Projects から Artifacts をダウンロードして使用する。
すでに W&B サーバーに保存されているアーティファクトをダウンロードして使用するか、アーティファクト オブジェクトを構築して、必要に応じて重複排除のためにそれを渡します。
閲覧専用シートのチームメンバーは、アーティファクトをダウンロードできません。
W&B に保存されているアーティファクトをダウンロードして使用する
W&B に保存されているアーティファクトを W&B Run の内外でダウンロードして使用します。Public API(wandb.Api
)を使用して、W&B にすでに保存されているデータをエクスポート(または更新)します。詳細については、W&B Public API Reference guide を参照してください。
During a run
Outside of a run
W&B CLI
まず、W&B Python SDK をインポートします。次に、W&B Run を作成します。
import wandb
run = wandb. init(project= "<example>" , job_type= "<job-type>" )
使用したいアーティファクトを use_artifact
メソッドで指定します。これにより run オブジェクトが返されます。次のコードスニペットでは、'bike-dataset'
というアーティファクトを 'latest'
というエイリアスで指定しています。
artifact = run. use_artifact("bike-dataset:latest" )
戻されたオブジェクトを使って、アーティファクトの内容をすべてダウンロードします。
datadir = artifact. download()
アーティファクトの内容を特定のディレクトリーにダウンロードするには、root
パラメータにパスをオプションで渡すことができます。詳細については、Python SDK Reference Guide を参照してください。
get_path
メソッドを使用して、ファイルのサブセットのみをダウンロードできます。
path = artifact. get_path(name)
これにより、パス name
のファイルのみが取得されます。次のメソッドを持つ Entry
オブジェクトが返されます。
Entry.download
: パス name
のアーティファクトからファイルをダウンロード
Entry.ref
: add_reference
がエントリーを参照として保存している場合、URI を返します。
W&B が処理方法を知っているスキームを持つ参照は、アーティファクトファイルと同様にダウンロードされます。詳細については、Track external files を参照してください。
まず、W&B SDK をインポートします。次に、Public API クラスからアーティファクトを作成します。エンティティ、プロジェクト、アーティファクト、およびエイリアスをそのアーティファクトに関連付けます。
import wandb
api = wandb. Api()
artifact = api. artifact("entity/project/artifact:alias" )
戻されたオブジェクトを使って、アーティファクトの内容をダウンロードします。
アーティファクトの内容を特定のディレクトリーにダウンロードするために root
パラメータにパスをオプションで渡すことができます。詳細については、API Reference Guide を参照してください。
wandb artifact get
コマンドを使用して、W&B サーバーからアーティファクトをダウンロードします。
$ wandb artifact get project/artifact:alias --root mnist/
アーティファクトの一部をダウンロード
プレフィックスを基にアーティファクトの一部をダウンロードすることができます。path_prefix
パラメータを使用して、単一のファイルまたはサブフォルダーの内容をダウンロードします。
artifact = run. use_artifact("bike-dataset:latest" )
artifact. download(path_prefix= "bike.png" ) # bike.png のみをダウンロード
または、特定のディレクトリーからファイルをダウンロードすることもできます。
artifact. download(path_prefix= "images/bikes/" ) # images/bikes ディレクトリー内のファイルをダウンロード
別のプロジェクトからアーティファクトを使用する
アーティファクトの名前とともにそのプロジェクト名を指定して、アーティファクトを参照します。また、エンティティ名でアーティファクトの名前を指定して、エンティティを超えてアーティファクトを参照することもできます。
次のコード例は、現在の W&B run に他のプロジェクトからのアーティファクトを入力としてクエリする方法を示しています。
import wandb
run = wandb. init(project= "<example>" , job_type= "<job-type>" )
# 他のプロジェクトからアーティファクトを W&B でクエリして、それを入力として
# この run にマークします。
artifact = run. use_artifact("my-project/artifact:alias" )
# 別のエンティティからアーティファクトを使用し、それを入力として
# この run にマークします。
artifact = run. use_artifact("my-entity/my-project/artifact:alias" )
アーティファクトを同時に構築して使用する
アーティファクトを同時に構築して使用します。アーティファクト オブジェクトを作成して、それを use_artifact に渡します。これにより、W&B にアーティファクトが存在しない場合は作成されます。use_artifact
API は冪等性があり、あなたが好きなだけ何度も呼び出すことができます。
import wandb
artifact = wandb. Artifact("reference model" )
artifact. add_file("model.h5" )
run. use_artifact(artifact)
アーティファクトの構築に関する詳細については、Construct an artifact を参照してください。
1.3 - アーティファクトを更新する
既存のアーティファクトを W&B run の内外で更新します。
アーティファクトの description
、metadata
、および alias
に希望する値を渡します。W&B サーバー上でアーティファクトを更新するには、save()
メソッドを呼び出してください。W&B Run の間または Run の外でアーティファクトを更新することができます。
W&B Public API (wandb.Api
) を使用して、Run の外でアーティファクトを更新します。Artifact API (wandb.Artifact
) を使用して、Run の間にアーティファクトを更新します。
Model Registry にリンクされたアーティファクトのエイリアスを更新することはできません。
During a run
Outside of a run
With collections
次のコード例は、wandb.Artifact
API を使用してアーティファクトの説明を更新する方法を示しています。
import wandb
run = wandb. init(project= "<example>" )
artifact = run. use_artifact("<artifact-name>:<alias>" )
artifact. description = "<description>"
artifact. save()
次のコード例は、wandb.Api
API を使用してアーティファクトの説明を更新する方法を示しています。
import wandb
api = wandb. Api()
artifact = api. artifact("entity/project/artifact:alias" )
# 説明を更新する
artifact. description = "My new description"
# メタデータキーを選択的に更新する
artifact. metadata["oldKey" ] = "new value"
# メタデータを完全に置き換える
artifact. metadata = {"newKey" : "new value" }
# エイリアスを追加する
artifact. aliases. append("best" )
# エイリアスを削除する
artifact. aliases. remove("latest" )
# エイリアスを完全に置き換える
artifact. aliases = ["replaced" ]
# すべてのアーティファクトの変更を保存する
artifact. save()
詳細は、Weights and Biases Artifact API を参照してください。
コレクションも単一のアーティファクトと同様に更新することができます。
import wandb
run = wandb. init(project= "<example>" )
api = wandb. Api()
artifact = api. artifact_collection(type= "<type-name>" , collection= "<collection-name>" )
artifact. name = "<new-collection-name>"
artifact. description = "<This is where you'd describe the purpose of your collection.>"
artifact. save()
詳細は Artifacts Collection リファレンスを参照してください。
1.4 - アーティファクトのエイリアスを作成する
W&B アーティファクトのカスタムエイリアスを作成します。
エイリアスを特定のバージョンへのポインターとして使用します。デフォルトでは、Run.log_artifact
はログされたバージョンに latest
エイリアスを追加します。
アーティファクトバージョン v0
は、アーティファクトを初めてログする際に作成され、アーティファクトに付随します。W&B は、同じアーティファクトに再度ログを行うときにコンテンツのチェックサムを行います。アーティファクトが変更された場合、W&B は新しいバージョン v1
を保存します。
例えば、トレーニングスクリプトがデータセットの最新バージョンを取得する場合、そのアーティファクトを使用するときに latest
を指定します。次のコード例は、エイリアス latest
を持つデータセットアーティファクト bike-dataset
をダウンロードする方法を示しています。
import wandb
run = wandb. init(project= "<example-project>" )
artifact = run. use_artifact("bike-dataset:latest" )
artifact. download()
アーティファクトバージョンにカスタムエイリアスを適用することもできます。例えば、モデルのチェックポイントがメトリック AP-50 で最高であることを示すために、文字列 'best-ap50'
をエイリアスとしてモデルアーティファクトにログを記録する際に追加できます。
artifact = wandb. Artifact("run-3nq3ctyy-bike-model" , type= "model" )
artifact. add_file("model.h5" )
run. log_artifact(artifact, aliases= ["latest" , "best-ap50" ])
1.5 - アーティファクト バージョンを作成する
新しいアーティファクト バージョンを単一の run または分散プロセスから作成します。
新しいアーティファクトバージョンをシングル run で作成するか、分散 run を使って共同で作成します。以前のバージョンから新しいアーティファクトバージョンを作成することもできます。これを インクリメンタルアーティファクト と呼びます。
アーティファクト内のファイルの一部に変更を加える必要がある場合、元のアーティファクトのサイズがかなり大きい場合は、インクリメンタルアーティファクトを作成することをお勧めします。
新しいアーティファクトバージョンをゼロから作成する
新しいアーティファクトバージョンを作成する方法は、シングル run と分散 run による2つがあります。それぞれ次のように定義されています:
シングル run : シングル run が新しいバージョンのすべてのデータを提供します。これは最も一般的なケースで、run が必要なデータを完全に再現する場合に最適です。例: 保存されたモデルやモデル予測を分析用のテーブルに出力する。
分散 run : 複数の run のセットが共同して新しいバージョンのすべてのデータを提供します。これは、複数の run が並行してデータを生成する分散ジョブに最適です。例: モデルを分散的に評価し、予測を出力する。
W&B は、プロジェクト内に存在しない名前を wandb.Artifact
API に渡すと、新しいアーティファクトを作成し、それに v0
エイリアスを割り当てます。同じアーティファクトに再度ログを記録する際に内容をチェックサムします。アーティファクトが変更されている場合、W&B は新しいバージョン v1
を保存します。
プロジェクト内に既存のアーティファクトと一致する名前とアーティファクトタイプを wandb.Artifact
API に渡すと、W&B は既存のアーティファクトを取得します。取得されたアーティファクトはバージョンが 1 より大きくなります。
シングル run
アーティファクト内のすべてのファイルを生成するシングル run によって、新しいバージョンのアーティファクトをログします。このケースは、シングル run がアーティファクト内のすべてのファイルを生成する場合に発生します。
ユースケースに基づいて、以下のタブのいずれかを選択して、run 内または run 外で新しいアーティファクトバージョンを作成してください:
Inside a run
Outside of a run
W&B run 内でアーティファクトバージョンを作成します:
wandb.init
を使って run を作成。
wandb.Artifact
で新しいアーティファクトを作成するか、既存のアーティファクトを取得。
.add_file
を使用してファイルをアーティファクトに追加。
.log_artifact
を使ってアーティファクトを run にログ。
with wandb. init() as run:
artifact = wandb. Artifact("artifact_name" , "artifact_type" )
# Add Files and Assets to the artifact using
# `.add`, `.add_file`, `.add_dir`, and `.add_reference`
artifact. add_file("image1.png" )
run. log_artifact(artifact)
W&B run の外でアーティファクトバージョンを作成します:
wanb.Artifact
で新しいアーティファクトを作成するか、既存のアーティファクトを取得。
.add_file
を使用してファイルをアーティファクトに追加。
.save
でアーティファクトを保存。
artifact = wandb. Artifact("artifact_name" , "artifact_type" )
# Add Files and Assets to the artifact using
# `.add`, `.add_file`, `.add_dir`, and `.add_reference`
artifact. add_file("image1.png" )
artifact. save()
分散 run
バージョンをコミットする前に、複数の run が共同で作業します。これは、上記のシングル run モードとは対照的です。こちらは1つの run が新しいバージョンのすべてのデータを提供します。
コレクション内の各 run は、同じバージョンで共同作業をするために、同じユニークな ID ( distributed_id
と呼ばれる) を認識している必要があります。デフォルトでは、存在する場合、W&B は run の group
を、wandb.init(group=GROUP)
によって設定された distributed_id
として使用します。
バージョンを「コミット」し、その状態を永続的にロックする最終 run が必要です。
協調的なアーティファクトに追加するには upsert_artifact
を使用し、コミットを最終的にするには finish_artifact
を使用します。
以下の例を考えてみてください。異なる run (以下で Run 1 、Run 2 、Run 3 とラベル付けされている) が upsert_artifact
を使って同じアーティファクトに異なる画像ファイルを追加します。
Run 1
with wandb. init() as run:
artifact = wandb. Artifact("artifact_name" , "artifact_type" )
# Add Files and Assets to the artifact using
# `.add`, `.add_file`, `.add_dir`, and `.add_reference`
artifact. add_file("image1.png" )
run. upsert_artifact(artifact, distributed_id= "my_dist_artifact" )
Run 2
with wandb. init() as run:
artifact = wandb. Artifact("artifact_name" , "artifact_type" )
# Add Files and Assets to the artifact using
# `.add`, `.add_file`, `.add_dir`, and `.add_reference`
artifact. add_file("image2.png" )
run. upsert_artifact(artifact, distributed_id= "my_dist_artifact" )
Run 3
Run 1 と Run 2 が完了した後に実行する必要があります。finish_artifact
を呼び出す Run は、アーティファクトにファイルを含めることができますが、必須ではありません。
with wandb. init() as run:
artifact = wandb. Artifact("artifact_name" , "artifact_type" )
# Add Files and Assets to the artifact
# `.add`, `.add_file`, `.add_dir`, and `.add_reference`
artifact. add_file("image3.png" )
run. finish_artifact(artifact, distributed_id= "my_dist_artifact" )
既存のバージョンから新しいアーティファクトバージョンを作成する
前のアーティファクトバージョンからファイルのサブセットを追加、変更、または削除して、変更されていないファイルを再インデックスする必要はありません。前のアーティファクトバージョンからファイルのサブセットを追加、変更、または削除すると、新しいアーティファクトバージョンが作成され、これをインクリメンタルアーティファクト と呼びます。
以下は、遭遇する可能性のあるインクリメンタルな変更の各タイプに対するシナリオです:
add: 新しいバッチを収集した後、定期的にデータセットに新しいファイルのサブセットを追加します。
remove: 重複ファイルをいくつか発見し、アーティファクトからそれらを削除することを希望します。
update: ファイルのサブセットに対する注釈を修正し、古いファイルを正しいものと置き換えます。
インクリメンタルアーティファクトとしての同じ機能を実行するためにアーティファクトをゼロから作成することもできます。しかし、アーティファクトをゼロから作成する場合、アーティファクトのすべての内容をローカルディスクに持っている必要があります。インクリメンタルな変更を行う場合、前のアーティファクトバージョンのファイルを変更せずに、個々のファイルを追加、削除、または変更できます。
単一の run で、または複数の run (分散モード) でインクリメンタルアーティファクトを作成できます。
以下の手順に従って、アーティファクトをインクリメンタルに変更します:
インクリメンタル変更を行いたいアーティファクトバージョンを取得します:
Inside a run
Outside of a run
saved_artifact = run. use_artifact("my_artifact:latest" )
client = wandb. Api()
saved_artifact = client. artifact("my_artifact:latest" )
以下の方法でドラフトを作成します:
draft_artifact = saved_artifact. new_draft()
次のバージョンで見たいインクリメンタルな変更を行います。既存のエントリーを追加、削除、または変更することができます。
各変更を行うための例については、以下のいずれかのタブを選択してください:
add_file
メソッドで既存のアーティファクトバージョンにファイルを追加します:
draft_artifact. add_file("file_to_add.txt" )
add_dir
メソッドを使用してディレクトリを追加することで、複数のファイルを追加することもできます。
remove
メソッドで既存のアーティファクトバージョンからファイルを削除します:
draft_artifact. remove("file_to_remove.txt" )
remove
メソッドにディレクトリパスを渡すことで、複数のファイルを削除することもできます。
ドラフトから古い内容を削除し、新しい内容を追加することで、内容を変更または置き換えます:
draft_artifact. remove("modified_file.txt" )
draft_artifact. add_file("modified_file.txt" )
最後に、変更をログまたは保存します。以下のタブは、W&B run の内外で変更を保存する方法を示しています。適切なユースケースに応じてタブを選択してください:
Inside a run
Outside of a run
run. log_artifact(draft_artifact)
以上のコード例をまとめると、以下のようになります:
Inside a run
Outside of a run
with wandb. init(job_type= "modify dataset" ) as run:
saved_artifact = run. use_artifact(
"my_artifact:latest"
) # fetch artifact and input it into your run
draft_artifact = saved_artifact. new_draft() # create a draft version
# modify a subset of files in the draft version
draft_artifact. add_file("file_to_add.txt" )
draft_artifact. remove("dir_to_remove/" )
run. log_artifact(
artifact
) # log your changes to create a new version and mark it as output to your run
client = wandb. Api()
saved_artifact = client. artifact("my_artifact:latest" ) # load your artifact
draft_artifact = saved_artifact. new_draft() # create a draft version
# modify a subset of files in the draft version
draft_artifact. remove("deleted_file.txt" )
draft_artifact. add_file("modified_file.txt" )
draft_artifact. save() # commit changes to the draft
1.6 - 外部ファイルをトラックする
W&B の外部に保存されたファイルも、Amazon S3 バケット、GCS バケット、HTTP ファイルサーバー、または NFS 共有内のファイルとしてトラックできます。
リファレンスアーティファクト を使用して、Amazon S3 バケット、GCS バケット、Azure blob、HTTP ファイルサーバー、または NFS シェアなど、W&B システムの外部に保存されたファイルをトラッキングします。 W&B CLI を使用して、W&B Run の外部でアーティファクトをログします。
Run の外部でアーティファクトをログする
W&B は、run の外部でアーティファクトをログするときに run を作成します。各アーティファクトは run に属し、run はプロジェクトに属します。アーティファクト (バージョン) もコレクションに属し、タイプを持ちます。
wandb artifact put
コマンドを使用して、W&B の run の外部でアーティファクトを W&B サーバーにアップロードします。アーティファクトを属させたいプロジェクトの名前とアーティファクトの名前 (project/artifact_name
) を指定します。必要に応じて、タイプ (TYPE
) を指定します。以下のコードスニペットでは、アップロードしたいアーティファクトのファイルパスに PATH
を置き換えてください。
$ wandb artifact put --name project/artifact_name --type TYPE PATH
指定したプロジェクトが存在しない場合、W&B は新しいプロジェクトを作成します。アーティファクトのダウンロード方法については、アーティファクトのダウンロードと使用 を参照してください。
W&B の外部でアーティファクトをトラッキングする
W&B Artifacts をデータセットのバージョン管理やモデルのリネージに使用し、リファレンスアーティファクト を使用して W&B サーバーの外部に保存されたファイルをトラッキングします。このモードでは、アーティファクトはファイルに関するメタデータ (例えば、URL、サイズ、チェックサム) のみを保存します。基礎データはシステムから離れることはありません。ファイルとディレクトリーを W&B サーバーに保存する方法については、クイックスタート を参照してください。
以下は、リファレンスアーティファクトを作成し、それをワークフローに最適に組み込む方法を説明します。
Amazon S3 / GCS / Azure Blob Storage リファレンス
W&B Artifacts をデータセットとモデルのバージョン管理に使用して、クラウドストレージバケットでのリファレンスをトラッキングします。アーティファクトリファレンスを使用すると、既存のストレージレイアウトに変更を加えることなく、バケットの上にシームレスにトラッキングをレイヤリングできます。
Artifacts は基礎となるクラウドストレージベンダー (AWS、GCP、Azure など) を抽象化します。次のセクションで説明される情報は、Amazon S3、Google Cloud Storage、Azure Blob Storage に共通して適用されます。
W&B Artifacts は、MinIO を含む任意の Amazon S3 互換インターフェースをサポートしています。 AWS_S3_ENDPOINT_URL
環境変数を MinIO サーバーを指すように設定すれば、以下のスクリプトはそのまま動作します。
次の構造を持つバケットがあると仮定します:
s3://my-bucket
+-- datasets/
| +-- mnist/
+-- models/
+-- cnn/
mnist/
の下には、私たちのデータセットである画像のコレクションがあります。アーティファクトでそれをトラッキングしましょう:
import wandb
run = wandb. init()
artifact = wandb. Artifact("mnist" , type= "dataset" )
artifact. add_reference("s3://my-bucket/datasets/mnist" )
run. log_artifact(artifact)
デフォルトでは、W&B はオブジェクトプリフィックスを追加する際に 10,000 オブジェクトの制限を課しています。この制限は、add_reference
の呼び出しで max_objects=
を指定することによって調整できます。
新しいリファレンスアーティファクト mnist:latest
は、通常のアーティファクトと非常に似た外観と挙動を持っています。唯一の違いは、アーティファクトが S3/GCS/Azure オブジェクトに関するメタデータ (例えば、ETag、サイズ、バージョン ID) のみを含んでいることです (バケットにオブジェクトのバージョン管理が有効になっている場合)。
W&B は、使用するクラウドプロバイダーに基づいてクレデンシャルを探すデフォルトのメカニズムを使用します。クラウドプロバイダーからのドキュメントを読み、使用されるクレデンシャルについて詳しく学びましょう。
AWS では、バケットが設定されたユーザーのデフォルトリージョンに位置していない場合、AWS_REGION
環境変数をバケットリージョンに一致させる必要があります。
このアーティファクトを通常のアーティファクトのように扱うことができます。アプリ UI では、ファイルブラウザを使用してリファレンスアーティファクトの内容を閲覧したり、完全な依存関係グラフを探索したり、アーティファクトのバージョン履歴をスキャンしたりできます。
画像、オーディオ、ビデオ、ポイントクラウドといったリッチメディアは、バケットの CORS 設定によってアプリ UI で適切にレンダリングされない可能性があります。バケットの CORS 設定で app.wandb.ai を許可リストに追加することで、アプリ UI でこれらのリッチメディアが正しくレンダリングされるようになります。
パネルは、プライベートバケットの場合アプリ UI でレンダリングされないかもしれません。もし会社が VPN を使用している場合は、VPN 内の IP をホワイトリストに追加するようにバケットのアクセスポリシーを更新できます。
リファレンスアーティファクトをダウンロードする
import wandb
run = wandb. init()
artifact = run. use_artifact("mnist:latest" , type= "dataset" )
artifact_dir = artifact. download()
W&B は、リファレンスアーティファクトをダウンロードする際に、アーティファクトがログされたときに記録されたメタデータを使用して、基となるバケットからファイルを取得します。バケットにオブジェクトのバージョン管理が有効になっている場合、W&B はアーティファクトがログされた時点のファイルの状態に対応するオブジェクトバージョンを取得します。これは、バケットの内容が進化しても、アーティファクトがトレーニングされた特定の反復にあなたのデータを指し示すことができることを意味します。アーティファクトはトレーニング時点でのバケットのスナップショットとして機能します。
ワークフローの一環としてファイルを上書きする場合は、W&B はストレージバケットの「オブジェクトバージョン管理」を有効にすることを推奨します。バケットにバージョン管理が有効になっている場合、上書きされたファイルへのリファレンスを持つアーティファクトも依然として無傷であることになります。なぜなら、古いバージョンのオブジェクトが保持されるからです。
ユースケースに基づいて、オブジェクトバージョン管理を有効にする手順をお読みください。AWS 、GCP 、Azure 。
すべてを結び付ける
次のコード例は、トレーニングジョブに供給される Amazon S3、GCS、または Azure 上のデータセットをトラッキングするために使用できる単純なワークフローを示しています:
import wandb
run = wandb. init()
artifact = wandb. Artifact("mnist" , type= "dataset" )
artifact. add_reference("s3://my-bucket/datasets/mnist" )
# アーティファクトをトラッキングし、それを
# この run の入力としてマークします。
# バケット内のファイルが変更された場合にのみ、新しい
# アーティファクトバージョンがログされます。
run. use_artifact(artifact)
artifact_dir = artifact. download()
# トレーニングをここで実行...
モデルをトラッキングするために、トレーニングスクリプトがモデルファイルをバケットにアップロードした後に、モデルアーティファクトをログできます:
import boto3
import wandb
run = wandb. init()
# トレーニングをここで実行...
s3_client = boto3. client("s3" )
s3_client. upload_file("my_model.h5" , "my-bucket" , "models/cnn/my_model.h5" )
model_artifact = wandb. Artifact("cnn" , type= "model" )
model_artifact. add_reference("s3://my-bucket/models/cnn/" )
run. log_artifact(model_artifact)
GCP または Azure のリファレンスでのアーティファクトのトラッキング方法についてのエンドツーエンドのガイドを読むには、次のレポートをご覧ください:
ファイルシステムリファレンス
データセットへの高速アクセスのためのもう一つの一般的なパターンは、NFS マウントポイントをトレーニングジョブを実行するすべてのマシンでリモートファイルシステムに公開することです。これは、クラウドストレージバケットよりもさらに簡単なソリューションになる可能性があります。トレーニングスクリプトの視点からは、ファイルはちょうどローカルファイルシステムに置かれているかのように見えるからです。幸運にも、その使いやすさは、ファイルシステムへのリファレンスをトラッキングするために Artifacts を使用する場合にも当てはまります。ファイルシステムがマウントされているかどうかに関係なくです。
次の構造を持つファイルシステムが /mount
にマウントされていると仮定します:
mount
+-- datasets/
| +-- mnist/
+-- models/
+-- cnn/
mnist/
の下には、私たちのデータセットである画像のコレクションがあります。アーティファクトでそれをトラッキングしましょう:
import wandb
run = wandb. init()
artifact = wandb. Artifact("mnist" , type= "dataset" )
artifact. add_reference("file:///mount/datasets/mnist/" )
run. log_artifact(artifact)
デフォルトでは、W&B はディレクトリへのリファレンスを追加する際に 10,000 ファイルの制限を課しています。この制限は、add_reference
の呼び出しで max_objects=
を指定することによって調整できます。
URL のトリプルスラッシュに注目してください。最初のコンポーネントは、ファイルシステムリファレンスの使用を示す file://
プレフィックスです。二番目は、データセットのパス /mount/datasets/mnist/
です。
結果として得られるアーティファクト mnist:latest
は通常のアーティファクトのように見え、機能します。唯一の違いは、アーティファクトがファイルに関するメタデータ (サイズや MD5 チェックサムなど) のみを含んでいることです。ファイル自体はシステムから離れることはありません。
このアーティファクトを通常のアーティファクトのように操作できます。UI では、ファイルブラウザを使用してリファレンスアーティファクトの内容を閲覧したり、完全な依存関係グラフを探索したり、アーティファクトのバージョン履歴をスキャンしたりできます。ただし、アーティファクト自体にデータが含まれていないため、UI では画像、オーディオなどのリッチメディアをレンダリングできません。
リファレンスアーティファクトをダウンロードするのは簡単です:
import wandb
run = wandb. init()
artifact = run. use_artifact("entity/project/mnist:latest" , type= "dataset" )
artifact_dir = artifact. download()
ファイルシステムリファレンスの場合、download()
操作は参照されたパスからファイルをコピーして、アーティファクトディレクトリを構築します。上記の例では、/mount/datasets/mnist
の内容がディレクトリ artifacts/mnist:v0/
にコピーされます。アーティファクトが上書きされたファイルへのリファレンスを含む場合、download()
はエラーを投げます。アーティファクトがもはや再構築できないからです。
すべてをまとめると、ここにマウントされたファイルシステムの下のデータセットをトラッキングして、トレーニングジョブに供給するために使用できる簡単なワークフローがあります:
import wandb
run = wandb. init()
artifact = wandb. Artifact("mnist" , type= "dataset" )
artifact. add_reference("file:///mount/datasets/mnist/" )
# アーティファクトをトラッキングし、それを
# この run の入力としてマークします。ディレクトリ下の
# ファイルが変更された場合にのみ、新しいアーティファクト
# バージョンがログされます。
run. use_artifact(artifact)
artifact_dir = artifact. download()
# トレーニングをここで実行...
モデルをトラッキングするために、トレーニングスクリプトがモデルファイルをマウントポイントに書き込んだ後に、モデルアーティファクトをログできます:
import wandb
run = wandb. init()
# トレーニングをここで実行...
# モデルをディスクに書き込む
model_artifact = wandb. Artifact("cnn" , type= "model" )
model_artifact. add_reference("file:///mount/cnn/my_model.h5" )
run. log_artifact(model_artifact)
1.7 - データを管理する
1.7.1 - アーティファクトデータ保持の管理
存続期間 (TTL) ポリシー
W&B の Artifacts のタイム・トゥ・リブ(TTL)ポリシーを使用して、Artifacts が W&B から削除されるスケジュールを設定します。Artifact を削除すると、W&B はそのアーティファクトを ソフト削除 としてマークします。つまり、アーティファクトは削除対象としてマークされますが、ファイルはすぐにストレージから削除されるわけではありません。W&B がアーティファクトを削除する方法の詳細については、アーティファクトを削除 ページを参照してください。
W&B アプリで Artifacts TTL を使って データ保持を管理する方法を学ぶには、この ビデオチュートリアルをご覧ください。
W&B は、モデルレジストリにリンクされたモデルアーティファクトの TTL ポリシーを設定するオプションを非アクティブ化します。これは、生産ワークフローで使用されるリンクされたモデルが誤って期限切れにならないようにするためです。
チームの設定](/ja/guides/models/app/settings-page/team-settings/)と、(1) TTL ポリシーを設定または編集できる人を許可するか、(2) チームのデフォルト TTL を設定するかなどのチームレベルの TTL 設定は、チーム管理者のみが表示およびアクセスできます。
W&B アプリ UI のアーティファクトの詳細に TTL ポリシーを設定または編集するオプションが表示されない場合、またはプログラムで TTL を設定してもアーティファクトの TTL プロパティが正常に変更されない場合は、チーム管理者が権限を付与していません。
自動生成された Artifacts
ユーザー生成のアーティファクトのみが TTL ポリシーを使用できます。W&B によって自動生成されたアーティファクトには TTL ポリシーを設定することはできません。
自動生成されたアーティファクトを示すアーティファクトタイプは次のとおりです:
run_table
code
job
wandb-*
で始まる種類のアーティファクト
アーティファクトの種類は、W&B プラットフォーム またはプログラムで確認できます:
import wandb
run = wandb. init(project= "<my-project-name>" )
artifact = run. use_artifact(artifact_or_name= "<my-artifact-name>" )
print(artifact. type)
含まれる <>
で囲まれた値をあなたのものに置き換えてください。
TTL ポリシーを編集および設定できる人を定義する
チーム内で TTL ポリシーを設定および編集できる人を定義します。TTL 許可をチーム管理者のみに与えることもできますし、チーム管理者とチームメンバーの両方に TTL 許可を与えることもできます。
TTL ポリシーを設定または編集できる人を定義できるのはチーム管理者だけです。
チームのプロフィールページに移動します。
設定 タブを選択します。
Artifacts のタイム・トゥ・リブ (TTL) セクション に移動します。
TTL 許可のドロップダウン から、TTL ポリシーを設定および編集できる人を選択します。
設定をレビューして保存 をクリックします。
変更を確認し、設定を保存 を選択します。
TTL ポリシーを作成する
アーティファクトを作成するとき、または作成後に TTL ポリシーを設定します。
以下のコードスニペットすべてにおいて、 <>
で包まれた内容をあなたの情報に置き換えてコードスニペットを使用してください。
アーティファクト作成時に TTL ポリシーを設定する
W&B Python SDK を使用してアーティファクトを作成する際に TTL ポリシーを定義します。TTL ポリシーは通常日数で定義されます。
アーティファクト作成時に TTL ポリシーを定義することは、通常の
アーティファクトを作成 する方法に似ています。例外は、アーティファクトの
ttl
属性に時間差を渡す点です。
手順は次のとおりです:
アーティファクトを作成 します。
ファイル、ディレクトリ、または参照など、アーティファクトにコンテンツを追加 します。
Python の標準ライブラリの一部である datetime.timedelta
データ型で TTL の期限を定義します。
アーティファクトをログ します。
以下のコードスニペットはアーティファクトを作成し、TTL ポリシーを設定する方法を示しています。
import wandb
from datetime import timedelta
run = wandb. init(project= "<my-project-name>" , entity= "<my-entity>" )
artifact = wandb. Artifact(name= "<artifact-name>" , type= "<type>" )
artifact. add_file("<my_file>" )
artifact. ttl = timedelta(days= 30 ) # TTL ポリシーを設定
run. log_artifact(artifact)
上記のコードスニペットは、アーティファクトの TTL ポリシーを 30 日間に設定します。つまり、W&B は 30 日後にアーティファクトを削除します。
アーティファクト作成後に TTL ポリシーを設定または編集する
存在するアーティファクトに対して W&B アプリの UI または W&B Python SDK を使用して TTL ポリシーを定義します。
アーティファクトの TTL を変更する場合、アーティファクトの期限切れまでの時間は、アーティファクトの作成時刻 (createdAt
タイムスタンプ) を基に計算されます。
あなたのアーティファクトを取得 します。
アーティファクトの ttl
属性に時間差を渡します。
save
メソッドでアーティファクトを更新します。
以下のコードスニペットは、アーティファクトに TTL ポリシーを設定する方法を示しています:
import wandb
from datetime import timedelta
artifact = run. use_artifact("<my-entity/my-project/my-artifact:alias>" )
artifact. ttl = timedelta(days= 365 * 2 ) # 2年後に削除
artifact. save()
上記のコード例では、TTL ポリシーを2年間に設定します。
W&B アプリ UI の W&B プロジェクトに移動します。
左のパネルでアーティファクトアイコンを選択します。
アーティファクトの一覧からアーティファクトタイプを展開します。
TTL ポリシーを編集したいアーティファクトバージョンを選択します。
バージョン タブをクリックします。
ドロップダウンから TTL ポリシー編集 を選択します。
表示されるモーダル内で、TTL ポリシードロップダウンから カスタム を選択します。
TTL 期間 フィールドで、日数単位で TTL ポリシーを設定します。
TTL 更新 ボタンを選択して変更を保存します。
チームのデフォルト TTL ポリシーを設定する
チームのデフォルト TTL ポリシーを設定できるのはチーム管理者だけです。
チームのデフォルト TTL ポリシーを設定します。デフォルトの TTL ポリシーは、既存と今後のアーティファクトすべてに、その作成日を基に適用されます。バージョンレベルで既に TTL ポリシーが存在するアーティファクトは、チームのデフォルト TTL に影響を受けません。
チームのプロフィールページに移動します。
設定 タブを選択します。
Artifacts のタイム・トゥ・リブ (TTL) セクション に移動します。
チームのデフォルト TTL ポリシー設定 をクリックします。
期間 フィールドにおいて、日数単位で TTL ポリシーを設定します。
設定をレビューして保存 をクリックします。
変更を確認し、設定を保存 を選択します。
run 外で TTL ポリシーを設定する
公開 API を使って run を取得せずにアーティファクトを取得し、TTL ポリシーを設定します。TTL ポリシーは通常日数単位で定義されます。
以下のコードサンプルは、公開 API を使用してアーティファクトを取得し、TTL ポリシーを設定する方法を示しています。
api = wandb. Api()
artifact = api. artifact("entity/project/artifact:alias" )
artifact. ttl = timedelta(days= 365 ) # 1年後削除
artifact. save()
TTL ポリシーを非アクティブにする
W&B Python SDK または W&B アプリ UI を使用して、特定のアーティファクトバージョンの TTL ポリシーを非アクティブにします。
あなたのアーティファクトを取得 します。
アーティファクトの ttl
属性を None
に設定します。
save
メソッドでアーティファクトを更新します。
以下のコードスニペットは、アーティファクトに対する TTL ポリシーをオフにする方法を示しています:
artifact = run. use_artifact("<my-entity/my-project/my-artifact:alias>" )
artifact. ttl = None
artifact. save()
W&B アプリ UI の W&B プロジェクトに移動します。
左パネルでアーティファクトアイコンを選択します。
アーティファクトのリストからアーティファクトタイプを展開します。
TTL ポリシーを編集したいアーティファクトバージョンを選択します。
バージョンタブをクリックします。
リンク先レジストリ ボタンの隣にある肉球 UI アイコンをクリックします。
ドロップダウンから TTL ポリシー編集 を選択します。
表示されるモーダル内で、TTL ポリシードロップダウンから 非アクティブ を選択します。
変更を保存するために TTL 更新 ボタンを選択します。
TTL ポリシーを確認する
W&B Python SDK または W&B アプリ UI を使用して、アーティファクトの TTL ポリシーを確認します。
print 文を使用してアーティファクトの TTL ポリシーを表示します。以下の例では、アーティファクトを取得してその TTL ポリシーを表示する方法を示しています:
artifact = run. use_artifact("<my-entity/my-project/my-artifact:alias>" )
print(artifact. ttl)
W&B アプリ UI を使用してアーティファクトの TTL ポリシーを表示します。
W&B アプリの https://wandb.ai に移動します。
あなたの W&B プロジェクトに移動します。
プロジェクト内で、左のサイドバーの Artifacts タブを選択します。
コレクションをクリックします。
選択されたコレクション内のすべてのアーティファクトが表示されます。Time to Live
列にそのアーティファクトに割り当てられた TTL ポリシーが表示されます。
1.7.2 - アーティファクトのストレージとメモリの割り当てを管理する
W&B アーティファクトのストレージやメモリ割り当てを管理します。
W&B は、アーティファクトファイルを米国にある Google Cloud Storage のプライベートバケットにデフォルトで保存します。すべてのファイルは、静止時および転送中に暗号化されています。
機密性の高いファイルには、プライベートホスティング の設定や参照アーティファクト の使用をお勧めします。
トレーニング中、W&B はログ、アーティファクト、および設定ファイルを以下のローカルディレクトリーにローカル保存します:
File
Default location
To change default location set:
logs
./wandb
wandb.init
の dir
または WANDB_DIR
環境変数を設定
artifacts
~/.cache/wandb
WANDB_CACHE_DIR
環境変数を設定
configs
~/.config/wandb
WANDB_CONFIG_DIR
環境変数を設定
ステージング用アーティファクトのアップロード
~/.cache/wandb-data/
WANDB_DATA_DIR
環境変数を設定
ダウンロードされたアーティファクト
./artifacts
WANDB_ARTIFACT_DIR
環境変数を設定
W&B を設定するための環境変数の完全なガイドについては、環境変数リファレンス を参照してください。
wandb
が初期化されたマシンによっては、これらのデフォルトフォルダーがファイルシステムの書き込み可能な部分にない場合があります。これによりエラーが発生する可能性があります。
ローカルのアーティファクトキャッシュをクリーンアップする
W&B は、共通ファイルを共有するバージョン間でダウンロードを高速化するためにアーティファクトファイルをキャッシュします。時間の経過とともに、このキャッシュディレクトリーは大きくなる可能性があります。キャッシュを整理し、最近使用されていないファイルを削除するために、wandb artifact cache cleanup
コマンドを実行してください。
以下のコードスニペットは、キャッシュサイズを1GBに制限する方法を示しています。コードスニペットをコピーしてターミナルに貼り付けてください:
$ wandb artifact cache cleanup 1GB
1.7.3 - アーティファクトを削除する
アプリ UI を使って対話的に、または W&B SDK を使用してプログラムでアーティファクトを削除します。
アーティファクトは、App UI でインタラクティブに削除するか、W&B SDK でプログラム的に削除できます。アーティファクトを削除すると、W&B はそのアーティファクトをソフト削除 としてマークします。つまり、そのアーティファクトは削除予定としてマークされますが、ファイルはすぐにはストレージから削除されません。
アーティファクトの内容は、定期的に実行されるガベージコレクション プロセスが削除対象としてマークされたすべてのアーティファクトをレビューするまで、ソフト削除または削除保留状態のままです。ガベージコレクションプロセスは、アーティファクトおよびその関連ファイルが以前または後のアーティファクトバージョンで使用されていない場合、関連ファイルをストレージから削除します。
このページのセクションでは、特定のアーティファクトバージョンの削除方法、アーティファクトコレクションの削除方法、エイリアスを持つアーティファクトの削除方法、エイリアスがないアーティファクトの削除方法などについて説明します。アーティファクトが W&B から削除される時間を TTL ポリシーでスケジュールできます。詳細については、Artifact TTL ポリシーによるデータ保持の管理 を参照してください。
TTL ポリシーで削除予定のアーティファクト、W&B SDK で削除されたアーティファクト、または W&B App UI で削除されたアーティファクトは、最初にソフト削除されます。ソフト削除されたアーティファクトは、最終的にハード削除される前にガベージコレクションを受けます。
アーティファクトバージョンの削除
アーティファクトバージョンを削除するには:
アーティファクトの名前を選択します。これにより、アーティファクトビューが拡張され、そのアーティファクトに関連付けられたすべてのアーティファクトバージョンが一覧表示されます。
アーティファクトのリストから、削除したいアーティファクトバージョンを選択します。
ワークスペースの右側にあるケバブドロップダウンを選択します。
「Delete」を選択します。
アーティファクトバージョンは、delete() メソッドを使用してプログラム的にも削除できます。以下の例を参照してください。
エイリアスを持つ複数のアーティファクトバージョンの削除
次のコード例は、エイリアスを持つアーティファクトを削除する方法を示しています。アーティファクトを作成したエンティティ、プロジェクト名、および run ID を指定してください。
import wandb
run = api. run("entity/project/run_id" )
for artifact in run. logged_artifacts():
artifact. delete()
アーティファクトに 1 つ以上のエイリアスがある場合、delete_aliases
パラメータをブール値 True
に設定してエイリアスを削除します。
import wandb
run = api. run("entity/project/run_id" )
for artifact in run. logged_artifacts():
# delete_aliases=True を設定して、
# エイリアスを 1 つ以上持つアーティファクトを削除します
artifact. delete(delete_aliases= True )
特定のエイリアスを持つ複数のアーティファクトバージョンを削除
以下のコードは、特定のエイリアスを持つ複数のアーティファクトバージョンを削除する方法を示しています。アーティファクトを作成したエンティティ、プロジェクト名、および run ID を指定します。削除ロジックは独自のものに置き換えてください:
import wandb
runs = api. run("entity/project_name/run_id" )
# 'v3' および 'v4' のエイリアスを持つアーティファクトを削除
for artifact_version in runs. logged_artifacts():
# 独自の削除ロジックに置き換えます。
if artifact_version. name[- 2 :] == "v3" or artifact_version. name[- 2 :] == "v4" :
artifact. delete(delete_aliases= True )
エイリアスを持たないアーティファクトのすべてのバージョンを削除
次のコードスニペットは、エイリアスを持たないアーティファクトのすべてのバージョンを削除する方法を示しています。wandb.Api
の project
および entity
キーにプロジェクト名とエンティティの名前をそれぞれ指定してください。<>
をアーティファクトの名前に置き換えてください:
import wandb
# wandb.Api メソッドを使用する際に、エンティティとプロジェクト名を指定してください。
api = wandb. Api(overrides= {"project" : "project" , "entity" : "entity" })
artifact_type, artifact_name = "<>" # タイプと名前を指定
for v in api. artifact_versions(artifact_type, artifact_name):
# 'latest' などのエイリアスを持たないバージョンをクリーンアップします。
# 注意: ここには任意の削除ロジックを置くことができます。
if len(v. aliases) == 0 :
v. delete()
アーティファクトコレクションの削除
アーティファクトコレクションを削除するには:
削除したいアーティファクトコレクションに移動し、その上にカーソルを合わせます。
アーティファクトコレクション名の横にあるケバブドロップダウンを選択します。
「Delete」を選択します。
アーティファクトコレクションは、delete() メソッドを使用してプログラムで削除することもできます。wandb.Api
の project
および entity
キーにプロジェクト名とエンティティの名前を指定してください:
import wandb
# wandb.Api メソッドを使用する際に、エンティティとプロジェクト名を指定してください。
api = wandb. Api(overrides= {"project" : "project" , "entity" : "entity" })
collection = api. artifact_collection(
"<artifact_type>" , "entity/project/artifact_collection_name"
)
collection. delete()
W&B がホストされている方法に基づいたガベージコレクションの有効化方法
W&B の共有クラウドを使用している場合、ガベージコレクションはデフォルトで有効です。W&B をホストする方法に基づいて、ガベージコレクションを有効にするために追加の手順が必要な場合があります。これには以下が含まれます:
以下の表は、デプロイメントタイプに基づいてガベージコレクションを有効にするための要件を満たす方法を説明しています。
X
は要件を満たす必要があることを示します:
注意
セキュアストレージコネクタは現在、Google Cloud Platform および Amazon Web Services のみで利用可能です。
1.8 - アーティファクトグラフの探索
W&B アーティファクト の自動生成された有向非巡回グラフを トラバース します。
W&B は、特定の run がログしたアーティファクトや、その run が利用したアーティファクトを自動で追跡します。これらのアーティファクトには、データセットやモデル、評価結果、その他が含まれることがあります。機械学習ライフサイクル全体で生成されたさまざまなアーティファクトを追跡および管理するために、アーティファクトのリネージを探索できます。
リネージ
アーティファクトのリネージを追跡することには、いくつかの主要な利点があります:
再現性: すべてのアーティファクトのリネージを追跡することで、チームは実験やモデル、結果を再現でき、デバッグ、実験、および機械学習モデルの検証に不可欠です。
バージョン管理: アーティファクトのリネージには、アーティファクトのバージョン管理とその変更の追跡が含まれます。必要に応じて、チームはデータやモデルの以前のバージョンに戻すことができます。
監査: アーティファクトとその変換の詳細な履歴を持つことで、組織は規制やガバナンスの要件に準拠できます。
コラボレーションと知識共有: アーティファクトのリネージは、試行された記録が明確に示されており、何がうまくいって何がうまくいかなかったかを提供することで、チームメンバー間のより良いコラボレーションを促進します。これにより、努力の重複を避け、開発プロセスを加速させます。
アーティファクトのリネージを見つける
Artifacts タブでアーティファクトを選択すると、アーティファクトのリネージを見ることができます。このグラフビューは、パイプラインの全体的な概要を示します。
アーティファクトグラフを見るには:
W&B App UI でプロジェクトに移動します。
左のパネルでアーティファクトアイコンを選びます。
Lineage を選択します。
リネージグラフのナビゲート
指定したアーティファクトやジョブタイプは、その名前の前に表示され、アーティファクトは青のアイコン、Runs は緑のアイコンで表されます。矢印は、グラフ上での run またはアーティファクトの入力と出力を示します。
アーティファクトのタイプと名前は、左のサイドバーと Lineage タブの両方で確認できます。
より詳細なビューを得るために、個別のアーティファクトまたは run をクリックして、特定のオブジェクトに関する詳細情報を取得します。
アーティファクトクラスター
グラフのあるレベルに run またはアーティファクトが5つ以上ある場合、クラスターが作成されます。クラスターには、特定のバージョンの run またはアーティファクトを見つけるための検索バーがあり、クラスター内のノードを個別にプルしてそのリネージを調査することができます。
ノードをクリックすると、そのノードのプレビューが表示され、概要が示されます。矢印をクリックすると、個別の run またはアーティファクトが抽出され、抽出されたノードのリネージを調べることができます。
API を使用してリネージを追跡する
W&B API を使用してグラフをナビゲートすることもできます。
まず run を wandb.init
で作成します。次に、wandb.Artifact
で新しいアーティファクトを作成するか、既存のアーティファクトを取得します。次に、.add_file
を使用してアーティファクトにファイルを追加します。最後に、.log_artifact
でアーティファクトを run にログします。完成したコードは次のようになります:
with wandb. init() as run:
artifact = wandb. Artifact("artifact_name" , "artifact_type" )
# `.add`, `.add_file`, `.add_dir`, `.add_reference` を使用して
# アーティファクトにファイルやアセットを追加します
artifact. add_file("image1.png" )
run. log_artifact(artifact)
アーティファクトオブジェクトの logged_by
と used_by
メソッドを使用して、アーティファクトからグラフをたどります:
# アーティファクトからグラフを上下にたどります:
producer_run = artifact. logged_by()
consumer_runs = artifact. used_by()
次のステップ
1.9 - アーティファクトのデータプライバシーとコンプライアンス
デフォルトで W&B ファイルが保存される場所を学びましょう。機密情報の保存方法について探索します。
ファイルは、Artifacts をログするときに W&B が管理する Google Cloud バケットにアップロードされます。バケットの内容は、保存中および転送中の両方で暗号化されます。Artifact ファイルは、対応するプロジェクトへのアクセス権を持つユーザーにのみ表示されます。
アーティファクトのバージョンを削除すると、そのバージョンはデータベースでソフト削除としてマークされ、ストレージコストからも除外されます。アーティファクト全体を削除すると、それは完全削除のためにキューに入れられ、その内容はすべて W&B バケットから削除されます。ファイル削除に関する特定のニーズがある場合は、Customer Support にお問い合わせください。
マルチテナント環境に存在できない機密データセットには、クラウドバケットに接続されたプライベート W&B サーバーまたは reference artifacts を使用することができます。Reference artifacts は、ファイル内容を W&B に送信せずに、プライベートバケットへの参照を追跡します。Reference artifacts は、バケットやサーバー上のファイルへのリンクを維持します。つまり、W&B はファイルそのものではなく、ファイルに関連するメタデータのみを追跡します。
リファレンスアーティファクトは、通常のアーティファクトを作成する方法と似ています。
import wandb
run = wandb. init()
artifact = wandb. Artifact("animals" , type= "dataset" )
artifact. add_reference("s3://my-bucket/animals" )
代替案については、contact@wandb.com にお問い合わせいただき、プライベートクラウドおよびオンプレミスのインストールについてご相談ください。
1.10 - チュートリアル: データセットアーティファクトを作成、追跡、利用する方法
アーティファクト クイックスタートでは、W&B でデータセット アーティファクトを作成、追跡、使用する方法を示します。
このウォークスルーでは、W&B Runs からデータセットアーティファクトを作成、追跡、使用する方法を示します。
1. W&B にログイン
W&B ライブラリをインポートし、W&B にログインします。まだアカウントをお持ちでない場合は、無料の W&B アカウントにサインアップする必要があります。
import wandb
wandb. login()
2. Run を初期化
wandb.init()
API を使用して、バックグラウンドプロセスを生成し、データを W&B Run として同期してログします。プロジェクト名とジョブタイプを指定してください。
# W&B Run を作成します。この例ではデータセットアーティファクトを作成する方法を示しているので、
# ジョブタイプとして 'dataset' を指定します。
run = wandb. init(project= "artifacts-example" , job_type= "upload-dataset" )
3. アーティファクト オブジェクトを作成
wandb.Artifact()
API を使用してアーティファクトオブジェクトを作成します。アーティファクトの名前とファイルタイプの説明を、それぞれ name
と type
パラメータとして指定します。
例えば、次のコードスニペットは ‘bicycle-dataset’
という名前で、‘dataset’
というラベルのアーティファクトを作成する方法を示しています。
artifact = wandb. Artifact(name= "bicycle-dataset" , type= "dataset" )
アーティファクトの構築方法の詳細については、Construct artifacts を参照してください。
データセットをアーティファクトに追加
ファイルをアーティファクトに追加します。一般的なファイルタイプには Models や Datasets が含まれます。次の例では、ローカルマシンに保存されている dataset.h5
というデータセットをアーティファクトに追加します。
# ファイルをアーティファクトのコンテンツに追加
artifact. add_file(local_path= "dataset.h5" )
上記のコードスニペットのファイル名 dataset.h5
は、アーティファクトに追加したいファイルのパスに置き換えてください。
4. データセットをログ
W&B Run オブジェクトの log_artifact()
メソッドを使用して、アーティファクトバージョンを保存し、アーティファクトを run の出力として宣言します。
# アーティファクトバージョンを W&B に保存し、
# この run の出力としてマークします
run. log_artifact(artifact)
アーティファクトをログする際、’latest’ エイリアスがデフォルトで作成されます。アーティファクトのエイリアスとバージョンに関する詳細については、Create a custom alias および Create new artifact versions をそれぞれ参照してください。
5. アーティファクトをダウンロードして使用
次のコード例では、ログされ保存されたアーティファクトを W&B サーバーで使用する手順を示します。
まず、wandb.init()
. を使用して新しい run オブジェクトを初期化します。
次に、run オブジェクトの use_artifact()
メソッドを使用して、W&B に使用するアーティファクトを指定します。これにより、アーティファクトオブジェクトが返されます。
最後に、アーティファクトの download()
メソッドを使用してアーティファクトの内容をダウンロードします。
# W&B Run を作成します。ここでは 'training' を 'type' として指定します
# この run をトレーニングの追跡に使用するためです。
run = wandb. init(project= "artifacts-example" , job_type= "training" )
# W&B にアーティファクトを検索させ、この run の入力としてマークします
artifact = run. use_artifact("bicycle-dataset:latest" )
# アーティファクトの内容をダウンロードします
artifact_dir = artifact. download()
または、Public API (wandb.Api
) を使用して、Run の外で W&B に既に保存されたデータをエクスポート(または更新)できます。詳細は Track external files を参照してください。
2 - Secrets
W&B のシークレットの概要、それらがどのように機能するか、そして使用を開始する方法。
W&B Secret Manager を使用すると、シークレット (アクセストークン、ベアラートークン、APIキー、またはパスワードなどの機密文字列)を安全かつ集中管理して注入することができます。W&B Secret Manager は、シークレットをコードや Webhook のヘッダー、または ペイロード に直接追加する必要をなくします。
シークレットは各チームの Secret Manager のチーム シークレット セクションで保存および管理されます。チーム設定 で確認できます。
W&B 管理者のみがシークレットを作成、編集、または削除することができます。
シークレットは W&B の主要部分として含まれており、Azure、GCP、または AWS でホストする W&Bサーバー デプロイメント にも含まれます。別のデプロイメント タイプを使用している場合、W&B アカウント チームに連絡して W&B でシークレットを使用する方法を相談してください。
W&B サーバーでは、セキュリティニーズを満たすセキュリティ対策を設定する責任があります。
W&B は、AWS、GCP、または Azure が提供するクラウドプロバイダーのシークレット マネージャーに W&B インスタンスでシークレットを保存することを強くお勧めします。これらは高度なセキュリティ機能で設定されています。
W&B は、Kubernetes クラスターをシークレットストアのバックエンドとして使用することをお勧めしません。唯一の選択肢であり、セキュリティ上の脆弱性を防ぐ方法を理解している場合を除き、AWS、GCP、または Azure のクラウドシークレット マネージャーの W&B インスタンスを使用することが推奨されます。
シークレットを追加
シークレットを追加するには:
受信サービスが受信 Webhook を認証するために必要な場合、必要なトークンや APIキーを生成します。必要に応じて、パスワードマネージャーなどを使用して機密文字列を安全に保存します。
W&B にログインし、チームの設定 ページに移動します。
チームシークレット のセクションで、新しいシークレット をクリックします。
文字、数字、アンダースコア (_
) を使用してシークレットの名前を付けます。
機密文字列をシークレット フィールドに貼り付けます。
シークレットを追加 をクリックします。
Webhook を設定するときに使用したいシークレットを指定します。詳しくは、Webhook の設定 セクションを参照してください。
シークレットをローテーション
シークレットをローテーションして値を更新するには:
シークレットの行の鉛筆アイコンをクリックして、シークレットの詳細を開きます。
シークレット を新しい値に設定します。必要に応じてシークレットを表示 して新しい値を確認します。
シークレットを追加 をクリックします。シークレットの値が更新され、以前の値には解決されなくなります。
シークレットが作成または更新された後、その現在の値を表示することはできません。代わりに、新しい値にシークレットをローテーションしてください。
シークレットを削除
シークレットを削除するには:
シークレットの行のゴミ箱アイコンをクリックします。
確認ダイアログを読み、削除 をクリックします。シークレットは直ちに永久に削除されます。
シークレットへのアクセスを管理
チームのオートメーションはチームのシークレットを使用できます。シークレットを削除する前に、それを使用しているオートメーションを更新または削除して、それらが動作を停止しないようにしてください。
3 - レポート
機械学習プロジェクトのためのプロジェクト管理とコラボレーションツール
W&B Reportsを使って:
Runsを整理する。
可視化を埋め込み、自動化する。
学びを説明する。
LaTeXのzipファイルやPDFとして、共同作業者と更新を共有する。
次の画像は、トレーニング中にW&Bにログされたメトリクスから作成されたレポートの一部を示しています。
上記の画像が撮影されたレポートはこちら からご覧いただけます。
仕組み
簡単なクリック操作で共同レポートを作成することができます。
W&B App内のW&Bプロジェクトワークスペースに移動します。
ワークスペースの右上にあるCreate report ボタンをクリックします。
Create Report と題したモーダルが表示されます。レポートに追加したいチャートとパネルを選択してください。(後でチャートとパネルを追加または削除することができます)。
Create report をクリックします。
レポートを希望の状態に編集します。
Publish to project をクリックします。
Share ボタンをクリックし、共同作業者とレポートを共有します。
W&B Python SDKを使用して、インタラクティブにまたプログラム的にReportsを作成する方法については、Create a report ページをご覧ください。
開始方法
ユースケースに応じて、W&B Reportsを開始するための以下のリソースを探索してください:
ベストプラクティスとヒント
Experimentsとログに関するベストプラクティスとヒントについては、Best Practices: Reports をご覧ください。
3.1 - レポートを作成する
W&B レポートは、App UI を使用するか Weights & Biases SDK を使ってプログラムで作成します。
レポートを作成するには、W&B App UI をインタラクティブに使用するか、W&B Python SDK を使用してプログラムで行います。
App UI
Report tab
W&B Python SDK
W&B App でプロジェクトワークスペースに移動します。
ワークスペースの右上隅にある Create report をクリックします。
モーダルが表示されます。最初に使用したいチャートを選択します。レポートのインターフェースから後でチャートを追加または削除することができます。
Filter run sets オプションを選択すると、新しい run がレポートに追加されるのを防げます。このオプションをオンまたはオフに切り替えることができます。Create report をクリックすると、レポートタブにドラフトレポートが表示され、作業を続けることができます。
W&B App でプロジェクトワークスペースに移動します。
プロジェクト内の Reports タブ(クリップボードの画像)を選択します。
レポートページで Create Report ボタンを選択します。
wandb
ライブラリを使用してプログラムでレポートを作成します。
W&B SDK と Workspaces API をインストールします:
pip install wandb wandb-workspaces
次に、ワークスペースをインポートします。
import wandb
import wandb_workspaces.reports.v2 as wr
wandb_workspaces.reports.v2.Report
を使用してレポートを作成します。Report Class Public API (wandb.apis.reports
) を使ってレポートのインスタンスを作成します。プロジェクトに名前を指定します。
report = wr. Report(project= "report_standard" )
レポートを保存します。レポートは、save()
メソッドを呼び出すまで W&B サーバーにアップロードされません。
App UI を使用してインタラクティブに、またはプログラムでレポートを編集する方法については、Edit a report を参照してください。
3.2 - レポートを編集する
App UI を使用してインタラクティブに、または W&B SDK を使用してプログラムで レポート を編集します。
レポートを App UI でインタラクティブに、または W&B SDK を使ってプログラムで編集します。
Reports は ブロック で構成されます。ブロックはレポートの本体を構成します。これらのブロック内でテキスト、画像、組み込みの可視化、実験と run のプロット、パネルグリッドを追加できます。
パネルグリッド は、パネルと run セット を保持する特定の種類のブロックです。Run セットは W&B のプロジェクトにログされる run のコレクションです。パネルは run セット データの可視化を行います。
プログラムでレポートを編集する場合は、W&B Python SDK に加えて wandb-workspaces
をインストールしてください:
pip install wandb wandb-workspaces
プロットを追加する
各パネルグリッドには一連の run セットと一連のパネルがあります。このセクションの下部にある run セットで、グリッド内のパネルに表示されるデータを制御します。異なる run セットからデータを取得するチャートを追加する場合は、新しいパネルグリッドを作成してください。
レポートにスラッシュ(/
)を入力して、ドロップダウンメニューを表示します。Add panel を選択してパネルを追加します。W&B でサポートされている任意のパネルを追加できます。例えば、ラインプロット、散布図や並行座標チャートなどです。
SDK を使用してプログラムでレポートにプロットを追加します。PanelGrid
Public API クラスの panels
パラメータに、1つ以上のプロットまたはチャートのオブジェクトのリストを渡します。対応する Python クラスを使用してプロットまたはチャートのオブジェクトを作成します。
以下の例では、ラインプロットと散布図の作成方法を示しています。
import wandb
import wandb_workspaces.reports.v2 as wr
report = wr.Report(
project=“report-editing”,
title=“An amazing title”,
description=“A descriptive description.”,
)
blocks = [
wr.PanelGrid(
panels=[
wr.LinePlot(x=“time”, y=“velocity”),
wr.ScatterPlot(x=“time”, y=“acceleration”),
]
)
]
report.blocks = blocks
report.save()
プログラムでレポートに追加できるプロットやチャートの詳細については、wr.panels
を参照してください。
Run セットを追加する
App UI または W&B SDK を使用して、プロジェクトから run セットを追加します。
レポートにスラッシュ(/
)を入力して、ドロップダウンメニューを表示します。ドロップダウンから Panel Grid を選択します。これにより、レポートが作成されたプロジェクトから自動的に run セットがインポートされます。
wr.Runset()
および wr.PanelGrid
クラスを使用してプロジェクトから run セットを追加します。以下の手順で run セットの追加方法を示します:
wr.Runset()
オブジェクト インスタンスを作成します。プロジェクト パラメータのために、run セットを含むプロジェクトの名前を指定し、エンティティ パラメータのためにプロジェクトを所有するエンティティを指定します。
wr.PanelGrid()
オブジェクト インスタンスを作成します。1つ以上の runset オブジェクトを runsets
パラメータに渡します。
1つ以上の wr.PanelGrid()
オブジェクト インスタンスをリストに保存します。
パネルグリッド インスタンスのリストを使用して、レポート インスタンス ブロック属性を更新します。
import wandb
import wandb_workspaces.reports.v2 as wr
report = wr.Report(
project=“report-editing”,
title=“An amazing title”,
description=“A descriptive description.”,
)
panel_grids = wr.PanelGrid(
runsets=[wr.RunSet(project="", entity="")]
)
report.blocks = [panel_grids]
report.save()
ひとつの SDK 呼び出しで run セットとパネルを追加することもできます:
import wandb
report = wr.Report(
project=“report-editing”,
title=“An amazing title”,
description=“A descriptive description.”,
)
panel_grids = wr.PanelGrid(
panels=[
wr.LinePlot(
title=“line title”,
x=“x”,
y=[“y”],
range_x=[0, 100],
range_y=[0, 100],
log_x=True,
log_y=True,
title_x=“x axis title”,
title_y=“y axis title”,
ignore_outliers=True,
groupby=“hyperparam1”,
groupby_aggfunc=“mean”,
groupby_rangefunc=“minmax”,
smoothing_factor=0.5,
smoothing_type=“gaussian”,
smoothing_show_original=True,
max_runs_to_show=10,
plot_type=“stacked-area”,
font_size=“large”,
legend_position=“west”,
),
wr.ScatterPlot(
title=“scatter title”,
x=“y”,
y=“y”,
# z=‘x’,
range_x=[0, 0.0005],
range_y=[0, 0.0005],
# range_z=[0,1],
log_x=False,
log_y=False,
# log_z=True,
running_ymin=True,
running_ymean=True,
running_ymax=True,
font_size=“small”,
regression=True,
),
],
runsets=[wr.RunSet(project="", entity="")],
)
report.blocks = [panel_grids]
report.save()
Run セットをフリーズする
レポートはプロジェクトから最新のデータを表示するために run セットを自動的に更新します。しかし、レポート内の run セットを保持するには、その run セットをフリーズ することができます。Run セットをフリーズすると、特定の時点のレポート内の run セットの状態が保持されます。
レポートを表示する際に run セットをフリーズするには、Filter ボタンの近くにあるスノーフレーク アイコンをクリックします。
コード ブロックを追加する
レポートにコードブロックを App UI でインタラクティブに、または W&B SDK で追加します。
レポートにスラッシュ(/
)を入力して、ドロップダウン メニューを表示します。ドロップダウンから Code を選択します。
コード ブロックの右側にあるプログラミング言語の名前を選択すると、ドロップダウンが展開されます。利用可能なプログラミング言語の構文を選択してください。Javascript、Python、CSS、JSON、HTML、Markdown、YAML から選べます。
wr.CodeBlock
クラスを使用してコード ブロックをプログラムで作成します。言語とコードにそれぞれ表示したい言語名とコードを指定します。
たとえば、以下の例では、YAML ファイルのリストを示しています。
import wandb
import wandb_workspaces.reports.v2 as wr
report = wr.Report(project=“report-editing”)
report.blocks = [
wr.CodeBlock(
code=[“this:”, “- is”, “- a”, “cool:”, “- yaml”, “- file”], language=“yaml”
)
]
report.save()
これにより、次のようなコードブロックがレンダリングされます:
this:
以下の例では、Python コードブロックを示しています:
report = wr.Report(project=“report-editing”)
report.blocks = [wr.CodeBlock(code=[“Hello, World!”], language=“python”)]
report.save()
これにより、次のようなコードブロックがレンダリングされます:
Hello, World!
マークダウンを追加する
レポートにマークダウンを App UI でインタラクティブに、または W&B SDK で追加します。
レポートにスラッシュ(/
)を入力して、ドロップダウン メニューを表示します。ドロップダウンから Markdown を選択します。
wandb.apis.reports.MarkdownBlock
クラスを使用して、プログラムでマークダウンブロックを作成します。text
パラメータに文字列を渡します:
import wandb
import wandb_workspaces.reports.v2 as wr
report = wr.Report(project=“report-editing”)
report.blocks = [
wr.MarkdownBlock(text=“Markdown cell with italics and bold and $e=mc^2$”)
]
これにより、次のようなマークダウン ブロックがレンダリングされます:
HTML要素を追加する
レポートに HTML 要素を App UI でインタラクティブに、または W&B SDK で追加します。
レポートにスラッシュ(/
)を入力して、ドロップダウン メニューを表示します。ドロップダウンからテキスト ブロックの種類を選択します。例として、H2 見出しブロックを作成するには、Heading 2
のオプションを選択します。
1つ以上の HTML 要素のリストを wandb.apis.reports.blocks
属性に渡します。以下の例では、H1、H2、および無順リストを作成する方法を示しています:
import wandb
import wandb_workspaces.reports.v2 as wr
report = wr.Report(project=“report-editing”)
report.blocks = [
wr.H1(text=“How Programmatic Reports work”),
wr.H2(text=“Heading 2”),
wr.UnorderedList(items=[“Bullet 1”, “Bullet 2”]),
]
report.save()
これにより、次のような HTML 要素がレンダリングされます:
リッチメディアリンクを埋め込む
レポート内にリッチメディアを App UI で、または W&B SDK で埋め込みます。
URL をレポートにコピーアンドペーストして、リッチメディアをレポート内に埋め込みます。以下のアニメーションは、Twitter、YouTube、および SoundCloud からの URL をコピーアンドペーストする方法を示しています。
レポートにツイートリンク URL をコピーして貼り付け、ツイートをレポート内に表示します。
YouTube
レポート内にビデオを埋め込むために YouTube ビデオ URL リンクをコピーアンドペーストします。
SoundCloud
SoundCloud のリンクをコピーアンドペーストして、オーディオファイルをレポート内に埋め込みます。
1 つ以上の埋め込みメディア オブジェクトのリストを wandb.apis.reports.blocks
属性に渡します。以下の例では、ビデオと Twitter メディアをレポートに埋め込む方法を示しています:
import wandb
import wandb_workspaces.reports.v2 as wr
report = wr.Report(project=“report-editing”)
report.blocks = [
wr.Video(url=“https://www.youtube.com/embed/6riDJMI-Y8U”),
wr.Twitter(
embed_html=’
\n'
),
]
report.save()
パネルグリッドの複製と削除
再利用したいレイアウトがある場合は、パネルグリッドを選択してコピー&ペーストすることで、同じレポート内に複製したり、別のレポートに貼り付けることができます。
パネルグリッドセクション全体を強調表示するには、右上隅のドラッグハンドルを選択します。パネルグリッド、テキスト、見出しなど、レポート内の領域をクリックしてドラッグして強調表示および選択します。
パネルグリッドを選択し、キーボードで delete
を押してパネルグリッドを削除します。
レポート内のヘッダーを折りたたんで整理する
テキストブロック内のコンテンツを非表示にするために、レポート内のヘッダーを折りたたみます。レポートが読み込まれると、展開されているヘッダーのみがコンテンツを表示します。レポート内でヘッダーを折りたたむことで、コンテンツを整理し、過剰なデータの読み込みを防ぐことができます。以下の gif はその手順を示しています。
複数次元の関係を可視化する
複数次元の関係を効果的に可視化するために、変数の 1 つを示すためにカラーバリエーションを使用します。これにより明瞭さが向上し、パターンが解釈しやすくなります。
カラーグラデーションで表現する変数を選択します(例: 罰金スコア、学習率など)。これにより、罰金(色)がトレーニング時間 (x 軸) を経て報酬/副作用 (y 軸) とどのように相互作用するかをより明確に理解できます。
主要なトレンドを強調します。特定の run グループにカーソルを合わせると、それが可視化で強調表示されます。
3.3 - レポートを共同で作成する
W&B Reports を同僚やチームメンバーと共有してコラボレーションしましょう。
レポートを保存したら、Share ボタンを選択してコラボレーションできます。Edit ボタンを選択すると、レポートの下書きコピーが作成されます。下書きレポートは自動保存されます。変更を共有レポートに公開するには、Save to report を選択します。
編集の競合が発生すると警告通知が表示されます。これは、あなたと他のコラボレーターが同じレポートを同時に編集した場合に発生する可能性があります。警告通知は、編集の競合を解決するためのガイドとなります。
レポートにコメントする
レポート内のパネルにあるコメントボタンをクリックして、そのパネルに直接コメントを追加します。
3.4 - レポートをクローンしてエクスポートする
W&B レポートを PDF または LaTeX としてエクスポートします。
レポートをエクスポート
レポートを PDF または LaTeX としてエクスポートします。レポート内でケバブアイコンを選択し、ドロップダウンメニューを展開します。Download を選択し、PDF または LaTeX の出力形式を選択します。
レポートをクローン
レポート内でケバブアイコンを選択し、ドロップダウンメニューを展開します。Clone this report ボタンを選択します。モーダルでクローンされたレポートの保存先を選択します。Clone report を選択します。
プロジェクトのテンプレートと形式を再利用するためにレポートをクローンします。チームのアカウント内でプロジェクトをクローンした場合、クローンされたプロジェクトはチームに表示されます。個人のアカウント内でプロジェクトをクローンした場合、そのプロジェクトはそのユーザーのみに表示されます。
テンプレートとして使用するために URL からレポートをロードします。
report = wr. Report(
project= PROJECT, title= "Quickstart Report" , description= "That was easy!"
) # 作成
report. save() # 保存
new_report = wr. Report. from_url(report. url) # ロード
new_report.blocks
内のコンテンツを編集します。
pg = wr. PanelGrid(
runsets= [
wr. Runset(ENTITY, PROJECT, "First Run Set" ),
wr. Runset(ENTITY, PROJECT, "Elephants Only!" , query= "elephant" ),
],
panels= [
wr. LinePlot(x= "Step" , y= ["val_acc" ], smoothing_factor= 0.8 ),
wr. BarPlot(metrics= ["acc" ]),
wr. MediaBrowser(media_keys= "img" , num_columns= 1 ),
wr. RunComparer(diff_only= "split" , layout= {"w" : 24 , "h" : 9 }),
],
)
new_report. blocks = (
report. blocks[:1 ] + [wr. H1("Panel Grid Example" ), pg] + report. blocks[1 :]
)
new_report. save()
3.5 - レポートを埋め込む
W&B レポートを直接 Notion に埋め込むか、HTML IFrame 要素を使用します。
HTML iframe 要素
レポート内の右上にある Share ボタンを選択します。モーダルウィンドウが表示されます。このモーダルウィンドウ内で Copy embed code を選択します。コピーされたコードは、インラインフレーム (IFrame) HTML 要素内でレンダリングされます。コピーしたコードを任意の iframe HTML 要素に貼り付けます。
埋め込まれた場合、公開 レポートのみが表示可能です。
Confluence
次のアニメーションは、Confluence の IFrame セル内でレポートへの直接リンクを挿入する方法を示しています。
Notion
次のアニメーションは、Notion ドキュメント内で Embed ブロックを使ってレポートを挿入し、そのレポートの埋め込みコードを使用する方法を示しています。
Gradio
gr.HTML
要素を使用して、Gradio Apps 内で W&B Reports を埋め込み、Hugging Face Spaces で利用することができます。
import gradio as gr
def wandb_report (url):
iframe = f '<iframe src= { url} style="border:none;height:1024px;width:100%">'
return gr. HTML(iframe)
with gr. Blocks() as demo:
report = wandb_report(
"https://wandb.ai/_scott/pytorch-sweeps-demo/reports/loss-22-10-07-16-00-17---VmlldzoyNzU2NzAx"
)
demo. launch()
3.6 - プロジェクト間で run を比較する
異なる2つのプロジェクトのrunをプロジェクト間レポートで比較する。
クロスプロジェクト レポートを使用して、異なる 2 つのプロジェクトからの run を比較します。run セット テーブル内のプロジェクト セレクターを使用してプロジェクトを選択します。
このセクションの可視化は、最初のアクティブな run セットから列を引き出します。必要なメトリクスが線プロットに表示されない場合は、その列が利用可能であることを確認してください。
この機能は時系列線上の履歴データをサポートしていますが、異なるプロジェクトから異なるサマリー メトリクスを引き出すことはサポートしていません。つまり、別のプロジェクトでのみログに記録された列から散布図を作成することはできません。
2 つのプロジェクトからの run を比較する必要があるが、列が動作していない場合は、1 つのプロジェクトの run にタグを追加してから、それらの run を他のプロジェクトに移動します。各プロジェクトからの run のみをフィルタリングすることはできますが、レポートには両方の run セットのすべての列が含まれます。
ビュー専用レポートリンク
プライベートプロジェクトまたはチーム プロジェクトにあるレポートへのビュー専用リンクを共有します。
ビュー専用レポートリンクは、URL に秘密のアクセストークンを追加するため、リンクを開くと誰でもページを表示できます。誰でも最初にログインせずにマジックリンクを使用してレポートを表示できます。W&B Local プライベート クラウド インストールのお客様の場合、これらのリンクはファイアウォールの内側に残るため、プライベート インスタンスへのアクセス と ビュー専用リンクへのアクセスを持つチームのメンバーのみがレポートを表示できます。
ビュー専用モード では、ログインしていない人でもチャートを見たり、ツールチップを見たり、ズームイン・アウトしてチャートを閲覧したり、テーブル内の列をスクロールしたりすることができます。ビュー モードの場合、新しいチャートや新しいテーブル クエリを作成してデータを探ることはできません。レポートリンクのビュー専用訪問者は run をクリックして run ページに移動することはできません。また、ビュー専用訪問者は共有モーダルを見ることはできず、代わりに「ビュー専用アクセスでは共有できません」というツールチップがホバー中に表示されます。
マジックリンクは、「Private」および「Team」プロジェクトでのみ利用可能です。「Public」(誰でも閲覧可能)または「Open」(誰でも閲覧および run 提供可能)プロジェクトの場合、このプロジェクトは公開で、リンクを持つ誰でもすでに利用できるため、リンクをオン/オフできません。
グラフをレポートに送信
ワークスペースからレポートにグラフを送信して、進捗を追跡します。 レポートにコピーしたいチャートまたはパネルのドロップダウン メニューをクリックし、Add to report をクリックして送信先のレポートを選択します。
3.7 - 例のレポート
レポートギャラリー
ノート: 簡単なサマリーで可視化を追加
重要な観察結果や将来の作業に関するアイデア、プロジェクトの開発におけるマイルストーンを捉えましょう。レポート内のすべての実験の run は、そのパラメータ、メトリクス、ログ、コードにリンクされるため、作業の全体的な文脈を保存できます。
テキストを書き留め、関連するチャートを引き入れてインサイトを示しましょう。
トレーニング時間の比較を共有する方法については、What To Do When Inception-ResNet-V2 Is Too Slow W&B Report をご覧ください。
複雑なコードベースからの最高の例を保存し、簡単に参照したり、将来の対話のために保存します。Lyft のデータセットから LIDAR ポイントクラウドを可視化し、3D バウンディングボックスで注釈を付ける方法については、LIDAR point clouds W&B Report をご覧ください。
コラボレーション: 同僚と学びを共有する
プロジェクトの開始方法を説明し、これまでに観察したことを共有し、最新の学びを統合します。同僚は、任意のパネルやレポートの最後にコメントを記入して、詳細を提案したり議論したりすることができます。
同僚が自分で探索し、追加のインサイトを得て、次のステップをよりよく計画できるように、動的な設定を含めます。この例では、3 種類の実験を独立して可視化したり、比較したり、平均化したりできます。
初めての run とベンチマークの観察を共有する方法については、SafeLife benchmark experiments W&B Report をご覧ください。
スライダーや設定可能なメディアパネルを使用して、モデルの結果やトレーニングの進捗を示します。スライダーを使用した W&B Report の例については、Cute Animals and Post-Modern Style Transfer: StarGAN v2 for Multi-Domain Image Synthesis レポートをご覧ください。
作業ログ: 試したことを記録し、次のステップを計画する
実験に関する考えや学び、注意点、次のステップをプロジェクトを進めながら書き留め、一箇所に整理しておきましょう。これにより、スクリプトを超えた重要な部分をすべて"文書化"することができます。学びをレポートする方法についての例としては、Who Is Them? Text Disambiguation With Transformers W&B Report をご覧ください。
プロジェクトのストーリーを語り、後からモデルがどのように、そしてなぜ開発されたのかを理解するために参照することができます。The View from the Driver’s Seat W&B Report では、学びをレポートする方法をご覧いただけます。
OpenAI Robotics チームが W&B Reports を使用して大規模な機械学習プロジェクトを実行した方法を探るために、W&B Reports がどのように使用されたかの例については、Learning Dexterity End-to-End Using W&B Reports をご覧ください。
4 - レジストリ
W&B Registryは現在パブリックプレビュー中です。有効化の方法については、
こちら のセクションを参照してください。
W&B Registryは、組織内のアーティファクトバージョンの管理された中央リポジトリです。組織内で権限を持つ ユーザーは、すべてのアーティファクトのライフサイクルをダウンロード 、共有、共同管理できます。
Registryを使用して、アーティファクトバージョンを追跡 し、アーティファクトの使用履歴と変更履歴を監査し、アーティファクトのガバナンスとコンプライアンスを保証し、モデルCI/CDなどの下流プロセスを自動化 できます。
要約すると、W&B Registryを使用して以下を行うことができます:
前の画像は「Model」と「Dataset」のコアレジストリとカスタムレジストリがあるRegistryアプリを示しています。
基本を学ぶ
各組織には最初にモデルとデータセットのアーティファクトを整理するためのModels とDatasets と呼ばれる2つのレジストリが含まれています。組織のニーズに基づいて、他のアーティファクトタイプを整理するための追加のレジストリを作成する ことができます。
レジストリ は1つ以上のコレクション で構成されています。各コレクションは、異なるタスクまたはユースケースを表しています。
レジストリにアーティファクトを追加するには、最初に特定のアーティファクトバージョンをW&Bにログ します。アーティファクトをログすると、W&Bは自動的にそのアーティファクトにバージョンを割り当てます。アーティファクトバージョンは0から始まり、最初のバージョンはv0
、2番目はv1
というように続きます。
アーティファクトをW&Bにログしたら、その特定のアーティファクトバージョンをレジストリ内のコレクションにリンクできます。
「リンク」という用語は、W&Bがアーティファクトを保存している場所と、レジストリでアーティファクトにアクセスできる場所を接続するポインタを指します。アーティファクトをコレクションにリンクするときにW&Bはアーティファクトを重複しません。
例として、以下のコード例では、“my_model.txt"という名前のモデルアーティファクトをコアレジストリ 内の"first-collection"というコレクションにログしリンクする方法を示しています:
W&Bのrunを初期化します。
アーティファクトをW&Bにログします。
コレクションとレジストリの名前を指定して、アーティファクトバージョンをリンクします。
アーティファクトをコレクションにリンクします。
このPythonコードをスクリプトとして保存し実行してください。W&B Python SDKバージョン0.18.6以上が必要です。
import wandb
import random
# アーティファクトをトラックするためにW&Bのrunを初期化
run = wandb. init(project= "registry_quickstart" )
# シミュレートされたモデルファイルを作成してログします
with open("my_model.txt" , "w" ) as f:
f. write("Model: " + str(random. random()))
# アーティファクトをW&Bにログします
logged_artifact = run. log_artifact(
artifact_or_path= "./my_model.txt" ,
name= "gemma-finetuned" ,
type= "model" # アーティファクトタイプを指定
)
# 公開したいコレクションとレジストリの名前を指定
COLLECTION_NAME = "first-collection"
REGISTRY_NAME = "model"
# アーティファクトをレジストリにリンク
run. link_artifact(
artifact= logged_artifact,
target_path= f "wandb-registry- { REGISTRY_NAME} / { COLLECTION_NAME} "
)
指定したレジストリ内に存在しない場合、link_artifact(target_path = "")
メソッドで返されるrunオブジェクトの指定したコレクションをW&Bが自動的に作成します。
ターミナルが出力するURLは、W&Bがあなたのアーティファクトを保存しているプロジェクトにリダイレクトされます。
他の組織メンバーと公開したアーティファクトバージョンを表示するためにRegistryアプリに移動します。まずW&Bに移動します。左側のサイドバーでApplications 以下のRegistry を選択します。「Model」レジストリを選択します。そのレジストリ内で、リンクしたアーティファクトバージョンを持つ「first-collection」コレクションが表示されるはずです。
アーティファクトバージョンをレジストリ内のコレクションにリンクすると、それを所有している組織メンバーは、適切な権限を持っていれば、あなたのアーティファクトバージョンを表示、ダウンロード、管理し、下流のオートメーションを作成できます。
もしアーティファクトバージョンがメトリクスをログする場合(たとえば
run.log_artifact()
を使用して)、そのバージョンの詳細ページからメトリクスを表示できますし、コレクションのページからアーティファクトバージョン間でメトリクスを比較できます。参照:
レジストリ内のリンクされたアーティファクトを表示する 。
W&B Registryを有効にする
デプロイメントタイプに基づいて、以下の条件を満たしてW&B Registryを有効にします:
デプロイメントタイプ
有効にする方法
マルチテナントクラウド
アクションは必要ありません。W&B RegistryはW&Bアプリで利用可能です。
専用クラウド
アカウントチームに連絡してください。ソリューションアーキテクト(SA)チームがあなたのインスタンスのオペレーターコンソール内でW&B Registryを有効にします。インスタンスがサーバーリリースバージョン0.59.2以上であることを確認してください。
セルフマネージド
ENABLE_REGISTRY_UI
と呼ばれる環境変数を有効にします。サーバーで環境変数を有効にする方法の詳細についてはこちらのドキュメント をご覧ください。セルフマネージドインスタンスでは、インフラストラクチャ管理者がこの環境変数を有効にしてtrue
に設定する必要があります。インスタンスがサーバーリリースバージョン0.59.2以上であることを確認してください。
開始するためのリソース
ユースケースに応じて、W&B Registryの利用を開始するための以下のリソースを探索してください:
チュートリアルビデオをチェックしてください:
W&BのModel CI/CD コースを受講し、以下を学びましょう:
W&B Registryを使用してアーティファクトを管理し、バージョン管理、リネージトラッキング、および異なるライフサイクルステージへのモデルプロモートを行います。
Webhooksを使用してモデル管理ワークフローを自動化します。
外部MLシステムおよびツールとレジストリを統合して、モデル評価、モニタリング、デプロイメントを行います。
旧モデルレジストリからW&B Registryへの移行
旧モデルレジストリの廃止予定日は未定です。旧モデルレジストリを廃止する前に、W&Bは旧モデルレジストリの内容をW&B Registryに移行します。
旧モデルレジストリからW&B Registryへの移行プロセスについて詳しくは、旧モデルレジストリからの移行 を参照してください。
移行が行われるまで、W&Bは旧モデルレジストリと新しいレジストリの両方をサポートしています。
旧モデルレジストリを表示するには、W&BアプリでModel Registryに移動してください。ページの上部に、旧モデルレジストリアプリUIを使用できるバナーが表示されます。
質問がある場合や移行についての懸念がある場合は、support@wandb.comにお問い合わせいただくか、W&Bプロダクトチームとお話しください。
4.1 - レジストリの種類
W&B は 2 種類のレジストリをサポートしています: コア レジストリ と カスタム レジストリ 。
コアレジストリ
コアレジストリは、特定のユースケース、つまり Models と Datasets のためのテンプレートです。
デフォルトでは、Models レジストリは "model"
アーティファクトタイプを受け入れるように設定されており、Dataset レジストリは "dataset"
アーティファクトタイプを受け入れるように設定されています。管理者は、追加の受け入れ可能なアーティファクトタイプを追加することができます。
上記の画像は、W&B レジストリ アプリ UI における Models と Dataset のコアレジストリと、Fine_Tuned_Models というカスタムレジストリを示しています。
コアレジストリには 組織の公開範囲 があります。レジストリの管理者はコアレジストリの公開範囲を変更することはできません。
カスタムレジストリ
カスタムレジストリは、"model"
アーティファクトタイプや "dataset"
アーティファクトタイプに制限されません。
機械学習パイプラインの各ステップのために、初期データ収集から最終モデルデプロイメントまでのカスタムレジストリを作成することができます。
例えば、「Benchmark_Datasets」というレジストリを作成し、トレーニングされたモデルの性能評価のためにキュレーションされたデータセットを整理することができます。このレジストリ内には、トレーニング中にモデルが見たことのないユーザー質問と、それに対応する専門家によって検証された答えが含まれる「User_Query_Insurance_Answer_Test_Data」というコレクションを持つことができます。
カスタムレジストリは、組織または制限付きの公開範囲 のいずれかを持つことができます。レジストリの管理者は、組織の公開範囲を制限付きに変更することができます。ただし、レジストリ管理者はカスタムレジストリの公開範囲を制限付きから組織の公開範囲へ変更することはできません。
カスタムレジストリの作成方法については、カスタムレジストリを作成する を参照してください。
まとめ
以下の表は、コアレジストリとカスタムレジストリの違いをまとめています:
コア
カスタム
公開範囲
組織の公開範囲のみ。公開範囲は変更できません。
組織または制限付きのいずれか。公開範囲は組織から制限付きに変更できます。
メタデータ
あらかじめ設定され、ユーザーによる編集は不可。
ユーザーが編集可能。
アーティファクトタイプ
あらかじめ設定され、既存の受け入れられるアーティファクトタイプは削除できません。ユーザーは追加の受け入れ可能なアーティファクトタイプを追加可能。
管理者が受け入れられるタイプを定義できます。
カスタマイズ
既存のリストに追加のタイプを追加可能。
レジストリ名、説明、公開範囲、受け入れアーティファクトタイプを編集可能。
4.2 - カスタムレジストリを作成する
カスタムレジストリは、使用できるアーティファクトタイプに関して柔軟性とコントロールを提供し、レジストリの公開範囲を制限することができるなどの機能があります。
コアとカスタムレジストリの完全な比較は、Registry types の概要表をご覧ください。
カスタムレジストリを作成する
カスタムレジストリを作成するには:
https://wandb.ai/registry/ の Registry アプリに移動します。
Custom registry 内で、Create registry ボタンをクリックします。
Name フィールドにレジストリの名前を入力します。
必要に応じてレジストリの説明を提供します。
Registry visibility ドロップダウンからレジストリを閲覧できる人を選択します。レジストリの公開範囲オプションの詳細については、Registry visibility types をご覧ください。
All types または Specify types を Accepted artifacts type ドロップダウンから選択します。
(Specify types を選択した場合)レジストリが受け入れる1つ以上のアーティファクトタイプを追加します。
Create registry ボタンをクリックします。
アーティファクトタイプは、一旦レジストリの設定に保存されるとそのレジストリから削除することはできません。
たとえば、以下の画像はユーザーが作成しようとしている Fine_Tuned_Models
というカスタムレジストリを示しています。このレジストリは、手動でレジストリに追加されたメンバーのみに制限 されています。
公開範囲タイプ
レジストリの公開範囲 は、誰がそのレジストリにアクセスできるかを決定します。カスタムレジストリの公開範囲を制限すると、指定されたメンバーのみがそのレジストリにアクセスできるようにするのに役立ちます。
カスタムレジストリには2つの公開範囲オプションがあります:
公開範囲
説明
Restricted
招待された組織メンバーのみがレジストリにアクセスできます。
Organization
組織内の全員がレジストリにアクセスできます。
チーム管理者またはレジストリ管理者は、カスタムレジストリの公開範囲を設定できます。
Restricted公開範囲でカスタムレジストリを作成したユーザーは、自動的にそのレジストリの管理者として登録されます。
カスタムレジストリの公開範囲を設定する
チーム管理者またはレジストリ管理者は、カスタムレジストリの作成時または作成後に公開範囲を設定することができます。
既存のカスタムレジストリの公開範囲を制限するには:
https://wandb.ai/registry/ の Registry アプリに移動します。
任意のレジストリを選択します。
右上隅の歯車アイコンをクリックします。
Registry visibility ドロップダウンから、希望するレジストリの公開範囲を選択します。
Restricted visibility を選択した場合:
このレジストリにアクセスを許可したい組織のメンバーを追加します。 Registry members and roles セクションまでスクロールし、Add member ボタンをクリックします。
Member フィールドに追加したいメンバーのメールまたはユーザー名を入力します。
Add new member をクリックします。
チーム管理者がそれを作成する際に、カスタムレジストリの公開範囲をどのように設定するかに関する詳細は Create a custom registry を参照してください。
4.3 - レジストリアクセスを設定する
レジストリ管理者は、レジストリの設定を設定することで、レジストリロールを設定 、ユーザーを追加 、またはユーザーを削除 することができます。
ユーザー管理
ユーザーまたはチームの追加
レジストリ管理者は、個々のユーザーまたは全チームをレジストリに追加できます。ユーザーまたはチームをレジストリに追加するには、次の手順を実行します。
https://wandb.ai/registry/ に移動します。
ユーザーまたはチームを追加したいレジストリを選択します。
右上隅のギアアイコンをクリックして、レジストリの設定にアクセスします。
Registry access セクションで Add access をクリックします。
Include users and teams フィールドに、追加したいユーザー名、メールアドレス、またはチーム名を指定します。
Add access をクリックします。
レジストリでのユーザーロール設定 やレジストリロールの権限 についての詳細をご覧ください。
ユーザーまたはチームの削除
レジストリ管理者は、個々のユーザーまたはチーム全体をレジストリから削除できます。ユーザーまたはチームをレジストリから削除するには、次の手順を実行します。
https://wandb.ai/registry/ に移動します。
ユーザーを削除したいレジストリを選択します。
右上隅のギアアイコンをクリックして、レジストリの設定にアクセスします。
Registry access セクションに移動し、削除したいユーザー名、メールアドレス、またはチームを入力します。
Delete ボタンをクリックします。
チームからユーザーを削除すると、そのユーザーのレジストリへのアクセスも削除されます。
レジストリロール
レジストリ内の各ユーザーには レジストリロール があり、そのレジストリで何をできるかが決まります。
W&B は、レジストリにユーザーやチームが追加されると、自動的にデフォルトのレジストリロールを割り当てます。
Entity
Default registry role
Team
Viewer
User (non admin)
Viewer
Org admin
Admin
レジストリ管理者は、レジストリ内のユーザーやチームのロールを割り当てまたは変更することができます。詳細は レジストリでのユーザーロールの設定 を参照してください。
W&Bロールタイプ W&B には、チームロール とレジストリロール の2種類のロールがあります。
チームにおけるあなたのロールは、いかなるレジストリにおけるあなたのロールにも影響や関連を持ちません。
以下の表は、ユーザーが持つことのできる異なるロールとその権限を示しています:
Permission
Permission Group
Viewer
Member
Admin
コレクションの詳細を表示する
Read
X
X
X
リンクされたアーティファクトの詳細を表示する
Read
X
X
X
使用: レジストリ内で use_artifact を使用してアーティファクトを使用
Read
X
X
X
リンクされたアーティファクトをダウンロードする
Read
X
X
X
アーティファクトのファイルビューワーからファイルをダウンロードする
Read
X
X
X
レジストリを検索する
Read
X
X
X
レジストリの設定とユーザーリストを表示する
Read
X
X
X
コレクションの新しい自動化を作成する
Create
X
X
新しいバージョンが追加されたときの Slack 通知をオンにする
Create
X
X
新しいコレクションを作成する
Create
X
X
新しいカスタムレジストリを作成する
Create
X
X
コレクションカード (説明) を編集する
Update
X
X
リンクされたアーティファクトの説明を編集する
Update
X
X
コレクションのタグを追加または削除する
Update
X
X
リンクされたアーティファクトからエイリアスを追加または削除する
Update
X
X
新しいアーティファクトをリンクする
Update
X
X
レジストリ用の許可されたタイプ一覧を編集する
Update
X
X
カスタムレジストリ名を編集する
Update
X
X
コレクションを削除する
Delete
X
X
自動化を削除する
Delete
X
X
レジストリからアーティファクトのリンクを解除する
Delete
X
X
レジストリ用の承認されたアーティファクトタイプを編集する
Admin
X
レジストリの公開範囲を変更する(組織または制限付き)
Admin
X
ユーザーをレジストリに追加する
Admin
X
レジストリ内のユーザーのロールを割り当てるまたは変更する
Admin
X
継承された権限
レジストリ内のユーザーの権限は、そのユーザーに個別に、またはチームメンバーシップによって割り当てられた特権の最高レベルに依存します。
例えば、レジストリ管理者が Nico というユーザーをレジストリ A に追加し、Viewer レジストリロールを割り当てたとします。次に、レジストリ管理者が Foundation Model Team というチームをレジストリ A に追加し、Foundation Model Team に Member レジストリロールを割り当てたとします。
Nico は Foundation Model Team のメンバーであり、このチームは Registry の Member です。Member の権限は Viewer よりも高いため、W&B は Nico に Member ロールを付与します。
以下の表は、ユーザーの個別レジストリロールと、彼らが所属するチームのレジストリロールの間で矛盾が生じた場合の最高レベルの権限を示しています:
Team registry role
Individual registry role
Inherited registry role
Viewer
Viewer
Viewer
Member
Viewer
Member
Admin
Viewer
Admin
矛盾がある場合、W&B はユーザー名の横に最高レベルの権限を表示します。
例えば、以下の画像では、Alex は smle-reg-team-1
チームのメンバーであるため、Member ロールの特権を継承しています。
レジストリロールの設定
https://wandb.ai/registry/ に移動します。
設定したいレジストリを選択します。
右上隅のギアアイコンをクリックします。
Registry members and roles セクションまでスクロールします。
Member フィールド内で、権限を編集したいユーザーまたはチームを検索します。
Registry role 列でユーザーのロールをクリックします。
ドロップダウンから、ユーザーに割り当てたいロールを選択します。
4.4 - コレクションを作成する
A collection とは、レジストリ内でリンクされたアーティファクト バージョンのセットです。それぞれのコレクションは、個別のタスクやユースケースを表します。
例えば、コアデータセット レジストリ内に複数のコレクションを持つことができます。それぞれのコレクションには、MNIST、CIFAR-10、ImageNet などの異なるデータセットが含まれます。
別の例として、「chatbot」と呼ばれるレジストリがあり、そこにはモデル アーティファクトのコレクション、データセット アーティファクトのコレクション、およびファインチューンされたモデル アーティファクトのコレクションがあります。
レジストリとそのコレクションの整理方法は、あなた次第です。
W&B モデルレジストリに精通している場合は、登録されたモデルについても知識があるかもしれません。モデルレジストリ内の登録されたモデルは、今後は W&B レジストリのコレクションと呼ばれます。
コレクションのタイプ
それぞれのコレクションは、一種類だけのアーティファクトのタイプ を受け入れます。指定したタイプは、組織の他のメンバーと一緒にそのコレクションにリンクできるアーティファクトの種類を制限します。
アーティファクトのタイプは、プログラミング言語、例えば Python のデータタイプに似ています。この類推では、コレクションは文字列、整数、または浮動小数点数を格納できますが、これらのデータタイプの混合はできません。
例えば、「データセット」アーティファクトタイプを受け入れるコレクションを作成したとします。これにより、「データセット」タイプを持つ将来のアーティファクト バージョンのみをこのコレクションにリンクできます。同様に、「モデル」タイプのアーティファクトは、モデルアーティファクトタイプのみを受け入れるコレクションにのみリンクできます。
アーティファクトのタイプは、そのアーティファクト オブジェクトを作成するときに指定します。wandb.Artifact()
内の type
フィールドに注意してください。
import wandb
# Run を初期化
run = wandb. init(
entity = "<team_entity>" ,
project = "<project>"
)
# アーティファクトオブジェクトを作成
artifact = wandb. Artifact(
name= "<artifact_name>" ,
type= "<artifact_type>"
)
コレクションを作成するとき、事前に定義されたアーティファクト タイプのリストから選択できます。使用可能なアーティファクト タイプは、そのコレクションが所属するレジストリによります。
アーティファクトをコレクションにリンクしたり新しいコレクションを作成する前に、そのコレクションが受け入れるアーティファクトのタイプを調査してください 。
コレクションが受け入れるアーティファクトのタイプを確認する
コレクションにリンクする前に、コレクションが受け入れるアーティファクトタイプを確認してください。W&B Python SDK を使用してプログラム的に、もしくは W&B アプリを使用してインタラクティブに、コレクションが受け入れるアーティファクトタイプを確認することができます。
そのアーティファクト タイプを受け入れないコレクションにアーティファクトをリンクしようとすると、エラーメッセージが表示されます。
W&B App
Python SDK (Beta)
ホームページまたはレジストリの設定ページで、受け入れられるアーティファクトタイプをレジストリカードで見つけることができます。
どちらのメソッドでも、まず W&B レジストリ アプリに移動します。
レジストリ アプリのホームページでは、そのレジストリのレジストリ カードにスクロールして、受け入れられたアーティファクト タイプを表示できます。レジストリカード内の灰色の水平オーバルには、レジストリが受け入れるアーティファクト タイプが記載されています。
例えば、前の図はレジストリ アプリのホームページに複数のレジストリ カードを示しています。Model レジストリカード内で、2つのアーティファクトタイプ: model と model-new を見ることができます。
レジストリの設定ページで受け入れられたアーティファクト タイプを表示するには:
設定を表示するレジストリカードをクリックします。
右上のギアアイコンをクリックします。
受け入れられたアーティファクト タイプ フィールドまでスクロールします。
W&B Python SDK を使用して、レジストリが受け入れるアーティファクト タイプをプログラム的に表示します。
import wandb
registry_name = "<registry_name>"
artifact_types = wandb. Api(). project(name= f "wandb-registry- { registry_name} " ). artifact_types()
print(artifact_type. name for artifact_type in artifact_types)
実験やアーティファクトの追跡をせず、W&B API に問い合わせるだけの場合は、実行を初期化する必要がないため、後述のコードスニペットで実行を初期化しないことに注意してください。
コレクションが受け入れるアーティファクトのタイプを知ったら、コレクションを作成します 。
コレクションを作成する
レジストリ内でインタラクティブまたはプログラムでコレクションを作成します。コレクションを作成した後、そのコレクションが受け入れるアーティファクトのタイプを変更することはできません。
プログラム的にコレクションを作成する
wandb.init.link_artifact()
メソッドを使用して、アーティファクトをコレクションにリンクします。target_path
フィールドに、次の形式のパスとしてコレクションとレジストリの両方を指定します。
f "wandb-registry- { registry_name} / { collection_name} "
ここで、registry_name
はレジストリの名前で、collection_name
はコレクションの名前です。必ずレジストリ名の前に wandb-registry-
プレフィックスを追加してください。
存在しないコレクションにアーティファクトをリンクしようとすると、W&B は自動的にコレクションを作成します。存在するコレクションを指定した場合、W&B はそのアーティファクトを既存のコレクションにリンクします。
次のコードスニペットは、プログラムでコレクションを作成する方法を示しています。他の <>
で囲まれた値を必ず自分の値で置き換えてください。
import wandb
# Run を初期化
run = wandb. init(entity = "<team_entity>" , project = "<project>" )
# アーティファクトオブジェクトを作成
artifact = wandb. Artifact(
name = "<artifact_name>" ,
type = "<artifact_type>"
)
registry_name = "<registry_name>"
collection_name = "<collection_name>"
target_path = f "wandb-registry- { registry_name} / { collection_name} "
# アーティファクトをコレクションにリンク
run. link_artifact(artifact = artifact, target_path = target_path)
run. finish()
インタラクティブにコレクションを作成する
以下のステップで、W&B レジストリ アプリ UI を使用してレジストリ内にコレクションを作成する方法を説明します。
W&B アプリ UI の Registry アプリに移動します。
レジストリを選択します。
右上の Create collection ボタンをクリックします。
Name フィールドにコレクションの名前を入力します。
Type ドロップダウンからタイプを選択します。または、レジストリがカスタムアーティファクトタイプを有効にしている場合は、このコレクションが受け入れる1つ以上のアーティファクトタイプを提供します。
オプションで、Description フィールドにコレクションの説明を追加します。
オプションで、Tags フィールドに1つ以上のタグを追加します。
Link version をクリックします。
Project ドロップダウンから、アーティファクトが保存されているプロジェクトを選択します。
Artifact コレクションのドロップダウンからアーティファクトを選択します。
Version ドロップダウンから、コレクションにリンクしたいアーティファクトバージョンを選択します。
Create collection ボタンをクリックします。
4.5 - レジストリにアーティファクトバージョンをリンクする
リンクアーティファクトのバージョンをコレクションに追加して、組織内の他のメンバーがアクセスできるようにします。
アーティファクトをレジストリにリンクすると、そのアーティファクトがそのレジストリに「公開」されます。 レジストリにアクセスできるユーザーは、コレクション内のリンクされたアーティファクトのバージョンにアクセスできます。
言い換えれば、アーティファクトをレジストリコレクションにリンクすることによって、アーティファクトのバージョンはプライベートなプロジェクトレベルのスコープから、共有される組織レベルのスコープになります。
アーティファクトをコレクションにリンクする
アーティファクトバージョンをインタラクティブまたはプログラム的にコレクションにリンクします。
レジストリにアーティファクトをリンクする前に、コレクションが許可しているアーティファクトのタイプを確認してください。 コレクションタイプの詳細については、
コレクションを作成する 内の「コレクションタイプ」を参照してください。
ユースケースに基づいて、以下のタブで説明されている手順に従ってアーティファクトバージョンをリンクしてください。
アーティファクトバージョンがメトリクスをログに記録している場合(
run.log_artifact()
を使用するなど)、そのバージョンの詳細ページからメトリクスを閲覧することができ、アーティファクトのページからアーティファクトバージョン間のメトリクスを比較することができます。
レジストリでリンクされたアーティファクトを見る を参照してください。
Python SDK
Registry App
Artifact browser
プログラム的にアーティファクトバージョンをコレクションにリンクするには、wandb.init.Run.link_artifact()
を使用します。
アーティファクトをコレクションにリンクする前に、そのコレクションが所属するレジストリが既に存在することを確認してください。 レジストリが存在するかどうかを確認するには、W&B App UIのレジストリアプリにアクセスし、レジストリの名前を検索してください。
target_path
パラメータを使用して、リンクするアーティファクトバージョンのコレクションとレジストリを指定します。ターゲットパスは、プレフィックス “wandb-registry”、レジストリの名前、コレクション名がフォワードスラッシュで区切られています。
wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}
以下のコードスニペットをコピーして貼り付け、既存のレジストリ内のコレクションにアーティファクトバージョンをリンクしてください。<>
で囲まれた値を自分の値に置き換えてください。
import wandb
# run を初期化
run = wandb. init(
entity = "<チームエンティティ>" ,
project = "<プロジェクト名>"
)
# アーティファクトオブジェクトの作成
# type パラメータは、アーティファクトオブジェクトとコレクションタイプの両方のタイプを指定します
artifact = wandb. Artifact(name = "<名前>" , type = "<type>" )
# アーティファクトオブジェクトにファイルを追加
# ファイルのパスをローカルマシンで指定します
artifact. add_file(local_path = "<アーティファクトのローカルパス>" )
# アーティファクトをリンクするコレクションとレジストリを指定
REGISTRY_NAME = "<registry_name>"
COLLECTION_NAME = "<collection_name>"
target_path= f "wandb-registry- { REGISTRY_NAME} / { COLLECTION_NAME} "
# アーティファクトをコレクションにリンク
run. link_artifact(artifact = artifact, target_path = target_path)
アーティファクトバージョンをモデルレジストリまたはデータセットレジストリにリンクする場合、アーティファクトのタイプをそれぞれ "model"
または "dataset"
に設定してください。
Registry App に移動します。
アーティファクトバージョンをリンクするコレクションの名前の隣にマウスをホバーさせます。
詳細を表示 の隣にあるミートボールメニューアイコン(三つの横に並んだ点)を選択します。
ドロップダウンから、新しいバージョンをリンク を選択します。
サイドバーから、Team ドロップダウンからチームの名前を選択します。
Project ドロップダウンからアーティファクトを含むプロジェクトの名前を選択します。
Artifact ドロップダウンからアーティファクトの名前を選択します。
Version ドロップダウンからコレクションにリンクしたいアーティファクトのバージョンを選択します。
プロジェクトのアーティファクトブラウザに移動します。URLは: https://wandb.ai/<entity>/<project>/artifacts
左サイドバーでアーティファクトアイコンを選択します。
レジストリにリンクしたいアーティファクトバージョンをクリックします。
バージョン概要 セクション内で、Link to registry ボタンをクリックします。
画面右側に表示されるモーダルで、Select a registered model メニューのドロップダウンからアーティファクトを選択します。
次のステップ をクリックします。
(任意) Aliases ドロップダウンから別名を選択します。
Link to registry をクリックします。
リンクされたアーティファクトのメタデータ、バージョンデータ、使用状況、リネージ情報などをRegistry Appで表示します。
リンクされたアーティファクトをレジストリで表示する
Registry Appでメタデータ、リネージ、使用状況情報などのリンクされたアーティファクト情報を表示します。
Registry App に移動します。
アーティファクトをリンクしたレジストリの名前を選択します。
コレクションの名前を選択します。
コレクションのアーティファクトがメトリクスをログしている場合、メトリクスを表示 をクリックしてバージョンを比較します。
アーティファクトバージョンのリストから、アクセスしたいバージョンを選択します。バージョン番号は v0
から始まる増分で各リンクされたアーティファクトバージョンに割り当てられます。
アーティファクトバージョンの詳細を表示するには、そのバージョンをクリックします。このページのタブから、そのバージョンのメタデータ(ログされたメトリクスを含む)、リネージ、使用状況情報を表示できます。
バージョンタブ 内の フルネーム フィールドに注意してください。リンクされたアーティファクトのフルネームは、レジストリ、コレクション名、アーティファクトのバージョンのエイリアスまたはインデックスから構成されています。
wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}:v{INTEGER}
プログラム的にアーティファクトバージョンにアクセスするには、リンクされたアーティファクトのフルネームが必要です。
トラブルシューティング
アーティファクトをリンクできない場合は、次のような一般的なチェックを確認してください。
個人アカウントからアーティファクトをログする
個人エンティティを使用してW&Bにログされたアーティファクトはレジストリにリンクすることができません。 アーティファクトを組織内のチームエンティティを使用してログに記録していることを確認してください。 組織のチーム内でログに記録されたアーティファクトのみが組織のレジストリにリンクされることができます。
アーティファクトをレジストリにリンクしたい場合は、チームエンティティを使用してアーティファクトをログしてください。
あなたのチームエンティティを見つける
W&B はあなたのチームの名前をチームのエンティティとして使用します。 例えば、あなたのチームが team-awesome と呼ばれている場合、あなたのチームエンティティは team-awesome
です。
あなたのチームの名前を確認するには:
あなたのチームの W&B プロファイルページに移動します。
サイトの URL をコピーします。それはhttps://wandb.ai/<team>
の形式です。ここで <team>
はあなたのチームの名前とチームのエンティティの両方です。
チームエンティティからログする
wandb.init()
を使用して run を初期化するときに、エンティティとしてチームを指定します。もし run を初期化するときに entity
を指定しなかった場合、run はあなたのデフォルトエンティティを使用しますが、それがチームエンティティであるとは限りません。
import wandb
run = wandb. init(
entity= '<team_entity>' ,
project= '<project_name>'
)
run にアーティファクトをログするには、run.log_artifact を使用するか、Artifact オブジェクトを作成してからファイルを追加します:
artifact = wandb. Artifact(name= "<artifact_name>" , type= "<type>" )
アーティファクトのログ方法についての詳細は、アーティファクトを構成する を参照してください。
個人エンティティにログされたアーティファクトがある場合、それを組織内のエンティティに再ログする必要があります。
W&B App UIでレジストリのパスを確認する
UIを使用してレジストリのパスを確認する方法は2つあります: 空のコレクションを作成してコレクションの詳細を表示するか、コレクションのホームページで自動生成されたコードをコピー&ペーストすることです。
自動生成されたコードをコピーして貼り付ける
Registry app に移動します: https://wandb.ai/registry/ .
アーティファクトをリンクしたいレジストリをクリックします。
ページの上部に自動生成されたコードブロックが表示されます。
これをコピーしてコードに貼り付け、パスの最後の部分をコレクションの名前に置き換えてください。
空のコレクションを作成する
Registry app に移動します: https://wandb.ai/registry/ .
アーティファクトをリンクしたいレジストリをクリックします。
空のコレクションをクリックします。 空のコレクションが存在しない場合は、新しいコレクションを作成します。
表示されるコードスニペット内で、.link_artifact()
内の target_path
フィールドを識別します。
(任意) コレクションを削除します。
例えば、上記の手順を完了した後、target_path
パラメータを持つコードブロックを見つけます:
target_path =
"smle-registries-bug-bash/wandb-registry-Golden Datasets/raw_images"
これを構成要素に分解すると、プログラム的にアーティファクトをリンクするために必要なパスを作成するために必要なものが見えます:
ORG_ENTITY_NAME = "smle-registries-bug-bash"
REGISTRY_NAME = "Golden Datasets"
COLLECTION_NAME = "raw_images"
一時コレクションのコレクション名を、リンクしたいアーティファクトのコレクション名に置き換えることを忘れないでください。
4.6 - レジストリからアーティファクトをダウンロードする
W&B Python SDK を使用して、レジストリにリンクされたアーティファクトをダウンロードします。アーティファクトをダウンロードして使用するには、レジストリ名、コレクション名、およびダウンロードしたいアーティファクトバージョンのエイリアスまたはインデックスを知る必要があります。
アーティファクトのプロパティを知ったら、リンクされたアーティファクトへのパスを構築 してアーティファクトをダウンロードできます。または、W&B アプリ UI から事前に生成されたコードスニペットをコピーして貼り付け することで、レジストリにリンクされたアーティファクトをダウンロードすることもできます。
リンクされたアーティファクトへのパスを構築
レジストリにリンクされたアーティファクトをダウンロードするには、そのリンクされたアーティファクトのパスを知っている必要があります。パスは、レジストリ名、コレクション名、およびアクセスしたいアーティファクトバージョンのエイリアスまたはインデックスで構成されます。
レジストリ、コレクション、およびアーティファクトバージョンのエイリアスまたはインデックスを手に入れたら、以下の文字列テンプレートを使用してリンクされたアーティファクトへのパスを構築できます。
# バージョンインデックスを指定したアーティファクト名
f "wandb-registry- { REGISTRY} / { COLLECTION} :v { INDEX} "
# エイリアスを指定したアーティファクト名
f "wandb-registry- { REGISTRY} / { COLLECTION} : { ALIAS} "
中括弧 {}
内の値を、アクセスしたいレジストリ、コレクション、およびアーティファクトバージョンのエイリアスまたはインデックスの名前で置き換えてください。
アーティファクトバージョンをコアモデルレジストリまたはコアデータセットレジストリにリンクするには、model
または dataset
を指定してください。
リンクされたアーティファクトのパスを取得したら、wandb.init.use_artifact
メソッドを使用してアーティファクトにアクセスし、その内容をダウンロードします。以下のコードスニペットは、W&B レジストリにリンクされたアーティファクトを使用およびダウンロードする方法を示しています。<>
内の値を自分のものに置き換えてください。
import wandb
REGISTRY = '<registry_name>'
COLLECTION = '<collection_name>'
ALIAS = '<artifact_alias>'
run = wandb. init(
entity = '<team_name>' ,
project = '<project_name>'
)
artifact_name = f "wandb-registry- { REGISTRY} / { COLLECTION} : { ALIAS} "
# artifact_name = '<artifact_name>' # Registry App で指定されたフルネームをコピーして貼り付け
fetched_artifact = run. use_artifact(artifact_or_name = artifact_name)
download_path = fetched_artifact. download()
.use_artifact()
メソッドは、run を作成するとともに、ダウンロードしたアーティファクトをその run の入力としてマークします。 アーティファクトを run の入力としてマークすることにより、W&B はそのアーティファクトのリネージを追跡できます。
runを作成したくない場合は、wandb.Api()
オブジェクトを使用してアーティファクトにアクセスできます。
import wandb
REGISTRY = "<registry_name>"
COLLECTION = "<collection_name>"
VERSION = "<version>"
api = wandb. Api()
artifact_name = f "wandb-registry- { REGISTRY} / { COLLECTION} : { VERSION} "
artifact = api. artifact(name = artifact_name)
例: W&B レジストリにリンクされたアーティファクトを使用およびダウンロード
次のコード例は、ユーザーが Fine-tuned Models レジストリにある phi3-finetuned
というコレクションにリンクされたアーティファクトをダウンロードする方法を示しています。アーティファクトバージョンのエイリアスは production
に設定されています。
import wandb
TEAM_ENTITY = "product-team-applications"
PROJECT_NAME = "user-stories"
REGISTRY = "Fine-tuned Models"
COLLECTION = "phi3-finetuned"
ALIAS = 'production'
# 指定されたチームとプロジェクト内で run を初期化
run = wandb. init(entity= TEAM_ENTITY, project = PROJECT_NAME)
artifact_name = f "wandb-registry- { REGISTRY} / { COLLECTION} : { ALIAS} "
# アーティファクトにアクセスし、それをリネージ追跡のために run の入力としてマーク
fetched_artifact = run. use_artifact(artifact_or_name = name)
# アーティファクトをダウンロード。ダウンロードされたコンテンツのパスを返します
downloaded_path = fetched_artifact. download()
APIリファレンスガイドの use_artifact
と Artifact.download()
で可能なパラメータや返り値の種類について詳しく見てください。
複数の組織に所属する個人エンティティを持つユーザー 複数の組織に所属する個人エンティティを持つユーザーは、レジストリにリンクされたアーティファクトにアクセスする際、組織名を指定するか、チームエンティティを使用する必要があります。
import wandb
REGISTRY = "<registry_name>"
COLLECTION = "<collection_name>"
VERSION = "<version>"
# API をインスタンス化する際に、自分のチームエンティティを使用していることを確認
api = wandb. Api(overrides= {"entity" : "<team-entity>" })
artifact_name = f "wandb-registry- { REGISTRY} / { COLLECTION} : { VERSION} "
artifact = api. artifact(name = artifact_name)
# パスに組織の表示名または組織エンティティを使用
api = wandb. Api()
artifact_name = f " { ORG_NAME} /wandb-registry- { REGISTRY} / { COLLECTION} : { VERSION} "
artifact = api. artifact(name = artifact_name)
ORG_NAME
は組織の表示名です。マルチテナント SaaS ユーザーは、https://wandb.ai/account-settings/
の組織の設定ページで組織名を見つけることができます。専用クラウドおよび自己管理ユーザーの場合、組織の表示名を確認するには、アカウント管理者に連絡してください。
事前に生成されたコードスニペットのコピーと貼り付け
W&B は、レジストリにリンクされたアーティファクトをダウンロードするために、Pythonスクリプト、ノートブック、またはターミナルにコピーして貼り付けることができるコードスニペットを作成します。
レジストリアプリに移動します。
アーティファクトを含むレジストリの名前を選択します。
コレクションの名前を選択します。
アーティファクトバージョンのリストからアクセスするバージョンを選択します。
Usage タブを選択します。
Usage API セクションに表示されたコードスニペットをコピーします。
コピーしたコードスニペットを Python スクリプト、ノートブック、またはターミナルに貼り付けます。
4.7 - バージョンをタグで整理する
コレクションやコレクション内のアーティファクト バージョンを整理するためにタグを使用します。タグは、Python SDK または W&B アプリ UI で追加、削除、編集が可能です。
コレクションやアーティファクトバージョンをレジストリ内で整理するためにタグを作成し追加します。W&B アプリ UI または W&B Python SDK を使用して、コレクションまたはアーティファクトバージョンにタグを追加、変更、表示、削除できます。
エイリアスとタグの使い分け 特定のアーティファクトバージョンを一意に参照する必要がある場合は、エイリアスを使用します。例えば、artifact_name:alias
が常に単一で特定のバージョンを指すように、「production」や「latest」といったエイリアスを使用します。
より自由にグループ化や検索をしたい場合は、タグを使用します。タグは複数のバージョンやコレクションが同じラベルを共有できるときに理想的で、特定の識別子に関連付けられるバージョンが一つだけである保証は必要ありません。
コレクションにタグを追加する
W&B アプリ UI または Python SDK を使用してコレクションにタグを追加します。
W&B アプリ UI を使用してコレクションにタグを追加します。
W&B レジストリに移動します: https://wandb.ai/registry
レジストリカードをクリックします
コレクション名の横にある View details をクリックします
コレクションカード内で、Tags フィールドの隣にあるプラスアイコン (+ ) をクリックし、タグの名前を入力します
キーボードの Enter を押します
import wandb
COLLECTION_TYPE = "<collection_type>"
ORG_NAME = "<org_name>"
REGISTRY_NAME = "<registry_name>"
COLLECTION_NAME = "<collection_name>"
full_name = f " { ORG_NAME} /wandb-registry- { REGISTRY_NAME} / { COLLECTION_NAME} "
collection = wandb. Api(). artifact_collection(
type_name = COLLECTION_TYPE,
name = full_name
)
collection. tags = ["your-tag" ]
collection. save()
コレクションに属するタグを更新する
tags
属性を再割り当てするか、変更することでプログラム上でタグを更新します。W&B は tags
属性をインプレースで変更するのではなく、再割り当てすることを推奨しており、これは良い Python の習慣でもあります。
例えば、以下のコードスニペットは、再割り当てを用いてリストを更新する一般的な方法を示しています。簡潔にするために、このコード例は コレクションにタグを追加するセクション から続いています。
collection. tags = [* collection. tags, "new-tag" , "other-tag" ]
collection. tags = collection. tags + ["new-tag" , "other-tag" ]
collection. tags = set(collection. tags) - set(tags_to_delete)
collection. tags = [] # すべてのタグを削除
次のコードスニペットは、インプレースでの変更を使用してアーティファクトバージョンに属するタグを更新する方法を示しています。
collection. tags += ["new-tag" , "other-tag" ]
collection. tags. append("new-tag" )
collection. tags. extend(["new-tag" , "other-tag" ])
collection. tags[:] = ["new-tag" , "other-tag" ]
collection. tags. remove("existing-tag" )
collection. tags. pop()
collection. tags. clear()
コレクションに属するタグを表示する
W&B アプリ UI を使用してコレクションに追加されたタグを表示します。
W&B レジストリに移動します: https://wandb.ai/registry
レジストリカードをクリックします
コレクション名の横にある View details をクリックします
コレクションに 1 つ以上のタグがある場合、それらのタグはコレクションカード内の Tags フィールドの隣に表示されます。
コレクションに追加されたタグは、コレクション名の隣にも表示されます。
例えば、以下の画像では、「zoo-dataset-tensors」コレクションに “tag1” というタグが追加されています。
コレクションからタグを削除する
W&B アプリ UI を使用してコレクションからタグを削除します。
W&B レジストリに移動します: https://wandb.ai/registry
レジストリカードをクリックします
コレクション名の横にある View details をクリックします
コレクションカード内で、削除したいタグの名前の上にマウスを移動してください
キャンセルボタン(X アイコン)をクリックします
アーティファクトバージョンにタグを追加する
W&B アプリ UI または Python SDK を使用して、コレクションにリンクされたアーティファクトバージョンにタグを追加します。
W&B レジストリに移動します: https://wandb.ai/registry
レジストリカードをクリックします
タグを追加したいコレクションの名前の横にある View details をクリックします
下にスクロールして Versions を表示します
アーティファクトバージョンの横にある View をクリックします
Version タブ内で、Tags フィールドの隣にあるプラスアイコン (+ ) をクリックし、タグの名前を入力します
キーボードの Enter を押します
タグを追加または更新したいアーティファクトバージョンを取得します。アーティファクトバージョンを取得したら、アーティファクトオブジェクトの tag
属性にアクセスして、そのアーティファクトのタグを追加または変更します。1 つ以上のタグをリストとして tag
属性に渡します。
他のアーティファクト同様、W&B からアーティファクトを取得するのに run を作成する必要はありませんが、run を作成し、その run の中でアーティファクトを取得することもできます。どちらの場合でも、W&B サーバー上でアーティファクトを更新するために、アーティファクトオブジェクトの save
メソッドを呼び出すことを確認してください。
以下のコードセルをコピーして、アーティファクトバージョンのタグを追加または変更します。<>
内の値を自分のものに置き換えてください。
次のコードスニペットは、新しい run を作成せずにアーティファクトを取得してタグを追加する方法を示しています。
import wandb
ARTIFACT_TYPE = "<TYPE>"
ORG_NAME = "<org_name>"
REGISTRY_NAME = "<registry_name>"
COLLECTION_NAME = "<collection_name>"
VERSION = "<artifact_version>"
artifact_name = f " { ORG_NAME} /wandb-registry- { REGISTRY_NAME} / { COLLECTION_NAME} :v { VERSION} "
artifact = wandb. Api(). artifact(name = artifact_name, type = ARTIFACT_TYPE)
artifact. tags = ["tag2" ] # リストに 1 つ以上のタグを提供
artifact. save()
次のコードスニペットは、新しい run を作成してアーティファクトを取得し、タグを追加する方法を示しています。
import wandb
ORG_NAME = "<org_name>"
REGISTRY_NAME = "<registry_name>"
COLLECTION_NAME = "<collection_name>"
VERSION = "<artifact_version>"
run = wandb. init(entity = "<entity>" , project= "<project>" )
artifact_name = f " { ORG_NAME} /wandb-registry- { REGISTRY_NAME} / { COLLECTION_NAME} :v { VERSION} "
artifact = run. use_artifact(artifact_or_name = artifact_name)
artifact. tags = ["tag2" ] # リストに 1 つ以上のタグを提供
artifact. save()
アーティファクトバージョンに属するタグを更新する
tags
属性を再割り当てするか、変更することでプログラム上でタグを更新します。W&B は tags
属性をインプレースで変更するのではなく、再割り当てすることを推奨しており、これは良い Python の習慣でもあります。
例えば、以下のコードスニペットは、再割り当てを用いてリストを更新する一般的な方法を示しています。簡潔にするために、このコード例は アーティファクトバージョンにタグを追加するセクション から続いています。
artifact. tags = [* artifact. tags, "new-tag" , "other-tag" ]
artifact. tags = artifact. tags + ["new-tag" , "other-tag" ]
artifact. tags = set(artifact. tags) - set(tags_to_delete)
artifact. tags = [] # すべてのタグを削除
次のコードスニペットは、インプレースでの変更を使用してアーティファクトバージョンに属するタグを更新する方法を示しています。
artifact. tags += ["new-tag" , "other-tag" ]
artifact. tags. append("new-tag" )
artifact. tags. extend(["new-tag" , "other-tag" ])
artifact. tags[:] = ["new-tag" , "other-tag" ]
artifact. tags. remove("existing-tag" )
artifact. tags. pop()
artifact. tags. clear()
アーティファクトバージョンに属するタグを表示する
W&B アプリ UI または Python SDK を使用して、レジストリにリンクされたアーティファクトバージョンに属するタグを表示します。
W&B レジストリに移動します: https://wandb.ai/registry
レジストリカードをクリックします
タグを追加したいコレクションの名前の横にある View details をクリックします
下にスクロールして Versions セクションを表示します
アーティファクトバージョンに 1 つ以上のタグがある場合、それらのタグは Tags 列に表示されます。
アーティファクトバージョンを取得して、そのタグを表示します。アーティファクトバージョンを取得したら、アーティファクトオブジェクトの tag
属性を表示して、そのアーティファクトに属するタグを表示します。
他のアーティファクト同様、W&B からアーティファクトを取得するのに run を作成する必要はありませんが、run を作成し、その run の中でアーティファクトを取得することもできます。
以下のコードセルをコピーして、アーティファクトバージョンのタグを追加または変更します。<>
内の値を自分のものに置き換えてください。
次のコードスニペットは、新しい run を作成せずにアーティファクトバージョンを取得して表示する方法を示しています。
import wandb
ARTIFACT_TYPE = "<TYPE>"
ORG_NAME = "<org_name>"
REGISTRY_NAME = "<registry_name>"
COLLECTION_NAME = "<collection_name>"
VERSION = "<artifact_version>"
artifact_name = f " { ORG_NAME} /wandb-registry- { REGISTRY_NAME} / { COLLECTION_NAME} :v { VERSION} "
artifact = wandb. Api(). artifact(name = artifact_name, type = artifact_type)
print(artifact. tags)
次のコードスニペットは、新しい run を作成してアーティファクトバージョンのタグを取得して表示する方法を示しています。
import wandb
ORG_NAME = "<org_name>"
REGISTRY_NAME = "<registry_name>"
COLLECTION_NAME = "<collection_name>"
VERSION = "<artifact_version>"
run = wandb. init(entity = "<entity>" , project= "<project>" )
artifact_name = f " { ORG_NAME} /wandb-registry- { REGISTRY_NAME} / { COLLECTION_NAME} :v { VERSION} "
artifact = run. use_artifact(artifact_or_name = artifact_name)
print(artifact. tags)
アーティファクトバージョンからタグを削除する
W&B レジストリに移動します: https://wandb.ai/registry
レジストリカードをクリックします
タグを追加したいコレクションの名前の横にある View details をクリックします
下にスクロールして Versions を表示します
アーティファクトバージョンの横にある View をクリックします
Version タブ内でタグの名前の上にマウスを移動してください
キャンセルボタン(X アイコン)をクリックします
既存のタグを検索する
W&B アプリ UI を使用して、コレクションやアーティファクトバージョン内の既存のタグを検索します。
W&B レジストリに移動します: https://wandb.ai/registry
レジストリカードをクリックします
検索バー内にタグの名前を入力します
特定のタグを持つアーティファクトバージョンを見つける
W&B Python SDK を使用して、特定のタグセットを持つアーティファクトバージョンを見つけます。
import wandb
api = wandb. Api()
tagged_artifact_versions = api. artifacts(
type_name = "<artifact_type>" ,
name = "<artifact_name>" ,
tags = ["<tag_1>" , "<tag_2>" ]
)
for artifact_version in tagged_artifact_versions:
print(artifact_version. tags)
4.8 - レジストリ項目を見つける
W&B レジストリアプリのグローバル検索バー を使用して、レジストリ、コレクション、アーティファクトバージョンタグ、コレクションタグ、またはエイリアスを見つけます。W&B Python SDK を使用して、特定の条件に基づいて レジストリ、コレクション、およびアーティファクトバージョンをフィルタリング するために、MongoDBスタイルのクエリを使用することができます。
表示権限がある項目のみが検索結果に表示されます。
レジストリ項目の検索
レジストリ項目を検索するには:
W&B レジストリアプリに移動します。
ページ上部の検索バーに検索語を指定します。Enter を押して検索します。
指定した語が既存のレジストリ、コレクション名、アーティファクトバージョンタグ、コレクションタグ、またはエイリアスと一致する場合、検索バーの下に検索結果が表示されます。
MongoDBスタイルのクエリでレジストリ項目をクエリ
wandb.Api().registries()
と query predicates を使用して、1つ以上の MongoDBスタイルクエリ に基づいて、レジストリ、コレクション、およびアーティファクトバージョンをフィルタリングします。
以下の表は、フィルタリングしたい項目の種類に基づいて使用できるクエリの名前を示しています。
クエリ名
registries
name
, description
, created_at
, updated_at
collections
name
, tag
, description
, created_at
, updated_at
versions
tag
, alias
, created_at
, updated_at
, metadata
以下のコード例は、一般的な検索シナリオを示しています。
wandb.Api().registries()
メソッドを使用するには、まず W&B Python SDK (wandb
) ライブラリをインポートします。
import wandb
# (オプション)読みやすさのために、wandb.Api() クラスのインスタンスを作成します。
api = wandb. Api()
model
という文字列を含むすべてのレジストリをフィルタリングします。
# `model` という文字列を含むすべてのレジストリをフィルタリングします。
registry_filters = {
"name" : {"$regex" : "model" }
}
# フィルタに一致するすべてのレジストリの反復可能なオブジェクトを返します
registries = api. registries(filter= registry_filters)
レジストリに関係なく、コレクション名に yolo
という文字列を含むすべてのコレクションをフィルタリングします。
# レジストリに関係なく、コレクション名に
# `yolo` という文字列を含むすべてのコレクションをフィルタリングします。
collection_filters = {
"name" : {"$regex" : "yolo" }
}
# フィルタに一致するすべてのコレクションの反復可能なオブジェクトを返します
collections = api. registries(). collections(filter= collection_filters)
レジストリに関係なく、コレクション名に yolo
という文字列を含み、cnn
というタグを持つすべてのコレクションをフィルタリングします。
# レジストリに関係なく、コレクション名に
# `yolo` という文字列を含み、`cnn` というタグを持つすべてのコレクションをフィルタリングします。
collection_filters = {
"name" : {"$regex" : "yolo" },
"tag" : "cnn"
}
# フィルタに一致するすべてのコレクションの反復可能なオブジェクトを返します
collections = api. registries(). collections(filter= collection_filters)
model
という文字列を含むすべてのアーティファクトバージョンを検索し、image-classification
というタグまたは latest
エイリアスを持っているもの:
# `model` という文字列を含むすべてのアーティファクトバージョンを検索し、
# `image-classification` というタグまたは `latest` エイリアスを持っているもの。
registry_filters = {
"name" : {"$regex" : "model" }
}
# 論理 $or 演算子を使用してアーティファクトバージョンをフィルタリングします
version_filters = {
"$or" : [
{"tag" : "image-classification" },
{"alias" : "production" }
]
}
# フィルタに一致するすべてのアーティファクトバージョンの反復可能なオブジェクトを返します
artifacts = api. registries(filter= registry_filters). collections(). versions(filter= version_filters)
詳細については、MongoDB ドキュメントの logical query operators を参照してください。
前述のコードスニペット内の artifacts
の反復可能なオブジェクトの各項目は、Artifact
クラスのインスタンスです。つまり、各アーティファクトの属性(name
、collection
、aliases
、tags
、created_at
など)にアクセスできます。
for art in artifacts:
print(f "artifact name: { art. name} " )
print(f "collection artifact belongs to: { art. collection. name} " )
print(f "artifact aliases: { art. aliases} " )
print(f "tags attached to artifact: { art. tags} " )
print(f "artifact created at: { art. created_at} \n " )
アーティファクトオブジェクトの属性の完全なリストについては、API Reference docs の Artifacts Class を参照してください。
レジストリやコレクションに関係なく、2024-01-08 から 2025-03-04 の 13:10 UTC の間に作成されたすべてのアーティファクトバージョンをフィルタリングします。
# 2024-01-08 から 2025-03-04 の 13:10 UTC の間に作成された
# すべてのアーティファクトバージョンを検索します。
artifact_filters = {
"alias" : "latest" ,
"created_at" : {"$gte" : "2024-01-08" , "$lte" : "2025-03-04 13:10:00" },
}
# フィルタに一致するすべてのアーティファクトバージョンの反復可能なオブジェクトを返します
artifacts = api. registries(). collections(). versions(filter= artifact_filters)
日付と時刻は YYYY-MM-DD HH:MM:SS
の形式で指定します。日付のみでフィルタリングしたい場合は、時間、分、秒を省略することができます。
詳細は、MongoDB ドキュメントの query comparisons を参照してください。
4.9 - コレクションに注釈を付ける
コレクションに人間が理解しやすいテキストを追加して、ユーザーがコレクションの目的とその中に含まれるアーティファクトを理解するのを助けます。
コレクションに応じて、トレーニングデータ、モデルアーキテクチャー、タスク、ライセンス、参考文献、デプロイメントに関する情報を含めることをお勧めします。以下は、コレクションで文書化する価値のあるトピックのリストです。
W&Bは少なくともこれらの詳細を含めることを推奨します。
概要 : コレクションの目的。機械学習実験に使用された機械学習フレームワーク。
ライセンス : 機械学習モデルの使用に関連する法的条件と許可。モデルのユーザーがどの法的枠組みの下でモデルを利用できるかを理解するのに役立ちます。一般的なライセンスには、Apache 2.0、MIT、GPL などがあります。
参考文献 : 関連する研究論文、データセット、または外部リソースへの引用または参考文献。
コレクションにトレーニングデータが含まれている場合は、以下の詳細を考慮してください。
トレーニングデータ : 使用したトレーニングデータの説明
プロセッシング : トレーニングデータセットに対して行われたプロセッシング。
データストレージ : そのデータがどこに保存されていて、どのようにアクセスするか。
コレクションに機械学習モデルが含まれている場合は、以下の詳細を考慮してください。
アーキテクチャー : モデルのアーキテクチャー、レイヤー、および特定のデザイン選択に関する情報。
タスク : コレクションモデルが実行するように設計された特定のタスクまたは問題の種類。モデルの意図された能力のカテゴリ分けです。
モデルをデシリアライズ : あなたのチームの誰かがモデルをメモリにロードする方法に関する情報を提供してください。
タスク : 機械学習モデルが実行するように設計された特定のタスクまたは問題の種類。モデルの意図された能力のカテゴリ分けです。
デプロイメント : モデルがどのように、どこでデプロイされるかに関する詳細、およびワークフローのオーケストレーションプラットフォームなどの他の企業システムにモデルを統合する方法に関するガイダンス。
コレクションに説明を追加する
W&B Registry UIまたはPython SDKを使用して、インタラクティブまたはプログラム的にコレクションに説明を追加します。
W&B Registry UI
Python SDK
https://wandb.ai/registry/ でW&B Registryにアクセスします。
コレクションをクリックします。
コレクション名の横にある詳細を表示 を選択します。
説明 フィールド内で、コレクションに関する情報を提供します。Markdownマークアップ言語 でテキストをフォーマットします。
wandb.Api().artifact_collection()
メソッドを使用してコレクションの説明にアクセスします。返されたオブジェクトの description
プロパティを使用してコレクションに説明を追加または更新します。
type_name
パラメータにはコレクションのタイプを、name
パラメータにはコレクションの完全な名前を指定します。コレクションの名前は「wandb-registry」、レジストリの名前、およびコレクションの名前をスラッシュで区切ったものです:
wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}
以下のコードスニペットをあなたのPythonスクリプトまたはノートブックにコピーペーストします。角括弧で囲まれた値 (<>
) をあなた独自のものに置き換えてください。
import wandb
api = wandb. Api()
collection = api. artifact_collection(
type_name = "<collection_type>" ,
name = "<collection_name>"
)
collection. description = "This is a description."
collection. save()
例えば、以下の画像は、モデルのアーキテクチャー、意図された使用法、パフォーマンス情報などをドキュメントしているコレクションを示しています。
4.10 - リネージ マップを作成および表示する
W&B Registry でリネージ マップを作成する。
W&B レジストリ内のコレクションでは、ML 実験が使用するアーティファクトの履歴を確認することができます。この履歴は リネージグラフ と呼ばれます。
コレクションの一部ではないアーティファクトに対しても、W&Bにログを記録したリネージグラフを表示することができます。
リネージグラフは、アーティファクトをログする特定の run を表示できます。さらに、リネージグラフはどの run がアーティファクトを入力として使用したかも表示できます。言い換えると、リネージグラフはrun の入力と出力を表示できます。
例えば、次の画像は ML 実験全体で作成および使用されたアーティファクトを示しています。
左から右に、画像は以下を示しています。
複数の runs が split_zoo_dataset:v4
アーティファクトをログします。
“rural-feather-20” run は split_zoo_dataset:v4
アーティファクトをトレーニング用に使用します。
“rural-feather-20” run の出力は zoo-ylbchv20:v0
というモデルのアーティファクトです。
“northern-lake-21” という run はモデルを評価するために zoo-ylbchv20:v0
モデルアーティファクトを使用します。
run の入力をトラックする
wandb.init.use_artifact
API を使用して、run の入力または依存関係としてアーティファクトをマークします。
次のコードスニペットは、use_artifact
の使用方法を示しています。山括弧 (< >
) で囲まれた値をあなたの値に置き換えてください。
import wandb
# run を初期化する
run = wandb. init(project= "<project>" , entity= "<entity>" )
# アーティファクトを取得し、依存関係としてマークする
artifact = run. use_artifact(artifact_or_name= "<name>" , aliases= "<alias>" )
run の出力をトラックする
作成したアーティファクトの出力を run の出力として宣言するには、(wandb.init.log_artifact
) を使用します。
次のコードスニペットは、wandb.init.log_artifact
API の使用方法を示しています。山括弧 (< >
) で囲まれた値をあなたの値に置き換えるようにしてください。
import wandb
# run を初期化する
run = wandb. init(entity "<entity>" , project = "<project>" ,)
artifact = wandb. Artifact(name = "<artifact_name>" , type = "<artifact_type>" )
artifact. add_file(local_path = "<local_filepath>" , name= "<optional-name>" )
# アーティファクトをログとして run の出力にする
run. log_artifact(artifact_or_path = artifact)
アーティファクトの作成に関する詳細については、Create an artifact を参照してください。
コレクション内のリネージグラフを表示する
W&B レジストリ内のコレクションにリンクされたアーティファクトのリネージを表示します。
W&B レジストリに移動します。
アーティファクトを含むコレクションを選択します。
ドロップダウンから、リネージグラフを表示したいアーティファクトのバージョンをクリックします。
「Lineage」タブを選択します。
アーティファクトのリネージグラフのページに移動すると、そのリネージグラフ内の任意のノードに関する追加情報を表示できます。
run ノードを選択して、その run の詳細(run の ID、run の名前、run の状態など)を表示します。例として、次の画像は rural-feather-20
run に関する情報を示しています。
アーティファクトノードを選択して、そのアーティファクトの詳細(完全な名前、タイプ、作成時間、関連するエイリアスなど)を表示します。
4.11 - レガシー モデルレジストリ から移行する
W&B は旧 W&B モデルレジストリ から新しい W&B レジストリ への資産の移行を行います。この移行は W&B が完全に管理し、ユーザーの介入を必要としません。このプロセスは、既存のワークフローに最小限の影響を与えるよう、できる限りシームレスに行うよう設計されています。
移行は、新しい W&B レジストリが現在のモデルレジストリで利用可能なすべての機能を含んだ時点で行われます。W&B は、現在のワークフロー、コードベース、参照を維持するよう努めます。
このガイドは常に更新され、新しい情報が得られるたびに更新されます。質問やサポートが必要な場合は、support@wandb.com に問い合わせてください。
W&B レジストリが旧モデルレジストリと異なる点
W&B レジストリは、モデル、データセット、およびその他のアーティファクトを管理するための、より強力で柔軟な環境を提供するよう設計された新機能と強化を導入します。
旧モデルレジストリを表示するには、W&B アプリでモデルレジストリに移動します。ページの上部にバナーが表示され、旧モデルレジストリアプリの UI を使用できます。
組織の公開範囲
旧モデルレジストリにリンクされたアーティファクトはチームレベルの公開範囲を持っています。つまり、チームのメンバーだけが旧 W&B モデルレジストリでアーティファクトを閲覧できます。W&B レジストリは組織レベルの公開範囲を持っています。つまり、適切な権限を持つ組織全体のメンバーがレジストリにリンクされたアーティファクトを閲覧できます。
レジストリへの公開範囲の制限
カスタムレジストリの表示とアクセスを誰ができるかを制限します。カスタムレジストリの作成時または作成後に、レジストリへの公開範囲を制限できます。制限されたレジストリでは、選択したメンバーのみがコンテンツにアクセスでき、プライバシーとコントロールを維持します。レジストリの公開範囲の詳細については、レジストリの公開範囲の種類 を参照してください。
カスタムレジストリの作成
旧モデルレジストリとは異なり、W&B レジストリはモデルやデータセットレジストリに限定されません。特定のワークフローやプロジェクトニーズに合わせたカスタムレジストリを作成し、任意のオブジェクトタイプを保持できるようにします。この柔軟性により、チームは独自の要件に従ってアーティファクトを組織し、管理できるようになります。カスタムレジストリの作成方法について詳しくは、カスタムレジストリの作成 を参照してください。
カスタムアクセス制御
各レジストリは詳細なアクセス制御をサポートし、メンバーには管理者、メンバー、ビューアーなどの特定の役割を割り当てることができます。管理者はレジストリの設定を管理し、メンバーの追加や削除、役割の設定、公開範囲の設定を行います。これにより、チームはレジストリ内のアーティファクトを誰が表示、管理、操作できるかを制御する必要があります。
用語の更新
登録されたモデルは現在、コレクション と呼ばれています。
変更点の概要
旧 W&B モデルレジストリ
W&B レジストリ
アーティファクトの公開範囲
チームのメンバーのみがアーティファクトを閲覧またはアクセス可能
組織内のメンバーが、適切な権限を持ってレジストリにリンクされたアーティファクトを閲覧またはアクセス可能
カスタムアクセス制御
利用不可
利用可能
カスタムレジストリ
利用不可
利用可能
用語の更新
モデルバージョンへのポインタ (リンク) のセットは 登録されたモデル と呼ばれる。
アーティファクトバージョンへのポインタ (リンク) のセットは コレクション と呼ばれる。
wandb.init.link_model
モデルレジストリ固有のAPI
現在は旧モデルレジストリでのみ互換性あり
移行の準備
W&B は登録されたモデル(現在はコレクションと呼ばれる)と関連するアーティファクトバージョンを旧モデルレジストリから W&B レジストリに移行します。このプロセスは自動的に行われ、ユーザーからのアクションは不要です。
チーム公開範囲から組織公開範囲へ
移行後、モデルレジストリは組織レベルの公開範囲を持つようになります。レジストリへのアクセスを制限するには、役割の割り当て を行うことができます。これにより、特定のメンバーのみが特定のレジストリにアクセスできるようにするのに役立ちます。
この移行は、旧 W&B モデルレジストリでの現在のチームレベルの登録モデル(まもなくコレクションと呼ばれる)の既存の許可境界を維持します。旧モデルレジストリで定義された権限は新しいレジストリでも維持されます。つまり、特定のチームメンバーに制限されているコレクションは、移行中および移行後も引き続き保護されます。
アーティファクトのパスの連続性
現在、アクションは不要です。
移行中
W&B が移行プロセスを開始します。移行は W&B サービスへの影響を最小限に抑える時間枠で行われます。移行が開始されると、旧モデルレジストリは読み取り専用の状態に移行し、参照用にアクセス可能なままになります。
移行後
移行後、コレクション、アーティファクトバージョン、および関連する属性は、新しい W&B レジストリ内で完全にアクセス可能になります。現在のワークフローを維持することに重点を置いており、変更に対応するためのサポートも提供されています。
新しいレジストリの使用
ユーザーは W&B レジストリで利用可能な新機能と機能を探索することが奨励されています。レジストリは、現在依存している機能をサポートするだけでなく、カスタムレジストリ、改善された公開範囲、および柔軟なアクセス制御などの強化機能も導入しています。
W&B レジストリを早期に試してみたい方や、旧 W&B モデルレジストリではなくレジストリで始めたい新しいユーザーの方にはサポートが提供されています。サポート@wandb.comまたはセールス MLE に連絡して、この機能を有効にします。なお、早期移行は BETA バージョンへの移行となります。W&B レジストリの BETA バージョンには、旧モデルレジストリのすべての機能または機能が含まれていない場合があります。
詳細と W&B レジストリの完全な機能範囲について学ぶには、W&B レジストリガイド を訪れてください。
FAQ
なぜ W&B はモデルレジストリから W&B レジストリへの資産を移行するのですか?
W&B は、新しいレジストリでより高度な機能と能力を提供するために、そのプラットフォームを進化させています。この移行は、モデル、データセット、およびその他のアーティファクトを管理するための、より統合された強力なツールセットを提供するための一歩です。
移行前に何をすべきですか?
移行前にユーザーからのアクションは必要ありません。W&B が移行を処理し、ワークフローと参照を維持することを保証します。
モデルアーティファクトへのアクセスは失われますか?
いいえ、移行後もモデルアーティファクトへのアクセスは維持されます。旧モデルレジストリは読み取り専用の状態で維持され、すべての関連データは新しいレジストリに移行されます。
アーティファクトに関連するメタデータは維持されますか?
はい、アーティファクトの作成、リネージ、その他の属性に関連する重要なメタデータは移行中に維持されます。ユーザーは、移行後もすべての関連するメタデータにアクセスできるため、アーティファクトの完全性と追跡可能性が維持されます。
助けが必要な場合は誰に連絡すればよいですか?
質問や懸念がある場合のサポートは利用可能です。support@wandb.com に問い合わせてサポートを受けてください。
4.12 - モデルレジストリ
モデルレジストリでトレーニングからプロダクションまでのモデルライフサイクルを管理する
W&B は最終的に W&B Model Registry のサポートを停止します。ユーザーは代わりにモデルのアーティファクトバージョンをリンクして共有するために W&B Registry を使用することを推奨されます。W&B Registry は、旧 W&B Model Registry の機能を拡張します。W&B Registry について詳しくは、Registry docs をご覧ください。
W&B は近い将来、旧 Model Registry にリンクされた既存のモデルアーティファクトを新しい W&B Registry へ移行する予定です。移行プロセスに関する情報は、Migrating from legacy Model Registry をご覧ください。
W&B Model Registry は、チームのトレーニングされたモデルを収納し、MLプラクティショナーがプロダクションに向けた候補を公開し、下流のチームや関係者に消費させることができます。これは、ステージング/候補モデルを収容し、ステージングに関連するワークフローを管理するために使用されます。
W&B Model Registry を使用すると、以下が可能です:
仕組み
ステージングされたモデルを数ステップで追跡し、管理します。
モデルバージョンをログする :トレーニングスクリプトに数行のコードを追加して、モデルファイルをアーティファクトとして W&B に保存します。
パフォーマンスを比較する :ライブチャートをチェックして、トレーニングと検証からのメトリクスやサンプル予測を比較します。どのモデルバージョンが最もよくパフォーマンスしたかを特定します。
レジストリにリンクする :ベストなモデルバージョンを登録済みモデルにリンクしてブックマークします。これは Python でプログラム的に、または W&B UI でインタラクティブに行うことができます。
以下のコードスニペットは、モデルを Model Registry にログし、リンクする方法を示しています:
import wandb
import random
# 新しい W&B run を開始
run = wandb. init(project= "models_quickstart" )
# モデルメトリクスをシミュレーションしてログする
run. log({"acc" : random. random()})
# シミュレートされたモデルファイルを作成
with open("my_model.h5" , "w" ) as f:
f. write("Model: " + str(random. random()))
# モデルを Model Registry にログし、リンクする
run. link_model(path= "./my_model.h5" , registered_model_name= "MNIST" )
run. finish()
モデルの移行を CI/CD ワークフローに接続する :候補モデルをワークフローステージを通して移行し、下流のアクションをオートメーション化する ことを Webhook を使って行います。
開始方法
ユースケースに応じて、W&B Models を使い始めるための以下のリソースを探ります。
2 部構成のビデオシリーズを確認:
モデルのログと登録
モデルの消費と下流プロセスのオートメーション化 in the Model Registry.
モデルウォークスルー を読み、W&B Python SDK コマンドを使用してデータセットアーティファクトを作成、追跡、および使用する手順を確認します。
以下について学ぶ:
Model Registry があなたの ML ワークフローにどのようにフィットし、モデル管理のためにそれを使用することの利点についての この レポートを確認します。
W&B の Enterprise Model Management コースを受講し、以下を学びます:
W&B Model Registry を使って、モデルを管理、バージョン化し、リネージを追跡し、様々なライフサイクルステージを通じてモデルを推進する方法。
Webhook を使ってモデル管理ワークフローをオートメーション化する方法。
モデル評価、監視、デプロイメントのために Model Registry が外部 ML システムやツールとどのように統合されているかを確認する。
4.12.1 - Tutorial: W&B を使ったモデル管理
W&B を活用したモデル管理の使い方を学ぶ
W&B にモデルをログする方法を示す次のウォークスルーに従ってください。このウォークスルーの終わりまでに次のことができるようになります:
MNIST データセットと Keras フレームワークを使用してモデルを作成およびトレーニングします。
トレーニングしたモデルを W&B プロジェクトにログします。
作成したモデルの依存関係として使用したデータセットをマークします。
モデルを W&B Registry にリンクします。
レジストリにリンクしたモデルのパフォーマンスを評価します。
モデルバージョンをプロダクション用に準備完了としてマークします。
このガイドで提示された順にコードスニペットをコピーしてください。
モデルレジストリに固有でないコードは折りたたみ可能なセルに隠されています。
セットアップ
始める前に、このウォークスルーに必要な Python の依存関係をインポートします:
import wandb
import numpy as np
from tensorflow import keras
from tensorflow.keras import layers
from wandb.integration.keras import WandbMetricsLogger
from sklearn.model_selection import train_test_split
entity
変数に W&B エンティティを指定します:
データセット アーティファクトを作成する
まず、データセットを作成します。次のコードスニペットは、MNIST データセットをダウンロードする関数を作成します:
def generate_raw_data (train_size= 6000 ):
eval_size = int(train_size / 6 )
(x_train, y_train), (x_eval, y_eval) = keras. datasets. mnist. load_data()
x_train = x_train. astype("float32" ) / 255
x_eval = x_eval. astype("float32" ) / 255
x_train = np. expand_dims(x_train, - 1 )
x_eval = np. expand_dims(x_eval, - 1 )
print("Generated {} rows of training data." . format(train_size))
print("Generated {} rows of eval data." . format(eval_size))
return (x_train[:train_size], y_train[:train_size]), (
x_eval[:eval_size],
y_eval[:eval_size],
)
# データセットを作成
(x_train, y_train), (x_eval, y_eval) = generate_raw_data()
次に、データセットを W&B にアップロードします。これを行うには、artifact オブジェクトを作成し、そのアーティファクトにデータセットを追加します。
project = "model-registry-dev"
model_use_case_id = "mnist"
job_type = "build_dataset"
# W&B run を初期化
run = wandb. init(entity= entity, project= project, job_type= job_type)
# トレーニングデータ用に W&B Table を作成
train_table = wandb. Table(data= [], columns= [])
train_table. add_column("x_train" , x_train)
train_table. add_column("y_train" , y_train)
train_table. add_computed_columns(lambda ndx, row: {"img" : wandb. Image(row["x_train" ])})
# 評価データ用に W&B Table を作成
eval_table = wandb. Table(data= [], columns= [])
eval_table. add_column("x_eval" , x_eval)
eval_table. add_column("y_eval" , y_eval)
eval_table. add_computed_columns(lambda ndx, row: {"img" : wandb. Image(row["x_eval" ])})
# アーティファクトオブジェクトを作成
artifact_name = " {} _dataset" . format(model_use_case_id)
artifact = wandb. Artifact(name= artifact_name, type= "dataset" )
# wandb.WBValue オブジェクトをアーティファクトに追加
artifact. add(train_table, "train_table" )
artifact. add(eval_table, "eval_table" )
# アーティファクトに加えられた変更を永続化
artifact. save()
# W&B にこの run が完了したことを知らせます
run. finish()
アーティファクトにファイル(データセットなど)を保存することは、モデルの依存関係を追跡できるため、モデルをログに記録するという文脈で便利です。
モデルのトレーニング
前のステップで作成したアーティファクトデータセットを使用してモデルをトレーニングします。
データセットアーティファクトを run の入力として宣言
前のステップで作成したデータセットアーティファクトを W&B run の入力として宣言します。これにより、特定のモデルをトレーニングするために使用されたデータセット(およびデータセットのバージョン)を追跡できるため、モデルをログに記録するという文脈で特に便利です。W&B は収集された情報を使用して、lineage map を作成します。
use_artifact
API を使用して、データセットアーティファクトを run の入力として宣言し、アーティファクト自体を取得します。
job_type = "train_model"
config = {
"optimizer" : "adam" ,
"batch_size" : 128 ,
"epochs" : 5 ,
"validation_split" : 0.1 ,
}
# W&B run を初期化
run = wandb. init(project= project, job_type= job_type, config= config)
# データセットアーティファクトを取得
version = "latest"
name = " {} : {} " . format(" {} _dataset" . format(model_use_case_id), version)
artifact = run. use_artifact(artifact_or_name= name)
# データフレームから特定のコンテンツを取得
train_table = artifact. get("train_table" )
x_train = train_table. get_column("x_train" , convert_to= "numpy" )
y_train = train_table. get_column("y_train" , convert_to= "numpy" )
モデルの入力と出力を追跡する方法の詳細については、Create model lineage mapを参照してください。
モデルの定義とトレーニング
このウォークスルーでは、Keras を使用して MNIST データセットから画像を分類するための 2D 畳み込みニューラルネットワーク (CNN) を定義します。
MNIST データに対する CNN のトレーニング
# 設定辞書から値を取得して変数に格納(アクセスしやすくするため)
num_classes = 10
input_shape = (28 , 28 , 1 )
loss = "categorical_crossentropy"
optimizer = run. config["optimizer" ]
metrics = ["accuracy" ]
batch_size = run. config["batch_size" ]
epochs = run. config["epochs" ]
validation_split = run. config["validation_split" ]
# モデルアーキテクチャを作成
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)
# トレーニングデータのラベルを生成
y_train = keras. utils. to_categorical(y_train, num_classes)
# トレーニングセットとテストセットを作成
x_t, x_v, y_t, y_v = train_test_split(x_train, y_train, test_size= 0.33 )
次に、モデルをトレーニングします:
# モデルをトレーニング
model. fit(
x= x_t,
y= y_t,
batch_size= batch_size,
epochs= epochs,
validation_data= (x_v, y_v),
callbacks= [WandbCallback(log_weights= True , log_evaluation= True )],
)
最後に、モデルをローカルマシンに保存します:
# モデルをローカルに保存
path = "model.h5"
model. save(path)
モデルを Model Registry にログし、リンクする
link_model
API を使用して、一つまたは複数のファイルを W&B run にログし、それを W&B Model Registry にリンクします。
path = "./model.h5"
registered_model_name = "MNIST-dev"
run. link_model(path= path, registered_model_name= registered_model_name)
run. finish()
指定した名前の registered-model-name
がまだ存在しない場合、W&B は登録されたモデルを作成します。
オプションのパラメータに関する詳細は、API リファレンスガイドの link_model
を参照してください。
モデルのパフォーマンスを評価する
複数のモデルのパフォーマンスを評価するのは一般的な手法です。
まず、前のステップで W&B に保存された評価データセットアーティファクトを取得します。
job_type = "evaluate_model"
# 初期化
run = wandb. init(project= project, entity= entity, job_type= job_type)
model_use_case_id = "mnist"
version = "latest"
# データセットアーティファクトを取得し、それを依存関係としてマーク
artifact = run. use_artifact(
" {} : {} " . format(" {} _dataset" . format(model_use_case_id), version)
)
# 必要なデータフレームを取得
eval_table = artifact. get("eval_table" )
x_eval = eval_table. get_column("x_eval" , convert_to= "numpy" )
y_eval = eval_table. get_column("y_eval" , convert_to= "numpy" )
評価したい W&B からのモデルバージョン をダウンロードします。use_model
API を使用してモデルにアクセスし、ダウンロードします。
alias = "latest" # エイリアス
name = "mnist_model" # モデルアーティファクトの名前
# モデルにアクセスしダウンロードします。ダウンロードされたアーティファクトへのパスを返します
downloaded_model_path = run. use_model(name= f " { name} : { alias} " )
Keras モデルをロードし、損失を計算します:
model = keras. models. load_model(downloaded_model_path)
y_eval = keras. utils. to_categorical(y_eval, 10 )
(loss, _) = model. evaluate(x_eval, y_eval)
score = (loss, _)
最後に、損失のメトリクスを W&B run にログします:
# メトリクス、画像、テーブル、または評価に役立つデータをログします。
run. log(data= {"loss" : (loss, _)})
モデルバージョンを昇格する
モデルエイリアス を使用して、機械学習ワークフローの次のステージに準備が整ったモデルバージョンをマークします。各登録済みモデルは 1 つまたは複数のモデルエイリアスを持つことができます。モデルエイリアスは、1 度に 1 つのモデルバージョンにのみ所属できます。
例えば、モデルのパフォーマンスを評価した後、そのモデルがプロダクションの準備が整ったと確信したとします。モデルバージョンを昇格させるために、特定のモデルバージョンに production
エイリアスを追加します。
production
エイリアスは、モデルをプロダクション対応としてマークするために使用される最も一般的なエイリアスの 1 つです。
W&B アプリ UI を使用してインタラクティブに、または Python SDK を使用してプログラムでモデルバージョンにエイリアスを追加できます。次のステップは、W&B Model Registry App を使用してエイリアスを追加する方法を示しています:
https://wandb.ai/registry/model の Model Registry App に移動します。
登録されているモデルの名前の横にある View details をクリックします。
Versions セクション内で、プロモーションしたいモデルバージョンの名前の横にある View ボタンをクリックします。
Aliases フィールドの隣にあるプラスアイコン (+ ) をクリックします。
表示されるフィールドに production
と入力します。
キーボードの Enter キーを押します。
4.12.2 - モデルレジストリの用語と概念
モデルレジストリの用語と概念
以下の用語は、W&B モデルレジストリの主要な構成要素を説明します: model version 、model artifact 、および registered model 。
Model version
モデルバージョンは、単一のモデルチェックポイントを表します。モデルバージョンは、実験内のモデルとそのファイルのある時点でのスナップショットです。
モデルバージョンは、訓練されたモデルを記述するデータとメタデータの不変なディレクトリーです。W&B は、後でモデルのアーキテクチャーと学習されたパラメータを保存(および復元)できるように、ファイルをモデルバージョンに追加することを推奨しています。
モデルバージョンは、1つだけの model artifact に属します。モデルバージョンは、ゼロまたは複数の registered models に属する場合があります。モデルバージョンは、model artifact にログされる順序で格納されます。同じ model artifact にログされたモデルの内容が以前のモデルバージョンと異なる場合、W&B は自動的に新しいモデルバージョンを作成します。
モデリングライブラリによって提供されるシリアライズプロセスから生成されたファイルをモデルバージョン内に保存します(例:PyTorch と Keras )。
Model alias
モデルエイリアスは、登録されたモデル内でモデルバージョンを一意に識別または参照するための可変文字列です。登録されたモデルのバージョンにだけエイリアスを割り当てることができます。これは、エイリアスがプログラム的に使用されたとき、一意のバージョンを指す必要があるためです。エイリアスは、モデルの状態(チャンピオン、候補、プロダクション)をキャプチャするためにも使用されます。
“best”、“latest”、“production”、“staging” のようなエイリアスを使用して、特定の目的を持つモデルバージョンにマークを付けることは一般的です。
たとえば、モデルを作成し、それに “best” エイリアスを割り当てたとします。その特定のモデルを run.use_model
で参照できます。
import wandb
run = wandb. init()
name = f " { entity/ project/ model_artifact_name} : { alias} "
run. use_model(name= name)
モデルタグは、1つ以上の登録されたモデルに属するキーワードまたはラベルです。
モデルタグを使用して、登録されたモデルをカテゴリに整理し、モデルレジストリの検索バーでそれらのカテゴリを検索します。モデルタグは Registered Model Card の上部に表示されます。ML タスク、所有チーム、または優先順位に基づいて登録モデルをグループ化するために使用することもできます。同じモデルタグを複数の登録されたモデルに追加してグループ化を可能にします。
登録されたモデルに適用されるラベルで、グループ化と発見性のために使用されるモデルタグは、
model aliases とは異なります。モデルエイリアスは、一意の識別子またはニックネームで、プログラム的にモデルバージョンを取得するために使用します。モデルレジストリでタスクを整理するためのタグの使用について詳しくは、
Organize models を参照してください。
Model artifact
モデルアーティファクトは、ログされた model versions のコレクションです。モデルバージョンは、model artifact にログされた順序で保存されます。
モデルアーティファクトには1つ以上のモデルバージョンが含まれる場合があります。モデルバージョンがログされていない場合、モデルアーティファクトは空です。
たとえば、モデルアーティファクトを作成するとします。モデルのトレーニング中に、定期的にチェックポイントでモデルを保存します。各チェックポイントはその独自の model version に対応しています。トレーニングスクリプトの開始時に作成した同じモデルアーティファクトに、モデルトレーニング中とチェックポイント保存中に作成されたすべてのモデルバージョンが保存されます。
以下の画像は、3つのモデルバージョン v0、v1、v2 を含むモデルアーティファクトを示しています。
モデルアーティファクトの例はこちら をご覧ください。
Registered model
登録モデルは、モデルバージョンへのポインタ(リンク)のコレクションです。登録モデルを、同じ ML タスク用の候補モデルの「ブックマーク」フォルダーとして考えることができます。登録モデルの各「ブックマーク」は、model artifact に属する model version へのポインタです。model tags を使用して登録モデルをグループ化することができます。
登録モデルは、単一のモデリングユースケースやタスクに対する候補モデルを表すことがよくあります。たとえば、使用するモデルに基づいて異なる画像分類タスクの登録モデルを作成するかもしれません:ImageClassifier-ResNet50
、ImageClassifier-VGG16
、DogBreedClassifier-MobileNetV2
など。モデルバージョンは、登録モデルにリンクされた順にバージョン番号が割り当てられます。
登録モデルの例はこちら をご覧ください。
4.12.3 - モデルを追跡する
W&B Python SDK を使用して、モデル、モデルの依存関係、およびそのモデルに関連するその他の情報を追跡します。
モデル、モデルの依存関係、およびそのモデルに関連するその他の情報を W&B Python SDK を使用して追跡します。
内部的には、W&B は モデルアーティファクト のリネージを作成し、W&B アプリ UI で表示したり、W&B Python SDK を使用してプログラム的に確認することができます。詳細は モデルリネージマップの作成 を参照してください。
モデルをログする方法
run.log_model
API を使用してモデルをログします。モデルファイルが保存されているパスを path
パラメータに提供してください。このパスはローカルファイル、ディレクトリー、または s3://bucket/path
のような外部バケットへのリファレンス URI のいずれかにすることができます。
オプションでモデルアーティファクトの名前を name
パラメータに指定できます。name
が指定されていない場合、W&B は入力パスのベース名を実行 ID を前に付けたものとして使用します。
以下のコードスニペットをコピーして貼り付けてください。<>
で囲まれた値をあなた自身のものに置き換えてください。
import wandb
# W&B run を初期化
run = wandb. init(project= "<project>" , entity= "<entity>" )
# モデルをログする
run. log_model(path= "<path-to-model>" , name= "<name>" )
例: Keras モデルを W&B にログする
以下のコード例は、畳み込みニューラルネットワーク (CNN) モデルを W&B にログする方法を示します。
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-project" , 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)
# モデルをログする
run. log_model(path= full_path, name= "MNIST" )
# W&B に対して明示的に run の終了を通知します。
run. finish()
4.12.4 - 登録済みモデルを作成する
モデル作成のタスクのために、すべての候補モデルを保持する Registered Model を作成します。
registered model を作成し、モデリングタスクのすべての候補モデルを保持します。モデルレジストリ内でインタラクティブに、または Python SDK を使用してプログラム的に registered model を作成できます。
プログラムで registered model を作成する
W&B Python SDK を使用してモデルを登録します。registered model が存在しない場合、W&B は自動的に registered model を作成します。
<>
で囲まれた他の値をあなた自身のもので置き換えてください:
import wandb
run = wandb. init(entity= "<entity>" , project= "<project>" )
run. link_model(path= "<path-to-model>" , registered_model_name= "<registered-model-name>" )
run. finish()
registered_model_name
に指定した名前は Model Registry App に表示される名前です。
インタラクティブに registered model を作成する
Model Registry App でインタラクティブに registered model を作成します。
Model Registry App に移動します: https://wandb.ai/registry/model 。
Model Registry ページの右上にある New registered model ボタンをクリックします。
表示されたパネルから、registered model が属するエンティティを Owning Entity ドロップダウンから選択します。
Name フィールドにモデルの名前を入力します。
Type ドロップダウンから、registered model とリンクするアーティファクトのタイプを選択します。
(オプション) Description フィールドにモデルについての説明を追加します。
(オプション) Tags フィールドに1つ以上のタグを追加します。
Register model をクリックします。
モデルをモデルレジストリに手動でリンクすることは、一度だけのモデルに便利です。しかし、プログラムでモデルバージョンをモデルレジストリにリンクする こともよくあります。
例えば、毎晩のジョブがあるとします。毎晩作成されるモデルを手動でリンクするのは面倒です。代わりに、モデルを評価し、そのモデルがパフォーマンスを改善した場合にそのモデルを W&B Python SDK を使用してモデルレジストリにリンクするスクリプトを作成することができます。
4.12.5 - モデルバージョンをリンクする
モデル バージョンを登録されたモデルに、W&B アプリまたは Python SDK を使ってプログラム的にリンクします。
モデルのバージョンを W&B App または Python SDK を使用してプログラムで登録済みのモデルにリンクします。
プログラムでモデルをリンクする
link_model
メソッドを使用して、プログラムでモデルファイルを W&B run にログし、それを W&B モデルレジストリ にリンクします。
<>
で囲まれた値を自分のものに置き換えることを忘れないでください:
import wandb
run = wandb. init(entity= "<entity>" , project= "<project>" )
run. link_model(path= "<path-to-model>" , registered_model_name= "<registered-model-name>" )
run. finish()
指定した registered-model-name
パラメータの名前が既に存在しない場合、W&B は登録済みのモデルを自動的に作成します。
例えば、既に “Fine-Tuned-Review-Autocompletion” という名前の登録済みモデル(registered-model-name="Fine-Tuned-Review-Autocompletion"
)がモデルレジストリにあり、それにいくつかのモデルバージョンがリンクされているとします: v0
、v1
、v2
。新しいモデルをプログラムでリンクし、同じ登録済みモデル名を使用した場合(registered-model-name="Fine-Tuned-Review-Autocompletion"
)、W&B はこのモデルを既存の登録済みモデルにリンクし、モデルバージョン v3
を割り当てます。この名前の登録済みモデルが存在しない場合、新しい登録済みモデルが作成され、モデルバージョン v0
を持ちます。
“Fine-Tuned-Review-Autocompletion” 登録済みモデルの一例をここでご覧ください .
インタラクティブにモデルをリンクする
インタラクティブにモデルレジストリまたはアーティファクトブラウザでモデルをリンクします。
Model Registry
Artifact browser
https://wandb.ai/registry/model のモデルレジストリアプリに移動します。
新しいモデルをリンクしたい登録済みモデルの名前の横にマウスをホバーします。
View details の横のミートボールメニューアイコン(三つの水平な点)を選択します。
ドロップダウンメニューから Link new version を選択します。
Project ドロップダウンからモデルを含むプロジェクトの名前を選択します。
Model Artifact ドロップダウンからモデルアーティファクトの名前を選択します。
Version ドロップダウンから登録済みモデルにリンクしたいモデルバージョンを選択します。
W&B App でプロジェクトのアーティファクトブラウザに移動します: https://wandb.ai/<entity>/<project>/artifacts
左側のサイドバーで Artifacts アイコンを選択します。
リストにあなたのモデルを表示したいプロジェクトを表示します。
モデルのバージョンをクリックして、モデルレジストリにリンクします。
画面右側に表示されるモーダルから、Select a register model メニュードロップダウンから登録済みモデルを選択します。
Next step をクリックします。
(オプション)Aliases ドロップダウンからエイリアスを選択します。
Link to registry をクリックします。
リンクされたモデルのソースを表示する
リンクされたモデルのソースを表示する方法は2つあります: モデルがログされているプロジェクト内のアーティファクトブラウザと W&B モデルレジストリです。
モデルレジストリ内の特定のモデルバージョンを、(そのモデルがログされているプロジェクト内に位置する)ソースモデルアーティファクトと接続するポインタがあります。ソースモデルアーティファクトにもモデルレジストリへのポインタがあります。
Model Registry
Artifact browser
https://wandb.ai/registry/model でモデルレジストリに移動します。
登録済みモデルの名前の横で View details を選択します。
Versions セクション内で調査したいモデルバージョンの横にある View を選択します。
右パネル内の Version タブをクリックします。
Version overview セクション内に Source Version フィールドを含む行があります。Source Version フィールドはモデルの名前とそのバージョンを示しています。
例えば、次の画像は v0
モデルバージョンである mnist_model
(Source version フィールド mnist_model:v0
を参照)を登録済みモデル MNIST-dev
にリンクしていることを示しています。
W&B App でプロジェクトのアーティファクトブラウザに移動します: https://wandb.ai/<entity>/<project>/artifacts
左側のサイドバーで Artifacts アイコンを選択します。
アーティファクトパネルから model ドロップダウンメニューを展開します。
モデルレジストリにリンクされたモデルの名前とバージョンを選択します。
右パネル内の Version タブをクリックします。
Version overview セクション内に Linked To フィールドを含む行があります。Linked To フィールドは、登録済みモデルの名前とそれに属するバージョンを示しています(registered-model-name:version
)。
例えば、次の画像では、MNIST-dev
という登録済みモデルがあります(Linked To フィールドを参照)。バージョン v0
のモデルバージョン mnist_model
(mnist_model:v0
)が MNIST-dev
登録済みモデルを指しています。
4.12.6 - モデルを整理する
モデルタグを使用して登録済みのモデルをカテゴリーに整理し、それらのカテゴリーを検索します。
https://wandb.ai/registry/model で W&B モデルレジストリアプリに移動します。
モデルタグを追加したい登録済みモデルの名前の横にある View details を選択します。
Model card セクションまでスクロールします。
Tags フィールドの横にあるプラスボタン (+ ) をクリックします。
タグの名前を入力するか、既存のモデルタグを検索します。
例えば、次の画像は FineTuned-Review-Autocompletion という登録済みモデルに複数のモデルタグが追加されている様子を示しています。
4.12.7 - モデルリネージ マップを作成する
このページでは、従来の W&B Model Registry でのリネージグラフの作成について説明します。W&B Registry でのリネージグラフについて学ぶには、リネージマップの作成と表示 を参照してください。
モデルアーティファクトを W&B にログする際の便利な機能の一つにリネージグラフがあります。リネージグラフは、run によってログされたアーティファクトと特定の run で使用されたアーティファクトを表示します。
つまり、モデルアーティファクトをログする際には、少なくともモデルアーティファクトを使用または生成した W&B run を表示するためのアクセスが可能です。依存関係を追跡する 場合、モデルアーティファクトで使用された入力も見ることができます。
例えば、以下の画像では、ML 実験全体で作成および使用されたアーティファクトが示されています。
画像は左から右に向かって次のように示しています。
jumping-monkey-1
W&B run によって mnist_dataset:v0
のデータセットアーティファクトが作成されました。
vague-morning-5
W&B run は mnist_dataset:v0
データセットアーティファクトを使用してモデルをトレーニングしました。この W&B run の出力は mnist_model:v0
というモデルアーティファクトでした。
serene-haze-6
という run は mnist_model:v0
のモデルアーティファクトを使用してモデルを評価しました。
アーティファクトの依存関係を追跡
データセットアーティファクトを W&B run の入力として宣言することで、use_artifact
API を使用して依存関係を追跡できます。
以下のコードスニペットでは、use_artifact
API の使用方法を示します。
# Run を初期化
run = wandb. init(project= project, entity= entity)
# アーティファクトを取得し、依存関係としてマーク
artifact = run. use_artifact(artifact_or_name= "name" , aliases= "<alias>" )
アーティファクトを取得した後、そのアーティファクトを使用して(例えば)、モデルのパフォーマンスを評価できます。
例: モデルを訓練し、データセットをモデルの入力として追跡
job_type = "train_model"
config = {
"optimizer" : "adam" ,
"batch_size" : 128 ,
"epochs" : 5 ,
"validation_split" : 0.1 ,
}
run = wandb. init(project= project, job_type= job_type, config= config)
version = "latest"
name = " {} : {} " . format(" {} _dataset" . format(model_use_case_id), version)
artifact = run. use_artifact(name)
train_table = artifact. get("train_table" )
x_train = train_table. get_column("x_train" , convert_to= "numpy" )
y_train = train_table. get_column("y_train" , convert_to= "numpy" )
# 設定辞書から変数に値を保存して簡単にアクセス
num_classes = 10
input_shape = (28 , 28 , 1 )
loss = "categorical_crossentropy"
optimizer = run. config["optimizer" ]
metrics = ["accuracy" ]
batch_size = run. config["batch_size" ]
epochs = run. config["epochs" ]
validation_split = run. config["validation_split" ]
# モデルアーキテクチャーの作成
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)
# トレーニングデータのラベルを生成
y_train = keras. utils. to_categorical(y_train, num_classes)
# トレーニングセットとテストセットの作成
x_t, x_v, y_t, y_v = train_test_split(x_train, y_train, test_size= 0.33 )
# モデルのトレーニング
model. fit(
x= x_t,
y= y_t,
batch_size= batch_size,
epochs= epochs,
validation_data= (x_v, y_v),
callbacks= [WandbCallback(log_weights= True , log_evaluation= True )],
)
# モデルをローカルに保存
path = "model.h5"
model. save(path)
path = "./model.h5"
registered_model_name = "MNIST-dev"
name = "mnist_model"
run. link_model(path= path, registered_model_name= registered_model_name, name= name)
run. finish()
4.12.8 - モデルバージョンをダウンロードする
W&B Python SDK で モデル をダウンロードする方法
W&B Python SDK を使用して、Model Registry にリンクしたモデルアーティファクトをダウンロードします。
モデルを再構築し、逆シリアル化して作業可能な形式に変換するための Python 関数や API コールの提供はユーザーの責任です。
W&B はモデルカードを使って、モデルをメモリにロードする方法の情報を文書化することを推奨しています。詳細は、Document machine learning models ページをご覧ください。
<>
の中の値を自身のものに置き換えてください:
import wandb
# Run を初期化
run = wandb. init(project= "<project>" , entity= "<entity>" )
# モデルへのアクセスとダウンロード。ダウンロードしたアーティファクトへのパスを返します
downloaded_model_path = run. use_model(name= "<your-model-name>" )
モデルバージョンを以下のいずれかの形式で参照します:
latest
- 最も最近リンクされたモデルバージョンを指定するために latest
エイリアスを使用します。
v#
- 特定のバージョンを取得するために v0
、v1
、v2
などを使用します。
alias
- モデルバージョンに対してチームが設定したカスタムエイリアスを指定します。
API リファレンスガイドの use_model
を参照して、使用可能なパラメータと返り値の型についての詳細を確認してください。
例:ログされたモデルをダウンロードして使用する
例えば、以下のコードスニペットでは、ユーザーが 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()
# モデルへのアクセスとダウンロード。ダウンロードしたアーティファクトへのパスを返します
downloaded_model_path = run. use_model(name= f " { entity/ project/ model_artifact_name} : { alias} " )
2024年のW&B Model Registryの廃止予定について 以下のタブでは、近日廃止予定の Model Registry を使用してモデルアーティファクトを利用する方法を示しています。
W&B Registry を使用して、モデルアーティファクトを追跡、整理、利用します。詳細は Registry docs を参照してください。
<>
の中の値を自身のものに置き換えてください:
import wandb
# Run を初期化
run = wandb. init(project= "<project>" , entity= "<entity>" )
# モデルへのアクセスとダウンロード。ダウンロードしたアーティファクトへのパスを返します
downloaded_model_path = run. use_model(name= "<your-model-name>" )
モデルバージョンを以下のいずれかの形式で参照します:
latest
- 最も最近リンクされたモデルバージョンを指定するために latest
エイリアスを使用します。
v#
- 特定のバージョンを取得するために v0
、v1
、v2
などを使用します。
alias
- モデルバージョンに対してチームが設定したカスタムエイリアスを指定します。
API リファレンスガイドの use_model
を参照して、使用可能なパラメータと返り値の型についての詳細を確認してください。
https://wandb.ai/registry/model の Model Registry App に移動します。
ダウンロードしたいモデルを含む登録済みモデル名の隣にある 詳細を見る を選択します。
バージョンセクション内で、ダウンロードしたいモデルバージョンの隣にある表示ボタンを選択します。
ファイル タブを選択します。
ダウンロードしたいモデルファイルの隣にあるダウンロードボタンをクリックします。
4.12.9 - 機械学習モデルを文書化する
モデル カードに説明を追加して、モデルをドキュメント化する
モデルレジストリに登録されたモデルのモデルカードに説明を追加して、機械学習モデルの側面を文書化します。文書化する価値があるトピックには以下のものがあります:
Summary : モデルの概要。モデルの目的。モデルが使用する機械学習フレームワークなど。
Training data : 使用したトレーニングデータについて、トレーニングデータセットで行ったプロセッシング、そのデータがどこに保存されているかなどを説明します。
Architecture : モデルのアーキテクチャー、レイヤー、および特定の設計選択に関する情報。
Deserialize the model : チームの誰かがモデルをメモリにロードする方法についての情報を提供します。
Task : 機械学習モデルが実行するよう設計された特定のタスクや問題のタイプ。モデルの意図された能力の分類です。
License : 機械学習モデルの使用に関連する法的条件と許可。モデルユーザーが法的な枠組みのもとでモデルを利用できることを理解するのに役立ちます。
References : 関連する研究論文、データセット、または外部リソースへの引用や参照。
Deployment : モデルがどのように、そしてどこにデプロイメントされているのか、他の企業システムにどのように統合されているかに関するガイダンスを含む詳細。
モデルカードに説明を追加する
https://wandb.ai/registry/model で W&B モデルレジストリ アプリに移動します。
モデルカードを作成したい登録済みモデル名の横にある View details を選択します。
Model card セクションに移動します。
Description フィールド内に、機械学習モデルに関する情報を入力します。モデルカード内のテキストは Markdown マークアップ言語 でフォーマットします。
例えば、次の画像は Credit-card Default Prediction という登録済みモデルのモデルカードを示しています。
4.12.10 - アラートと通知を作成する
新しいモデルバージョンがモデルレジストリにリンクされた時に Slack 通知を受け取る。
新しいモデルバージョンがモデルレジストリにリンクされたときに、Slack 通知を受け取る。
https://wandb.ai/registry/model で W&B Model Registry アプリを開きます。
通知を受け取りたい登録済みモデルを選択します。
Connect Slack ボタンをクリックします。
OAuth ページに表示される Slack ワークスペースで W&B を有効にするための指示に従います。
チームのために Slack 通知を設定すると、通知を受け取る登録済みモデルを選択できます。
チームのために Slack 通知を設定した場合、Connect Slack ボタンの代わりに New model version linked to… と書かれたトグルが表示されます。
下のスクリーンショットは Slack 通知が設定された FMNIST 分類器の登録済みモデルを示しています。
新しいモデルバージョンが FMNIST 分類器の登録済みモデルにリンクされるたびに、接続された Slack チャンネルにメッセージが自動的に投稿されます。
4.12.11 - データ ガバナンスとアクセス コントロールを管理する
モデルレジストリのロールベース アクセス制御 (RBAC) を使用して、誰が保護されたエイリアスを更新できるかを制御します。
保護されたエイリアス を使用して、モデル開発パイプラインの主要なステージを表現します。モデルレジストリ管理者 のみが保護されたエイリアスを追加、変更、または削除できます。モデルレジストリ管理者は保護されたエイリアスを定義し、使用することができます。W&B は非管理ユーザーがモデルバージョンから保護されたエイリアスを追加または削除することをブロックします。
チーム管理者または現在のレジストリ管理者のみがレジストリ管理者のリストを管理できます。
例えば、staging
と production
を保護されたエイリアスとして設定したとします。チームのどのメンバーも新しいモデルバージョンを追加できますが、staging
または production
エイリアスを追加できるのは管理者のみです。
アクセス制御の設定
次の手順で、チームのモデルレジストリに対するアクセス制御を設定します。
W&B モデルレジストリアプリケーションに移動します:https://wandb.ai/registry/model
ページ右上のギアボタンを選択します。
Manage registry admins ボタンを選択します。
Members タブ内で、モデルバージョンから保護されたエイリアスを追加および削除するアクセス権を付与したいユーザーを選択します。
保護されたエイリアスの追加
W&B モデルレジストリアプリケーションに移動します:https://wandb.ai/registry/model
ページ右上のギアボタンを選択します。
Protected Aliases セクションまでスクロールダウンします。
プラスアイコン (+ ) をクリックして新しいエイリアスを追加します。
5 - オートメーション
This feature requires a Pro or Enterprise plan .
このページでは、W&B の オートメーション について説明します。ワークフローステップをトリガーする オートメーションの作成 は、W&B 内のイベント(例えば、アーティファクトバージョンが作成されたとき)に基づいて、自動モデルテストやデプロイメントなどを行います。
例えば、新しいバージョンが作成されたときに Slack のチャンネルに投稿したり、アーティファクトに production
エイリアスが追加されたときに自動テストをトリガーするためにウェブフックを実行することができます。
概要
オートメーションは、レジストリやプロジェクトで特定のイベント が発生したときに実行できます。
レジストリ 内のアーティファクトの場合、オートメーションを設定して次の場合に実行することができます:
新しいアーティファクトバージョンがコレクションにリンクされたとき。例えば、新しい候補モデルに対するテストおよび検証ワークフローをトリガーします。
アーティファクトバージョンにエイリアスが追加されたとき。例えば、モデルバージョンにエイリアスが追加されたときにデプロイメントワークフローをトリガーします。
プロジェクト 内のアーティファクトの場合、オートメーションを設定して次の場合に実行することができます:
新しいバージョンがアーティファクトに追加されたとき。例えば、指定されたコレクションにデータセットアーティファクトの新しいバージョンが追加されたときにトレーニングジョブを開始します。
アーティファクトバージョンにエイリアスが追加されたとき。例えば、データセットアーティファクトにエイリアス「redaction」が追加されたときに PII 編集ワークフローをトリガーします。
詳細については、オートメーションイベントとスコープ を参照してください。
オートメーションを作成するには 、以下を行います:
必要に応じて、自動化に必要なアクセス トークン、パスワード、またはセンシティブな設定の詳細などの機密文字列のために、シークレット を設定します。シークレットは Team Settings で定義されます。シークレットは、資格情報やトークンをプレーン テキストで公開することなく、Webhook のペイロードにハードコードすることなく、安全に外部サービスに渡すために Webhook オートメーションで最も一般的に使用されます。
Webhook または Slack 通知を設定して、Slack に投稿したり、ユーザーに代わって Webhook を実行するように W&B を承認します。単一のオートメーションアクション(Webhookまたは Slack 通知)は、複数のオートメーションで使用できます。これらのアクションは、Team Settings で定義されます。
プロジェクトまたはレジストリでオートメーションを作成します:
新しいアーティファクトバージョンが追加されたときなど、監視するイベント を定義します。
イベントが発生したときに取るアクション(Slack チャンネルへの投稿またはウェブフックの実行)を定義します。ウェブフックの場合、必要に応じてペイロードと共に送信するアクセス トークンやシークレットを使用するためのシークレットを指定します。
次のステップ
5.1 - 自動化の作成
This feature requires a Pro or Enterprise plan .
このページでは、W&B の オートメーション を作成および管理する概要を示します。詳細な手順については Slack オートメーションを作成する または Webhook オートメーションを作成する を参照してください。
オートメーションに関するチュートリアルをお探しですか?
要件
チーム管理者は、チームの Projects やオートメーションのコンポーネント(Webhook、秘密情報、Slack 接続など)のオートメーションを作成および管理できます。チーム設定 を参照してください。
レジストリオートメーションを作成するには、レジストリへのアクセスが必要です。レジストリアクセスの設定 を参照してください。
Slack オートメーションを作成するには、選択した Slack インスタンスとチャンネルに投稿する権限が必要です。
オートメーションを作成する
プロジェクトまたはレジストリの Automations タブからオートメーションを作成します。オートメーションを作成するには、以下のステップに従います:
必要に応じて、オートメーションに必要な各機密文字列(アクセストークン、パスワード、SSH キーなど)のために W&B の秘密情報を作成する 。秘密情報は Team Settings で定義されます。秘密情報は主に Webhook オートメーションで使用されます。
Webhook または Slack 通知を設定して、W&B が Slack に投稿するか、代わりに Webhook を実行できるようにします。単一のオートメーションアクション(Webhook または Slack 通知)は、複数のオートメーションによって使用できます。これらのアクションは Team Settings で定義されます。
プロジェクトまたはレジストリで、監視するイベントと実行するアクション(Slack への投稿や Webhook の実行など)を指定するオートメーションを作成します。Webhook オートメーションを作成するときは、送信するペイロードを設定します。
詳細については、以下を参照してください:
オートメーションを表示および管理する
プロジェクトまたはレジストリの Automations タブからオートメーションを表示および管理します。
オートメーションの詳細を表示するには、その名前をクリックします。
オートメーションを編集するには、そのアクションの …
メニューをクリックし、Edit automation をクリックします。
オートメーションを削除するには、そのアクションの …
メニューをクリックし、Delete automation をクリックします。
次のステップ
5.1.1 - Slack 自動化の作成
This feature requires a Pro or Enterprise plan .
このページでは、Slack オートメーション を作成する方法を示します。ウェブフックオートメーションを作成するには、ウェブフックオートメーションの作成 を参照してください。
高レベルでは、Slackオートメーションを作成するには、以下の手順を行います:
Slackインテグレーションを追加 し、W&BがSlackインスタンスとチャンネルに投稿できるように認証します。
Slackオートメーションを作成 し、監視するイベント と投稿するチャンネルを定義します。
Slackに接続
チーム管理者は、チームにSlack宛先を追加できます。
W&Bにログインし、チーム設定ページに移動します。
Slackチャンネルインテグレーション セクションで、Slackを接続 をクリックして新しいSlackインスタンスを追加します。既存のSlackインスタンスにチャンネルを追加するには、新しいインテグレーション をクリックします。
必要に応じて、ブラウザでSlackにサインインします。プロンプトが表示されたら、選択したSlackチャンネルにW&Bからの投稿を許可してください。ページを読み、チャンネルを検索 をクリックしてチャンネル名を入力し始めます。リストからチャンネルを選択し、許可 をクリックします。
Slackで、選択したチャンネルに移動します。[あなたのSlackハンドル]がこのチャンネルにインテグレーションを追加しました: Weights & Biases
という投稿が表示されれば、インテグレーションが正しく設定されています。
これで、設定したSlackチャンネルに通知するオートメーションを作成 できます。
Slack接続の表示と管理
チーム管理者は、チームのSlackインスタンスとチャンネルを表示および管理できます。
W&Bにログインし、チーム設定 に移動します。
Slackチャンネルインテグレーション セクションで各Slack宛先を表示します。
宛先を削除するには、そのゴミ箱アイコンをクリックします。
オートメーションを作成する
W&BチームをSlackに接続した後 、Registry またはProject を選択し、Slackチャンネルに通知するオートメーションを作成する手順に従います。
Registry管理者は、そのregistry内でオートメーションを作成できます。
W&Bにログインします。
registryの名前をクリックして詳細を表示します。
registryに関連付けられたオートメーションを作成するには、Automations タブをクリックし、Create automation をクリックします。registryに関連付けられたオートメーションは、自動的にそのすべてのコレクションに適用されます(将来作成されるものも含む)。
registry内の特定のコレクションにのみ関連付けられたオートメーションを作成するには、コレクションのアクション...
メニューをクリックし、Create automation をクリックします。あるいは、コレクションを閲覧しているときに、Automations セクションの詳細ページでCreate automation ボタンを使用して、そのためのオートメーションを作成します。
監視するEvent を選択します。
イベントに応じた追加のフィールドが表示されるので、それを入力します。たとえば、An artifact alias is added を選択した場合は、Alias regex を指定する必要があります。
Next step をクリックします。
Slackインテグレーション を所有するチームを選択します。
Action type をSlack notification に設定します。Slackチャンネルを選択し、Next step をクリックします。
オートメーションの名前を提供します。必要に応じて、説明を追加します。
Create automation をクリックします。
W&B管理者は、プロジェクト内でオートメーションを作成できます。
W&Bにログインします。
プロジェクトページに移動し、Automations タブをクリックします。
Create automation をクリックします。
監視するEvent を選択します。
イベントに応じた追加のフィールドが表示されるので、それを入力します。たとえば、An artifact alias is added を選択した場合は、Alias regex を指定する必要があります。
Next step をクリックします。
Slackインテグレーション を所有するチームを選択します。
Action type をSlack notification に設定します。Slackチャンネルを選択し、Next step をクリックします。
オートメーションの名前を提供します。必要に応じて、説明を追加します。
Create automation をクリックします。
オートメーションの表示と管理
registryのAutomations タブから対象のオートメーションを管理します。
コレクションの詳細ページのAutomations セクションからコレクションのオートメーションを管理します。
これらのページのいずれからも、Registry管理者は既存のオートメーションを管理できます:
オートメーションの詳細を表示するには、その名前をクリックします。
オートメーションを編集するには、そのアクション...
メニューをクリックし、Edit automation をクリックします。
オートメーションを削除するには、そのアクション...
メニューをクリックし、Delete automation をクリックします。確認が必要です。
W&B管理者は、プロジェクトのAutomations タブからプロジェクトのオートメーションを表示および管理できます。
オートメーションの詳細を表示するには、その名前をクリックします。
オートメーションを編集するには、そのアクション...
メニューをクリックし、Edit automation をクリックします。
オートメーションを削除するには、そのアクション...
メニューをクリックし、Delete automation をクリックします。確認が必要です。
5.1.2 - Webhook オートメーションを作成する
This feature requires a Pro or Enterprise plan .
このページでは、webhook のオートメーションを作成する方法を示します。Slack オートメーションを作成するには、代わりに Slack オートメーションの作成 を参照してください。
webhook オートメーションを作成するための大まかな手順は以下の通りです。
必要に応じて、オートメーションに必要なアクストークン、パスワード、またはSSHキーなどを含む機密文字列ごとにW&B シークレットを作成 します。シークレットはチーム設定で定義されます。
webhook を作成 し、エンドポイントと承認の詳細を定義し、必要なシークレットにアクセスするためのインテグレーションのアクセス権を付与します。
オートメーションを作成 し、監視するevent と W&B が送信するペイロードを定義します。ペイロードのために必要なシークレットに対して、オートメーションにアクセスを許可します。
webhook の作成
チーム管理者は、チームに webhook を追加できます。
webhook が Bearer トークンを必要とする場合、またはペイロードが機密文字列を必要とする場合は、webhook を作成する前にそれを含む
シークレットを作成 してください。webhook には最大で1つのアクストークンと1つの他のシークレットを設定することができます。webhook の認証と承認の要件は、webhook のサービスによって決まります。
W&B にログインし、チーム設定ページに移動します。
Webhooks セクションで、New webhook をクリックします。
webhook に名前を提供します。
webhook のエンドポイント URL を提供します。
webhook が Bearer トークンを必要とする場合、Access token をそれを含む secret に設定します。webhook オートメーションを使用する際、W&B は Authorization: Bearer
HTTP ヘッダーをアクストークンに設定し、${ACCESS_TOKEN}
payload variable でトークンにアクセスできます。
webhook のペイロードにパスワードまたは他の機密文字列が必要な場合、Secret をその文字列を含むシークレットに設定します。webhook を使用するオートメーションを設定するとき、シークレットの名前に $
を付けて payload variable としてシークレットにアクセスできます。
webhook のアクセストークンがシークレットに保存されている場合は、アクセストークンとしてシークレットを指定するために次のステップを 必ず 完了してください。
W&B がエンドポイントに接続し、認証できることを確認するには:
オプションで、テスト用のペイロードを提供します。ペイロード内で webhook がアクセス可能なシークレットを参照するには、その名前に $
を付けます。このペイロードはテスト用であり保存されません。オートメーションのペイロードは create the automation で設定します。シークレットとアクセストークンが POST
リクエストで指定されている場所を表示するには、Troubleshoot your webhook を参照してください。
Test をクリックします。W&B は、設定された認証情報を使用して webhook のエンドポイントに接続しようとします。ペイロードを提供した場合は、W&B がそれを送信します。
テストが成功しない場合は、webhook の設定を確認して再試行してください。必要に応じて、Troubleshoot your webhook を参照してください。
これで webhook を使用する オートメーションを作成する ことができます。
オートメーションの作成
webhook を設定 した後、Registry または Project を選択し、webhook をトリガーするオートメーションを作成するための手順に従います。
レジストリ管理者は、そのレジストリ内でオートメーションを作成できます。レジストリのオートメーションは、将来追加されるものを含めて、そのレジストリ内のすべてのコレクションに適用されます。
W&B にログインします。
詳細を確認するためにレジストリの名前をクリックします。
レジストリにスコープされているオートメーションを作成するには、Automations タブをクリックし、Create automation をクリックします。レジストリにスコープされているオートメーションは、そのすべてのコレクション(将来作成されるものを含む)に自動的に適用されます。
レジストリ内の特定のコレクションのみにスコープされたオートメーションを作成するには、コレクションのアクション ...
メニューをクリックし、Create automation をクリックします。または、コレクションを表示しながら、コレクションの詳細ページの Automations セクションにある Create automation ボタンを使用してそれに対するオートメーションを作成します。
監視する Event を選択します。イベントによっては表示される追加フィールドを入力します。例えば、An artifact alias is added を選択した場合、Alias regex を指定する必要があります。Next step をクリックします。
webhook を所有するチームを選択します。
Action type を Webhooks に設定し、使用する webhook を選択します。
webhook にアクセストークンを設定している場合、${ACCESS_TOKEN}
payload variable でトークンにアクセスできます。webhook にシークレットを設定している場合、シークレットの名前に $
を付けてペイロード内でアクセスできます。webhook の要件は webhook のサービスによって決まります。
Next step をクリックします。
オートメーションに名前を付けます。オプションで説明を入力します。Create automation をクリックします。
W&B 管理者はプロジェクト内でオートメーションを作成できます。
W&B にログインし、プロジェクトページに移動します。
サイドバーの Automations をクリックします。
Create automation をクリックします。
監視する Event を選択します。
表示される、追加フィールドを入力します。例えば、An artifact alias is added を選択した場合、Alias regex を指定する必要があります。
オプションでコレクションフィルタを指定します。それ以外の場合、オートメーションはプロジェクト内のすべてのコレクションに適用され、将来追加されるものも含まれます。
Next step をクリックします。
webhook を所有するチームを選択します。
Action type を Webhooks に設定し、使用する webhook を選択します。
webhook がペイロードを必要とする場合、それを構築し、Payload フィールドに貼り付けます。webhook にアクセストークンを設定している場合、${ACCESS_TOKEN}
payload variable でトークンにアクセスできます。webhook にシークレットを設定している場合、シークレットの名前に $
を付けてペイロード内でアクセスできます。webhook の要件は webhook のサービスによって決まります。
Next step をクリックします。
オートメーションに名前を付けます。オプションで説明を入力します。Create automation をクリックします。
オートメーションの表示と管理
レジストリのオートメーションは、レジストリの Automations タブから管理します。
コレクションのオートメーションは、コレクションの詳細ページの Automations セクションから管理します。
これらのページのいずれかから、レジストリ管理者は既存のオートメーションを管理できます。
オートメーションの詳細を表示するには、その名前をクリックします。
オートメーションを編集するには、そのアクションの ...
メニューをクリックし、Edit automation をクリックします。
オートメーションを削除するには、そのアクションの ...
メニューをクリックし、Delete automation をクリックします。確認が必要です。
W&B 管理者はプロジェクトの Automations タブからプロジェクトのオートメーションを表示および管理できます。
オートメーションの詳細を表示するには、その名前をクリックします。
オートメーションを編集するには、そのアクションの ...
メニューをクリックし、Edit automation をクリックします。
オートメーションを削除するには、そのアクションの ...
メニューをクリックし、Delete automation をクリックします。確認が必要です。
ペイロードのリファレンス
以下のセクションを使用して、webhook のペイロードを構築します。webhook とそのペイロードのテストについての詳細は、Troubleshoot your webhook を参照してください。
ペイロード変数
このセクションでは、webhook のペイロードを構築するために使用できる変数について説明します。
Variable
Details
${project_name}
アクションをトリガーした変更を所有するプロジェクトの名前。
${entity_name}
アクションをトリガーした変更を所有する entity またはチームの名前。
${event_type}
アクションをトリガーしたイベントのタイプ。
${event_author}
アクションをトリガーしたユーザー。
${artifact_collection_name}
アーティファクトバージョンがリンクされているアーティファクトコレクションの名前。
${artifact_metadata.<KEY>}
アクションをトリガーしたアーティファクトバージョンのトップレベルのメタデータキーの任意の値。<KEY>
をトップレベルのメタデータキーの名前に置き換えます。webhook のペイロードにはトップレベルのメタデータキーのみが利用可能です。
${artifact_version}
アクションをトリガーしたアーティファクトバージョンの Wandb.Artifact
表現。
${artifact_version_string}
アクションをトリガーしたアーティファクトバージョンのstring
表現。
${ACCESS_TOKEN}
アクストークンが設定されている場合、webhook で設定されたアクセストークンの値。アクセストークンは自動的に Authorization: Bearer
HTTP ヘッダーに渡されます。
${SECRET_NAME}
設定されている場合、webhook に設定されたシークレットの値。SECRET_NAME
をシークレットの名前に置き換えます。
ペイロードの例
このセクションでは、一般的なユースケースのための webhook ペイロードの例を示します。例は payload variables をどのように使用するかを示します。
GitHub repository dispatch
Microsoft Teams notification
Slack notifications
W&B からリポジトリディスパッチを送信して GitHub アクションをトリガーします。例えば、リポジトリディスパッチを on
キーのトリガーとして受け入れる GitHub ワークフローファイルを持っているとしましょう。
on :
repository_dispatch :
types : BUILD_AND_DEPLOY
リポジトリ用のペイロードは次のようなものになるかもしれません。
{
"event_type" : "BUILD_AND_DEPLOY" ,
"client_payload" :
{
"event_author" : "${event_author}" ,
"artifact_version" : "${artifact_version}" ,
"artifact_version_string" : "${artifact_version_string}" ,
"artifact_collection_name" : "${artifact_collection_name}" ,
"project_name" : "${project_name}" ,
"entity_name" : "${entity_name}"
}
}
webhook ペイロードの event_type
キーは GitHub ワークフローファイルの types
フィールドと一致しなければなりません。
レンダリングされたテンプレート文字列の内容と位置は、オートメーションが設定されているイベントまたはモデルバージョンによって異なります。${event_type}
は LINK_ARTIFACT
または ADD_ARTIFACT_ALIAS
としてレンダリングされます。以下に例のマッピングを示します。
${event_type} --> "LINK_ARTIFACT" または "ADD_ARTIFACT_ALIAS"
${event_author} --> "<wandb-user>"
${artifact_version} --> "wandb-artifact://_id/QXJ0aWZhY3Q6NTE3ODg5ODg3""
${artifact_version_string} --> "<entity>/model-registry/<registered_model_name>:<alias>"
${artifact_collection_name} --> "<registered_model_name>"
${project_name} --> "model-registry"
${entity_name} --> "<entity>"
テンプレート文字列を使用して W&B から GitHub Actions や他のツールにコンテキストを動的に渡します。これらのツールが Python スクリプトを呼び出すことができる場合、それらは W&B API を通じて登録されたモデルアーティファクトを使用することができます。
この例のペイロードは、webhook を使用して Teams チャンネルに通知する方法を示しています。
{
"@type" : "MessageCard" ,
"@context" : "http://schema.org/extensions" ,
"summary" : "New Notification" ,
"sections" : [
{
"activityTitle" : "Notification from WANDB" ,
"text" : "This is an example message sent via Teams webhook." ,
"facts" : [
{
"name" : "Author" ,
"value" : "${event_author}"
},
{
"name" : "Event Type" ,
"value" : "${event_type}"
}
],
"markdown" : true
}
]
}
実行時に W&B データをペイロードに挿入するためにテンプレート文字列を使用できます(上記の Teams の例に示したように)。
このセクションは歴史的な目的で提供されます。現在、webhook を使用して Slack と統合している場合は、[新しい Slack インテグレーション]({{ relref “#create-a-slack-automation”}}) を使用するように設定を更新することをお勧めします。
Slack アプリをセットアップし、Slack API ドキュメント で強調されている指示に従って、着信 webhook インテグレーションを追加します。Bot User OAuth Token
の下で指定されているシークレットが W&B webhook のアクストークンであることを確認してください。
以下はペイロードの例です。
{
"text" : "New alert from WANDB!" ,
"blocks" : [
{
"type" : "section" ,
"text" : {
"type" : "mrkdwn" ,
"text" : "Registry event: ${event_type}"
}
},
{
"type" :"section" ,
"text" : {
"type" : "mrkdwn" ,
"text" : "New version: ${artifact_version_string}"
}
},
{
"type" : "divider"
},
{
"type" : "section" ,
"text" : {
"type" : "mrkdwn" ,
"text" : "Author: ${event_author}"
}
}
]
}
webhook のトラブルシューティング
W&B アプリ UI または Bash スクリプトを使用して、インタラクティブに webhook のトラブルシューティングを行います。新しい webhook を作成する際や既存の webhook を編集する際に webhook をトラブルシューティングできます。
チーム管理者は W&B アプリ UI を使用して webhook をインタラクティブにテストできます。
W&B チーム設定ページに移動します。
Webhooks セクションまでスクロールします。
webhook の名前の横にある三点リーダー(ミートボールアイコン)をクリックします。
Test を選択します。
現れた UI パネルから、表示されるフィールドに POST リクエストを貼り付けます。
Test webhook をクリックします。W&B アプリ UI 内で、W&B はエンドポイントからの応答を投稿します。
Testing Webhooks in Weights & Biases のビデオを見て、デモをご覧ください。
このシェルスクリプトは、W&B が webhook オートメーションに送信する POST
リクエストを生成する1つの方法を示しています。
以下のコードをシェルスクリプトにコピーし、webhook のトラブルシューティングを行います。以下の値を指定してください。
ACCESS_TOKEN
SECRET
PAYLOAD
API_ENDPOINT
webhook_test.sh
5.2 - 自動化イベントと範囲
This feature requires a Pro or Enterprise plan .
あるオートメーションは、プロジェクトやレジストリのスコープ内で特定のイベントが発生したときに開始されます。プロジェクトのスコープ は[スコープの技術的定義を挿入]を参照してください。このページでは、それぞれのスコープ内でオートメーションをトリガーするイベントについて説明します。
オートメーションの詳細は、オートメーション概要 またはオートメーションの作成 を参照してください。
レジストリ
このセクションでは、レジストリ でのオートメーションのスコープとイベントについて説明します。
レジストリアプリをhttps://wandb.ai/registry/で開きます。
レジストリの名前をクリックし、オートメーション タブでオートメーションを表示および作成します。
オートメーションの作成 の詳細をご覧ください。
スコープ
レジストリにおけるオートメーションは、これらのスコープで作成できます:
レジストリ レベル:オートメーションは、特定のレジストリ内のすべてのコレクション(将来追加されるコレクションを含む)で発生するイベントを監視します。
コレクションレベル:特定のレジストリ内の単一のコレクション。
イベント
レジストリオートメーションは、これらのイベントを監視できます:
新しいアーティファクトをコレクションにリンク : 新しいモデルやデータセットがレジストリに追加されたときにテストと検証。
アーティファクトのバージョンに新しいエイリアスを追加 : 新しいアーティファクトバージョンに特定のエイリアスが適用されたときに、ワークフローの特定のステップをトリガーします。たとえば、production
エイリアスが適用されたときにモデルをデプロイする。
プロジェクト
このセクションでは、プロジェクト でのオートメーションのスコープとイベントについて説明します。
W&Bアプリの https://wandb.ai/<team>/<project-name>
にあるW&Bプロジェクトに移動します。
オートメーション タブでオートメーションを表示および作成します。
オートメーションの作成 の詳細をご覧ください。
スコープ
プロジェクト内でオートメーションを作成できるスコープ:
プロジェクトレベル:オートメーションは、プロジェクト内の任意のコレクションで発生するイベントを監視します。
コレクションレベル:指定したフィルタに一致するプロジェクト内のすべてのコレクション。
イベント
プロジェクト内でオートメーションは、これらのイベントを監視できます:
コレクションでアーティファクトの新しいバージョンが作成される : アーティファクトの各バージョンに繰り返しの処理を適用します。コレクションの指定はオプションです。たとえば、新しいデータセットアーティファクトバージョンが作成されたときにトレーニングジョブを開始します。
アーティファクトエイリアスが追加される : プロジェクトやコレクション内の新しいアーティファクトバージョンに特定のエイリアスが適用されたときに、ワークフローの特定のステップをトリガーします。例えば、アーティファクトに test-set-quality-check
エイリアスが適用されたときに一連の後処理ステップを実行します。
次のステップ