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 - アーティファクトを作成する
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)
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 を参照してください。
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 リファレンスを参照してください。
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" ])
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
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)
7 - データを管理する
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 ポリシーが表示されます。
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
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 のみで利用可能です。
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()
次のステップ
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 にお問い合わせいただき、プライベートクラウドおよびオンプレミスのインストールについてご相談ください。
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 を参照してください。