参照アーティファクト を使用すると、W&B サーバーの外部に保存されたファイルを追跡して利用することができます。一般的な外部ストレージソリューションには、CoreWeave AI Object Storage、Amazon Simple Storage Service (Amazon S3) バケット、GCS バケット、Azure Blob、HTTP ファイルサーバー、NFS 共有などがあります。
参照アーティファクトは、参照ではないアーティファクトと同様に動作します。主な違いは、参照アーティファクトにはファイルのサイズや MD5 チェックサムなど、ファイルに関するメタデータのみが含まれる点です。ファイルそのものがあなたのシステムの外に出ることはありません。
参照アーティファクトも、参照ではないアーティファクトと同様に操作できます。W&B App では、ファイルブラウザを使って参照アーティファクトの内容を参照したり、完全な依存関係グラフを調査したり、アーティファクトのバージョン履歴を確認したりできます。ただし、データ自体がアーティファクト内に含まれていないため、UI は画像や音声などのリッチメディアをレンダリングできません。
外部ファイルを追跡しないアーティファクトをログすると、W&B はそのアーティファクトのファイルを W&B サーバーに保存します。これは、W&B Python SDK を使ってアーティファクトをログする場合のデフォルトの動作です。外部ファイルを追跡するアーティファクトをログすると、W&B はオブジェクトの ETag やサイズなど、そのオブジェクトに関するメタデータをログします。バケットでオブジェクトのバージョニングが有効になっている場合は、バージョン ID もログされます。
以下のセクションでは、外部参照アーティファクトを追跡する方法について説明します。
外部バケット内のアーティファクトをトラッキングする
W&B Python SDK を使用して、W&B の外部に保存されているファイルへの参照をトラッキングします。
wandb.init() で run を初期化します。
wandb.Artifact() でアーティファクトオブジェクトを作成します。
- アーティファクトオブジェクトの
wandb.Artifact.add_reference() メソッドで、バケットパスへの参照を指定します。
run.log_artifact() でアーティファクトのメタデータを記録します。
import wandb
# W&B の run を初期化する
with wandb.init(project="my-project") as run:
# アーティファクトオブジェクトを作成する
artifact = wandb.Artifact(name="name", type="type")
# バケットパスへの参照を追加する
artifact.add_reference(uri = "uri/to/your/bucket/path")
# アーティファクトのメタデータをログに記録する
run.log_artifact(artifact)
例として、バケットのディレクトリ構造が次のようになっているとします。
s3://my-bucket
|datasets/
|-- mnist/
|models/
|-- cnn/
datasets/mnist/ ディレクトリには画像のコレクションが格納されています。画像を含む datasets/mnist/ ディレクトリをデータセットのアーティファクトとして追跡するには、次のように指定します。
"mnist" など、アーティファクトの名前を指定します。
- アーティファクトオブジェクトを構築するときに、
type パラメータを "dataset" に設定します(wandb.Artifact(type="dataset"))。
wandb.Artifact.add_reference() を呼び出すときに、datasets/mnist/ ディレクトリへのパスを Amazon S3 URI(s3://my-bucket/datasets/mnist/)として指定します。
run.log_artifact() でアーティファクトをログに記録します。
次のコードサンプルは、参照アーティファクト mnist:latest を作成します。
import wandb
with wandb.init(project="my-project") as run:
artifact = wandb.Artifact(name="mnist", type="dataset")
artifact.add_reference(uri="s3://my-bucket/datasets/mnist")
run.log_artifact(artifact)
W&B App 内では、ファイルブラウザを使って参照アーティファクトの中身を確認したり、完全な依存関係グラフを探索したり、アーティファクトのバージョン履歴をさかのぼって確認したりできます。アーティファクト自体にデータが含まれていないため、W&B App は画像や音声などのリッチメディアをレンダリングしません。
W&B Artifacts は、CoreWeave Storage や MinIO を含む任意の Amazon S3 互換インターフェイスをサポートします。以下で説明するスクリプトは、AWS_S3_ENDPOINT_URL 環境変数を CoreWeave Storage または MinIO サーバーを指すように設定すれば、どちらのプロバイダでもそのまま動作します。
デフォルトでは、W&B はオブジェクトのプレフィックスを追加する際に 10,000 個のオブジェクト数の上限を設けています。wandb.Artifact.add_reference() を呼び出すときに max_objects= を指定することで、この上限を調整できます。
外部バケットからアーティファクトをダウンロードする
W&B は、アーティファクトがログされたときに記録されたメタデータを使用して参照アーティファクトをダウンロードする際、基盤となるバケットからファイルを取得します。バケットでオブジェクトバージョニングが有効になっている場合、W&B はアーティファクトがログされた時点のファイルの状態に対応するオブジェクトバージョンを取得します。バケットの内容を更新していっても、アーティファクトが学習 run 中のバケットのスナップショットとして機能するため、特定のモデルが学習されたときに使用されたデータの正確なバージョンを常に特定できます。
次のコードサンプルは、参照アーティファクトをダウンロードする方法を示しています。アーティファクトをダウンロードするための API は、参照アーティファクトと非参照アーティファクトの両方で同じです。
import wandb
with wandb.init(project="my-project") as run:
artifact = run.use_artifact("mnist:latest", type="dataset")
artifact_dir = artifact.download()
ワークフローの一環としてファイルを上書きする場合は、ストレージバケットで「オブジェクトバージョニング」を有効にすることを W&B は推奨します。バージョニングが有効になっていれば、アーティファクトをダウンロードするときに、そのアーティファクトがログされた後でファイルが上書きされていても、W&B は常に正しいバージョンのファイルを取得できます。ユースケースに応じて、オブジェクトバージョニングを有効にする手順を参照してください:AWS、Google Cloud、Azure。
次のコードサンプルでは、データセットを Amazon S3 バケットにアップロードし、それを参照アーティファクトで追跡したあとにダウンロードします。
import boto3
import wandb
with wandb.init() as run:
# ここで学習を実行...
s3_client = boto3.client("s3")
s3_client.upload_file(file_name="my_model.h5", bucket="my-bucket", object_name="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)
後のタイミングでモデルのアーティファクトをダウンロードできます。アーティファクトの名前と種類を指定してください。
import wandb
with wandb.init() as run:
artifact = run.use_artifact(artifact_or_name = "cnn", type="model")
datadir = artifact.download()
Google Cloud または Azure で参照アーティファクトを追跡する方法をエンドツーエンドで解説したレポートについては、次を参照してください:
W&B は、使用しているクラウドプロバイダに応じた標準的な方法で認証情報を探索します。どのような認証情報が利用されるかの詳細は、各クラウドプロバイダのドキュメントを参照してください。
AWS の場合、バケットが設定されているユーザーのデフォルトリージョン以外にある場合は、AWS_REGION 環境変数をバケットのリージョンに合わせて設定する必要があります。
画像、音声、動画、ポイントクラウドなどのリッチメディアは、バケットの CORS 設定によっては App UI で正しくレンダリングされない場合があります。バケットの CORS 設定で app.wandb.ai を許可リストに追加すると、W&B App でそのようなリッチメディアを正しくレンダリングできるようになります。画像、音声、動画、ポイントクラウドなどのリッチメディアが App UI でレンダリングされない場合は、バケットの CORS ポリシーで app.wandb.ai が許可リストに含まれていることを確認してください。
ファイルシステム上のアーティファクトをトラッキングする
データセットにアクセスする一般的なパターンの一つは、学習ジョブを実行しているすべてのマシンに対して、リモートファイルシステムへの NFS マウントポイントを公開することです。これはクラウドストレージバケットの代替手段になり得ます。学習スクリプトの観点からは、ファイルがローカルのファイルシステム上に存在しているように見えるためです。
ファイルシステム内でアーティファクトを追跡するには、次の手順を実行します。
wandb.init() を使用して run を初期化します。
wandb.Artifact() を使用してアーティファクトオブジェクトを作成します。
- アーティファクトオブジェクトの
wandb.Artifact.add_reference() メソッドで、ファイルシステムパスへの参照を指定します。
run.log_artifact() でアーティファクトのメタデータをログに記録します。
マウントされたファイルシステム内のファイルを追跡するには、次のコードスニペットをコピーして貼り付けて使用してください。山かっこ(< >)で囲まれた値を適切な値に置き換えてください。
import wandb
# runを初期化する
with wandb.init(entity="<entity>", project="<project>") as run:
# アーティファクトオブジェクトを作成する
artifact = wandb.Artifact(name="<name>", type="<type>")
# ファイルシステムパスへの参照を追加する
artifact.add_reference("file:///path/to/dataset/")
# アーティファクトをログに記録する(メタデータのみ)
run.log_artifact(artifact)
URL 内でスラッシュが 3 つ連続していることに注意してください。最初の部分は、ファイルシステム参照を使用していることを示す file:// プレフィックスです。2 番目の部分は、ファイルシステムのルート / です。残りの部分は、追跡したいディレクトリまたはファイルへのパスです。
例として、次のような構造を持つファイルシステムが /mount にマウントされているとします。
mount
|datasets/
|-- mnist/
|models/
|-- cnn/
datasets/mnist/ ディレクトリをデータセット用アーティファクトとして追跡したいとします。その場合は、次のコードスニペットを使用できます。
import wandb
with wandb.init() as run:
artifact = wandb.Artifact("mnist", type="dataset")
artifact.add_reference("file:///mount/datasets/mnist/")
run.log_artifact(artifact)
これは、/mount/datasets/mnist/ 以下に保存されているファイルを指す参照アーティファクト mnist:latest を作成します。
デフォルトでは、W&B はディレクトリへの参照を追加する際に 10,000 ファイルの上限を設けています。wandb.Artifact.add_reference() を呼び出すときに max_objects= を指定することで、この上限を変更できます。
同様に、models/cnn/my_model.h5 に保存されたモデルを追跡する場合は、次のコードスニペットを使用できます。
import wandb
with wandb.init() as run:
# ここで学習...
# モデルをディスクに書き込む
# アーティファクトオブジェクトを作成する
model_artifact = wandb.Artifact("cnn", type="model")
# モデルファイルパスへの参照を追加する
model_artifact.add_reference("file:///mount/cnn/my_model.h5")
# アーティファクトをW&Bに記録する
run.log_artifact(model_artifact)
外部ファイルシステムからアーティファクトをダウンロードする
参照先のファイルシステムから、通常のアーティファクトと同じ API を使ってファイルをダウンロードします:
wandb.init() で run を初期化します。
- ダウンロードしたいアーティファクトを指定するために、
wandb.Run.use_artifact() メソッドを使用します。
- 参照先のファイルシステムからファイルをダウンロードするために、アーティファクトの
wandb.Artifact.download() メソッドを呼び出します。
with wandb.init() as run:
artifact = run.use_artifact("entity/project/mnist:latest", type="dataset")
artifact_dir = artifact.download()
W&B は /mount/datasets/mnist の内容を artifacts/mnist:v0/ ディレクトリにコピーします。
Artifact.download() は、アーティファクトを再構築できない場合にエラーを発生させます。たとえば、アーティファクトに上書きされたファイルへの参照が含まれている場合、もはやアーティファクトを再構築できないため、Artifact.download() はエラーを発生させます。