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

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

Artifacts

W&B アーティファクトの概要、仕組み、および開始方法。

W&B Artifacts を使用して、W&B Runs の入力と出力としてデータをトラッキングし、バージョン管理します。たとえば、モデルトレーニングの run では、データセットを入力として受け取り、トレーニングされたモデルを出力として生成することがあります。ハイパーパラメーター、メタデータ、メトリクスを run にログし、アーティファクトを使用してモデルをトレーニングするために使用されるデータセットを入力としてログ、トラッキング、およびバージョン管理し、生成されたモデルのチェックポイントを出力として管理できます。

ユースケース

あなたの ML ワークフロー全体で、runs の入力と出力としてアーティファクトを使用することができます。データセット、モデル、または他のアーティファクトをプロセシングの入力として使用することができます。

ユースケース 入力 出力
モデルトレーニング データセット (トレーニングおよび検証データ) トレーニングされたモデル
データセットの前処理 データセット (生データ) データセット (前処理済みデータ)
モデルの評価 モデル + データセット (テストデータ) W&B Table
モデルの最適化 モデル 最適化されたモデル

アーティファクトを作成する

4行のコードでアーティファクトを作成します:

  1. W&B run を作成する。
  2. wandb.Artifact API を使用してアーティファクトオブジェクトを作成する。
  3. モデルファイルやデータセットなど、一つ以上のファイルをアーティファクトオブジェクトに追加する。
  4. あなたのアーティファクトを 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 SDKCLI リファレンスガイドを探索します。

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' があります。

アーティファクトオブジェクトを初期化する際に、オプションで説明とメタデータを提供できます。利用可能な属性とパラメータの詳細については、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 の外でアーティファクトを作成することもできます。詳細については、外部ファイルのトラッキングをご覧ください。

アーティファクトにファイルを追加

以下のセクションでは、異なるファイルタイプおよび並行実行からのアーティファクトを構築する方法を説明します。

以下の例では、複数のファイルとディレクトリ構造を持つプロジェクトディレクトリを前提とします。

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 サーバーが ETagContent-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 を参照してください。

まず、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")

戻されたオブジェクトを使って、アーティファクトの内容をダウンロードします。

artifact.download()

アーティファクトの内容を特定のディレクトリーにダウンロードするために 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 の内外で更新します。

アーティファクトの descriptionmetadata、および alias に希望する値を渡します。W&B サーバー上でアーティファクトを更新するには、save() メソッドを呼び出してください。W&B Run の間または Run の外でアーティファクトを更新することができます。

W&B Public API (wandb.Api) を使用して、Run の外でアーティファクトを更新します。Artifact API (wandb.Artifact) を使用して、Run の間にアーティファクトを更新します。

次のコード例は、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 外で新しいアーティファクトバージョンを作成してください:

W&B run 内でアーティファクトバージョンを作成します:

  1. wandb.init を使って run を作成。
  2. wandb.Artifact で新しいアーティファクトを作成するか、既存のアーティファクトを取得。
  3. .add_file を使用してファイルをアーティファクトに追加。
  4. .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 の外でアーティファクトバージョンを作成します:

  1. wanb.Artifact で新しいアーティファクトを作成するか、既存のアーティファクトを取得。
  2. .add_file を使用してファイルをアーティファクトに追加。
  3. .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 (以下で Run 1Run 2Run 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: ファイルのサブセットに対する注釈を修正し、古いファイルを正しいものと置き換えます。

インクリメンタルアーティファクトとしての同じ機能を実行するためにアーティファクトをゼロから作成することもできます。しかし、アーティファクトをゼロから作成する場合、アーティファクトのすべての内容をローカルディスクに持っている必要があります。インクリメンタルな変更を行う場合、前のアーティファクトバージョンのファイルを変更せずに、個々のファイルを追加、削除、または変更できます。

以下の手順に従って、アーティファクトをインクリメンタルに変更します:

  1. インクリメンタル変更を行いたいアーティファクトバージョンを取得します:
saved_artifact = run.use_artifact("my_artifact:latest")
client = wandb.Api()
saved_artifact = client.artifact("my_artifact:latest")
  1. 以下の方法でドラフトを作成します:
draft_artifact = saved_artifact.new_draft()
  1. 次のバージョンで見たいインクリメンタルな変更を行います。既存のエントリーを追加、削除、または変更することができます。

各変更を行うための例については、以下のいずれかのタブを選択してください:

add_file メソッドで既存のアーティファクトバージョンにファイルを追加します:

draft_artifact.add_file("file_to_add.txt")

remove メソッドで既存のアーティファクトバージョンからファイルを削除します:

draft_artifact.remove("file_to_remove.txt")

ドラフトから古い内容を削除し、新しい内容を追加することで、内容を変更または置き換えます:

draft_artifact.remove("modified_file.txt")
draft_artifact.add_file("modified_file.txt")
  1. 最後に、変更をログまたは保存します。以下のタブは、W&B run の内外で変更を保存する方法を示しています。適切なユースケースに応じてタブを選択してください:
run.log_artifact(draft_artifact)
draft_artifact.save()

以上のコード例をまとめると、以下のようになります:

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 に共通して適用されます。

次の構造を持つバケットがあると仮定します:

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)

新しいリファレンスアーティファクト mnist:latest は、通常のアーティファクトと非常に似た外観と挙動を持っています。唯一の違いは、アーティファクトが S3/GCS/Azure オブジェクトに関するメタデータ (例えば、ETag、サイズ、バージョン ID) のみを含んでいることです (バケットにオブジェクトのバージョン管理が有効になっている場合)。

W&B は、使用するクラウドプロバイダーに基づいてクレデンシャルを探すデフォルトのメカニズムを使用します。クラウドプロバイダーからのドキュメントを読み、使用されるクレデンシャルについて詳しく学びましょう。

クラウドプロバイダー クレデンシャルドキュメント
AWS Boto3 ドキュメント
GCP Google Cloud ドキュメント
Azure Azure ドキュメント

AWS では、バケットが設定されたユーザーのデフォルトリージョンに位置していない場合、AWS_REGION 環境変数をバケットリージョンに一致させる必要があります。

このアーティファクトを通常のアーティファクトのように扱うことができます。アプリ UI では、ファイルブラウザを使用してリファレンスアーティファクトの内容を閲覧したり、完全な依存関係グラフを探索したり、アーティファクトのバージョン履歴をスキャンしたりできます。

リファレンスアーティファクトをダウンロードする

import wandb

run = wandb.init()
artifact = run.use_artifact("mnist:latest", type="dataset")
artifact_dir = artifact.download()

W&B は、リファレンスアーティファクトをダウンロードする際に、アーティファクトがログされたときに記録されたメタデータを使用して、基となるバケットからファイルを取得します。バケットにオブジェクトのバージョン管理が有効になっている場合、W&B はアーティファクトがログされた時点のファイルの状態に対応するオブジェクトバージョンを取得します。これは、バケットの内容が進化しても、アーティファクトがトレーニングされた特定の反復にあなたのデータを指し示すことができることを意味します。アーティファクトはトレーニング時点でのバケットのスナップショットとして機能します。

すべてを結び付ける

次のコード例は、トレーニングジョブに供給される 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)

ファイルシステムリファレンス

データセットへの高速アクセスのためのもう一つの一般的なパターンは、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 を使って データ保持を管理する方法を学ぶには、この ビデオチュートリアルをご覧ください。

自動生成された 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 許可を与えることもできます。

  1. チームのプロフィールページに移動します。
  2. 設定 タブを選択します。
  3. Artifacts のタイム・トゥ・リブ (TTL) セクションに移動します。
  4. TTL 許可のドロップダウンから、TTL ポリシーを設定および編集できる人を選択します。
  5. 設定をレビューして保存をクリックします。
  6. 変更を確認し、設定を保存を選択します。

TTL ポリシーを作成する

アーティファクトを作成するとき、または作成後に TTL ポリシーを設定します。

以下のコードスニペットすべてにおいて、 <> で包まれた内容をあなたの情報に置き換えてコードスニペットを使用してください。

アーティファクト作成時に TTL ポリシーを設定する

W&B Python SDK を使用してアーティファクトを作成する際に TTL ポリシーを定義します。TTL ポリシーは通常日数で定義されます。

手順は次のとおりです:

  1. アーティファクトを作成します。
  2. ファイル、ディレクトリ、または参照など、アーティファクトにコンテンツを追加します。
  3. Python の標準ライブラリの一部である datetime.timedelta データ型で TTL の期限を定義します。
  4. アーティファクトをログします。

以下のコードスニペットはアーティファクトを作成し、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 ポリシーを定義します。

  1. あなたのアーティファクトを取得します。
  2. アーティファクトの ttl 属性に時間差を渡します。
  3. 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年間に設定します。

  1. W&B アプリ UI の W&B プロジェクトに移動します。
  2. 左のパネルでアーティファクトアイコンを選択します。
  3. アーティファクトの一覧からアーティファクトタイプを展開します。
  4. TTL ポリシーを編集したいアーティファクトバージョンを選択します。
  5. バージョン タブをクリックします。
  6. ドロップダウンから TTL ポリシー編集 を選択します。
  7. 表示されるモーダル内で、TTL ポリシードロップダウンから カスタム を選択します。
  8. TTL 期間フィールドで、日数単位で TTL ポリシーを設定します。
  9. TTL 更新 ボタンを選択して変更を保存します。

チームのデフォルト TTL ポリシーを設定する

チームのデフォルト TTL ポリシーを設定します。デフォルトの TTL ポリシーは、既存と今後のアーティファクトすべてに、その作成日を基に適用されます。バージョンレベルで既に TTL ポリシーが存在するアーティファクトは、チームのデフォルト TTL に影響を受けません。

  1. チームのプロフィールページに移動します。
  2. 設定 タブを選択します。
  3. Artifacts のタイム・トゥ・リブ (TTL) セクションに移動します。
  4. チームのデフォルト TTL ポリシー設定 をクリックします。
  5. 期間フィールドにおいて、日数単位で TTL ポリシーを設定します。
  6. 設定をレビューして保存 をクリックします。
  7. 変更を確認し、設定を保存 を選択します。

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 ポリシーを非アクティブにします。

  1. あなたのアーティファクトを取得します。
  2. アーティファクトの ttl 属性を None に設定します。
  3. save メソッドでアーティファクトを更新します。

以下のコードスニペットは、アーティファクトに対する TTL ポリシーをオフにする方法を示しています:

artifact = run.use_artifact("<my-entity/my-project/my-artifact:alias>")
artifact.ttl = None
artifact.save()
  1. W&B アプリ UI の W&B プロジェクトに移動します。
  2. 左パネルでアーティファクトアイコンを選択します。
  3. アーティファクトのリストからアーティファクトタイプを展開します。
  4. TTL ポリシーを編集したいアーティファクトバージョンを選択します。
  5. バージョンタブをクリックします。
  6. リンク先レジストリ ボタンの隣にある肉球 UI アイコンをクリックします。
  7. ドロップダウンから TTL ポリシー編集 を選択します。
  8. 表示されるモーダル内で、TTL ポリシードロップダウンから 非アクティブ を選択します。
  9. 変更を保存するために 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 ポリシーを表示します。

  1. W&B アプリの https://wandb.ai に移動します。
  2. あなたの W&B プロジェクトに移動します。
  3. プロジェクト内で、左のサイドバーの Artifacts タブを選択します。
  4. コレクションをクリックします。

選択されたコレクション内のすべてのアーティファクトが表示されます。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.initdir または 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 を設定するための環境変数の完全なガイドについては、環境変数リファレンスを参照してください。

ローカルのアーティファクトキャッシュをクリーンアップする

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 ポリシーによるデータ保持の管理を参照してください。

アーティファクトバージョンの削除

アーティファクトバージョンを削除するには:

  1. アーティファクトの名前を選択します。これにより、アーティファクトビューが拡張され、そのアーティファクトに関連付けられたすべてのアーティファクトバージョンが一覧表示されます。
  2. アーティファクトのリストから、削除したいアーティファクトバージョンを選択します。
  3. ワークスペースの右側にあるケバブドロップダウンを選択します。
  4. 「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.Apiproject および 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()

アーティファクトコレクションの削除

アーティファクトコレクションを削除するには:

  1. 削除したいアーティファクトコレクションに移動し、その上にカーソルを合わせます。
  2. アーティファクトコレクション名の横にあるケバブドロップダウンを選択します。
  3. 「Delete」を選択します。

アーティファクトコレクションは、delete() メソッドを使用してプログラムで削除することもできます。wandb.Apiproject および 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 をホストする方法に基づいて、ガベージコレクションを有効にするために追加の手順が必要な場合があります。これには以下が含まれます:

  • GORILLA_ARTIFACT_GC_ENABLED 環境変数を true に設定: GORILLA_ARTIFACT_GC_ENABLED=true
  • AWSGCP または Minio などのストレージプロバイダーを使用している場合は、バケットバージョン管理を有効にします。Azure を使用している場合は、ソフト削除を有効にします。

以下の表は、デプロイメントタイプに基づいてガベージコレクションを有効にするための要件を満たす方法を説明しています。

X は要件を満たす必要があることを示します:

環境変数 バージョン管理の有効化
共有クラウド
セキュアストレージコネクタ を使用した共有クラウド X
専用クラウド
セキュアストレージコネクタ を使用した専用クラウド X
カスタマーマネージドクラウド X X
カスタマーマネージドオンプレミス X X

8 - アーティファクトグラフの探索

W&B アーティファクト の自動生成された有向非巡回グラフを トラバース します。

W&B は、特定の run がログしたアーティファクトや、その run が利用したアーティファクトを自動で追跡します。これらのアーティファクトには、データセットやモデル、評価結果、その他が含まれることがあります。機械学習ライフサイクル全体で生成されたさまざまなアーティファクトを追跡および管理するために、アーティファクトのリネージを探索できます。

リネージ

アーティファクトのリネージを追跡することには、いくつかの主要な利点があります:

  • 再現性: すべてのアーティファクトのリネージを追跡することで、チームは実験やモデル、結果を再現でき、デバッグ、実験、および機械学習モデルの検証に不可欠です。

  • バージョン管理: アーティファクトのリネージには、アーティファクトのバージョン管理とその変更の追跡が含まれます。必要に応じて、チームはデータやモデルの以前のバージョンに戻すことができます。

  • 監査: アーティファクトとその変換の詳細な履歴を持つことで、組織は規制やガバナンスの要件に準拠できます。

  • コラボレーションと知識共有: アーティファクトのリネージは、試行された記録が明確に示されており、何がうまくいって何がうまくいかなかったかを提供することで、チームメンバー間のより良いコラボレーションを促進します。これにより、努力の重複を避け、開発プロセスを加速させます。

アーティファクトのリネージを見つける

Artifacts タブでアーティファクトを選択すると、アーティファクトのリネージを見ることができます。このグラフビューは、パイプラインの全体的な概要を示します。

アーティファクトグラフを見るには:

  1. W&B App UI でプロジェクトに移動します。
  2. 左のパネルでアーティファクトアイコンを選びます。
  3. Lineage を選択します。
Getting to the Lineage tab

リネージグラフのナビゲート

指定したアーティファクトやジョブタイプは、その名前の前に表示され、アーティファクトは青のアイコン、Runs は緑のアイコンで表されます。矢印は、グラフ上での run またはアーティファクトの入力と出力を示します。

Run and artifact nodes Inputs and outputs

より詳細なビューを得るために、個別のアーティファクトまたは run をクリックして、特定のオブジェクトに関する詳細情報を取得します。

Previewing a run

アーティファクトクラスター

グラフのあるレベルに run またはアーティファクトが5つ以上ある場合、クラスターが作成されます。クラスターには、特定のバージョンの run またはアーティファクトを見つけるための検索バーがあり、クラスター内のノードを個別にプルしてそのリネージを調査することができます。

ノードをクリックすると、そのノードのプレビューが表示され、概要が示されます。矢印をクリックすると、個別の run またはアーティファクトが抽出され、抽出されたノードのリネージを調べることができます。

Searching a run cluster

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_byused_by メソッドを使用して、アーティファクトからグラフをたどります:

# アーティファクトからグラフを上下にたどります:
producer_run = artifact.logged_by()
consumer_runs = artifact.used_by()

次のステップ

9 - アーティファクトのデータプライバシーとコンプライアンス

デフォルトで W&B ファイルが保存される場所を学びましょう。機密情報の保存方法について探索します。

ファイルは、Artifacts をログするときに W&B が管理する Google Cloud バケットにアップロードされます。バケットの内容は、保存中および転送中の両方で暗号化されます。Artifact ファイルは、対応するプロジェクトへのアクセス権を持つユーザーにのみ表示されます。

GCS W&B クライアントサーバー図

アーティファクトのバージョンを削除すると、そのバージョンはデータベースでソフト削除としてマークされ、ストレージコストからも除外されます。アーティファクト全体を削除すると、それは完全削除のためにキューに入れられ、その内容はすべて W&B バケットから削除されます。ファイル削除に関する特定のニーズがある場合は、Customer Support にお問い合わせください。

マルチテナント環境に存在できない機密データセットには、クラウドバケットに接続されたプライベート W&B サーバーまたは reference artifacts を使用することができます。Reference artifacts は、ファイル内容を W&B に送信せずに、プライベートバケットへの参照を追跡します。Reference artifacts は、バケットやサーバー上のファイルへのリンクを維持します。つまり、W&B はファイルそのものではなく、ファイルに関連するメタデータのみを追跡します。

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 を使用してアーティファクトオブジェクトを作成します。アーティファクトの名前とファイルタイプの説明を、それぞれ nametype パラメータとして指定します。

例えば、次のコードスニペットは ‘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 サーバーで使用する手順を示します。

  1. まず、wandb.init(). を使用して新しい run オブジェクトを初期化します。
  2. 次に、run オブジェクトの use_artifact() メソッドを使用して、W&B に使用するアーティファクトを指定します。これにより、アーティファクトオブジェクトが返されます。
  3. 最後に、アーティファクトの 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 を参照してください。