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

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

Artifacts

W&B Artifacts の概要、その仕組み、およびそれらの使用を開始する方法について説明します。

W&B Artifacts を使用して、W&B Runs の入力および出力としてデータを追跡およびバージョン管理します。たとえば、モデルトレーニング run は、データセットを入力として受け取り、トレーニング済みのモデルを出力として生成する場合があります。ハイパー パラメーター、メタデータ、およびメトリクスを run に記録できます。また、artifact を使用して、モデルのトレーニングに使用されるデータセットを入力として、結果のモデル チェックポイントを別の artifact として、ログ記録、追跡、およびバージョン管理できます。

ユースケース

Artifact は、runs の入力および出力として、ML ワークフロー全体で使用できます。データセット、モデル、またはその他の artifact を、処理の入力として使用できます。

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

artifact を作成する

4 行のコードで artifact を作成します。

  1. W&B run を作成します。
  2. wandb.Artifact API を使用して、artifact オブジェクトを作成します。
  3. モデル ファイルやデータセットなど、1 つ以上のファイルを artifact オブジェクトに追加します。
  4. artifact を W&B に記録します。

たとえば、次のコード スニペットは、dataset.h5 というファイルを example_artifact という artifact に記録する方法を示しています。

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()

# artifact バージョン "my_data" を dataset.h5 のデータを持つデータセットとして記録します

artifact をダウンロードする

use_artifact メソッドを使用して、run への入力としてマークする artifact を示します。

上記のコード スニペットに従って、次のコード ブロックは training_dataset artifact の使用方法を示しています。

artifact = run.use_artifact(
    "training_dataset:latest"
)  # "my_data" artifact を使用して run オブジェクトを返します

これにより、artifact オブジェクトが返されます。

次に、返されたオブジェクトを使用して、artifact のすべてのコンテンツをダウンロードします。

datadir = (
    artifact.download()
)  # `my_data` artifact 全体をデフォルトのディレクトリーにダウンロードします。

次のステップ

  • artifact をバージョン管理および更新する方法を学びます。
  • オートメーションを使用して、artifact の変更に応じてダウンストリーム ワークフローをトリガーしたり、Slack channel に通知したりする方法を学びます。
  • トレーニング済みモデルを格納するスペースであるレジストリについて学びます。
  • Python SDK および CLI リファレンス ガイドをご覧ください。

1 - Create an artifact

W&B の Artifact を作成、構築します。1 つまたは複数のファイル、または URI 参照を Artifact に追加する方法を学びます。

W&B Python SDK を使用して、W&B Runs から Artifacts を構築します。ファイル、ディレクトリー、URI、および並列 run からのファイルを Artifacts に追加できます。ファイルを Artifacts に追加したら、Artifacts を W&B サーバーまたは独自のプライベートサーバーに保存します。

Amazon S3 に保存されているファイルなど、外部ファイルを追跡する方法については、外部ファイルを追跡のページを参照してください。

Artifacts を構築する方法

W&B Artifactは、次の3つのステップで構築します。

1. wandb.Artifact() で Artifacts Python オブジェクトを作成する

wandb.Artifact() クラスを初期化して、Artifacts オブジェクトを作成します。次の パラメータ を指定します。

  • Name: Artifacts の名前を指定します。名前は、一意で記述的で、覚えやすいものにする必要があります。Artifacts 名を使用して、W&B App UI で Artifacts を識別したり、その Artifacts を使用する場合に使用したりします。
  • Type: タイプを指定します。タイプは、シンプルで記述的で、機械学習 パイプライン の単一のステップに対応している必要があります。一般的な Artifacts タイプには、'dataset' または 'model' があります。

Artifacts オブジェクトを初期化するときに、オプションで説明と メタデータ を指定できます。利用可能な属性と パラメータ の詳細については、Python SDK リファレンス ガイドの wandb.Artifact クラス定義を参照してください。

次の例は、データセット Artifacts を作成する方法を示しています。

import wandb

artifact = wandb.Artifact(name="<replace>", type="<replace>")

上記の コードスニペット の文字列 引数 を、自分の名前とタイプに置き換えます。

2. 1つ以上のファイルを Artifacts に追加する

Artifacts メソッド を使用して、ファイル、ディレクトリー、外部 URI 参照 (Amazon S3 など) などを追加します。たとえば、単一のテキスト ファイルを追加するには、add_file メソッド を使用します。

artifact.add_file(local_path="hello_world.txt", name="optional-name")

add_dir メソッド を使用して、複数のファイルを追加することもできます。ファイルを追加する方法の詳細については、Artifacts を更新を参照してください。

3. Artifacts を W&B サーバー に保存する

最後に、Artifacts を W&B サーバー に保存します。Artifacts は run に関連付けられています。したがって、run オブジェクト の log_artifact() メソッド を使用して、Artifacts を保存します。

# W&B Run を作成します。'job-type' を置き換えます。
run = wandb.init(project="artifacts-example", job_type="job-type")

run.log_artifact(artifact)

オプションで、W&B run の外部で Artifacts を構築できます。詳細については、外部ファイルを追跡を参照してください。

Artifacts にファイルを追加する

次のセクションでは、さまざまなファイル タイプ と並列 run から Artifacts を構築する方法について説明します。

次の例では、複数のファイルとディレクトリー構造を持つ プロジェクト ディレクトリー があると仮定します。

project-directory
|-- images
|   |-- cat.png
|   +-- dog.png
|-- checkpoints
|   +-- model.h5
+-- model.h5

単一のファイルを追加する

上記の コードスニペット は、単一のローカル ファイルを Artifacts に追加する方法を示しています。

# 単一のファイルを追加
artifact.add_file(local_path="path/file.format")

たとえば、作業ローカル ディレクトリー に 'file.txt' という名前のファイルがあるとします。

artifact.add_file("path/file.txt")  # `file.txt' として追加されました

Artifacts には、次のコンテンツが含まれるようになりました。

file.txt

オプションで、name パラメータ に Artifacts 内の目的の パス を渡します。

artifact.add_file(local_path="path/file.format", name="new/path/file.format")

Artifacts は次のように保存されます。

new/path/file.txt
API 呼び出し 結果の Artifacts
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

複数のファイルを追加する

上記の コードスニペット は、ローカル ディレクトリー 全体を Artifacts に追加する方法を示しています。

# ディレクトリー を再帰的に追加
artifact.add_dir(local_path="path/file.format", name="optional-prefix")

上記の API 呼び出しは、上記の Artifacts コンテンツを生成します。

API 呼び出し 結果の Artifacts
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 参照を追加する

Artifacts は、W&B ライブラリ が処理する方法を知っている スキーム を URI が持つ場合、再現性のために チェックサム やその他の情報を追跡します。

add_reference メソッド を使用して、外部 URI 参照を Artifacts に追加します。'uri' 文字列を自分の URI に置き換えます。オプションで、name パラメータ に Artifacts 内の目的の パス を渡します。

# URI 参照を追加
artifact.add_reference(uri="uri", name="optional-name")

Artifacts は現在、次の URI スキーム をサポートしています。

  • http(s)://: HTTP 経由でアクセス可能なファイルへの パス 。Artifacts は、HTTP サーバー が ETag および Content-Length レスポンス ヘッダー をサポートしている場合、etag および サイズ メタデータ の形式で チェックサム を追跡します。
  • s3://: S3 内の オブジェクト または オブジェクト プレフィックス への パス 。Artifacts は、参照されている オブジェクト の チェックサム および バージョン 管理情報 ( バケット で オブジェクト の バージョン 管理が有効になっている場合) を追跡します。オブジェクト プレフィックス は、プレフィックス の下の オブジェクト を含むように拡張され、最大 10,000 個の オブジェクト が含まれます。
  • gs://: GCS 内の オブジェクト または オブジェクト プレフィックス への パス 。Artifacts は、参照されている オブジェクト の チェックサム および バージョン 管理情報 ( バケット で オブジェクト の バージョン 管理が有効になっている場合) を追跡します。オブジェクト プレフィックス は、プレフィックス の下の オブジェクト を含むように拡張され、最大 10,000 個の オブジェクト が含まれます。

上記の API 呼び出しは、上記の Artifacts を生成します。

API 呼び出し 結果の Artifacts コンテンツ
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

並列 run から Artifacts にファイルを追加する

大規模な データセット または分散 トレーニング の場合、複数の並列 run が単一の Artifacts に貢献する必要がある場合があります。

import wandb
import time

# デモ の目的で、ray を使用して並列で run を 起動 します。
# ただし、並列 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つの画像を Artifacts に追加します。
    """
    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]])

        # テーブル を Artifacts 内の フォルダ に追加します
        artifact.add(table, "{}/table_{}".format(parts_path, i))

        # Artifacts を アップサート すると、Artifacts のデータ が作成または追加されます
        run.upsert_artifact(artifact)


# 並列で run を 起動 します
result_ids = [train.remote(i) for i in range(num_parallel)]

# すべての ライター に 参加 して、ファイル が
# Artifacts を終了する前に追加されていることを確認します。
ray.get(result_ids)

# すべての ライター が終了したら、Artifacts を終了して、
# 準備完了にします。
with wandb.init(group=group_name) as run:
    artifact = wandb.Artifact(artifact_name, type=artifact_type)

    # テーブル の フォルダ を指す "PartitionTable" を作成します
    # Artifacts に追加します。
    artifact.add(wandb.data_types.PartitionedTable(parts_path), table_name)

    # Finish artifact は Artifacts を確定し、この バージョン への将来の "upsert" を許可しません
    run.finish_artifact(artifact)

2 - Download and use artifacts

複数のプロジェクトから Artifacts をダウンロードして使用します。

W&B サーバーにすでに保存されている Artifacts をダウンロードして使用するか、必要に応じて重複排除のために Artifacts オブジェクトを構築して渡します。

W&B に保存されている Artifacts のダウンロードと使用

W&B Run の内部または外部で、W&B に保存されている Artifacts をダウンロードして使用します。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 メソッドを使用して、使用する Artifacts を指定します。これにより、run オブジェクトが返されます。次のコードスニペットでは、エイリアス 'latest' を持つ 'bike-dataset' という Artifacts を指定します。

artifact = run.use_artifact("bike-dataset:latest")

返されたオブジェクトを使用して、Artifacts のすべてのコンテンツをダウンロードします。

datadir = artifact.download()

オプションで、ルートパラメータにパスを渡して、Artifacts のコンテンツを特定のディレクトリーにダウンロードできます。詳細については、Python SDK Reference Guideを参照してください。

get_path メソッドを使用して、ファイルのサブセットのみをダウンロードします。

path = artifact.get_path(name)

これは、パス name にあるファイルのみをフェッチします。これは、次のメソッドを持つ Entry オブジェクトを返します。

  • Entry.download: パス name にある Artifacts からファイルをダウンロードします
  • Entry.ref: add_reference がエントリをリファレンスとして保存した場合、URI を返します

W&B が処理する方法を知っているスキームを持つリファレンスは、Artifacts ファイルとまったく同じようにダウンロードされます。詳細については、Track external filesを参照してください。

まず、W&B SDK をインポートします。次に、Public API クラスから Artifacts を作成します。その Artifacts に関連付けられたエンティティ、プロジェクト、Artifacts、エイリアスを指定します。

import wandb

api = wandb.Api()
artifact = api.artifact("entity/project/artifact:alias")

返されたオブジェクトを使用して、Artifacts のコンテンツをダウンロードします。

artifact.download()

オプションで、root パラメータにパスを渡して、Artifacts のコンテンツを特定のディレクトリーにダウンロードできます。詳細については、API Reference Guideを参照してください。

wandb artifact get コマンドを使用して、W&B サーバーから Artifacts をダウンロードします。

$ wandb artifact get project/artifact:alias --root mnist/

Artifacts の部分的なダウンロード

オプションで、プレフィックスに基づいて Artifacts の一部をダウンロードできます。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 ディレクトリー内のファイルをダウンロードします

別のプロジェクトの Artifacts の使用

Artifacts の名前をプロジェクト名とともに指定して、Artifacts を参照します。エンティティ名とともに Artifacts の名前を指定することで、エンティティ間で Artifacts を参照することもできます。

次のコード例は、別のプロジェクトから Artifacts をクエリして、現在の W&B run への入力として使用する方法を示しています。

import wandb

run = wandb.init(project="<example>", job_type="<job-type>")
# 別のプロジェクトから Artifacts の W&B をクエリして、それをマークします
# この run への入力として。
artifact = run.use_artifact("my-project/artifact:alias")

# 別のエンティティからの Artifacts を使用して、入力としてマークします
# この run に。
artifact = run.use_artifact("my-entity/my-project/artifact:alias")

Artifacts の同時構築と使用

Artifacts を同時に構築して使用します。Artifacts オブジェクトを作成し、それを use_artifact に渡します。これにより、Artifacts がまだ存在しない場合は W&B に作成されます。use_artifact API はべき等であるため、必要な回数だけ呼び出すことができます。

import wandb

artifact = wandb.Artifact("reference model")
artifact.add_file("model.h5")
run.use_artifact(artifact)

Artifacts の構築の詳細については、Construct an artifactを参照してください。

3 - Update an artifact

W&B Run の内外で既存の Artifact を更新します。

Artifact の descriptionmetadata、および alias を更新するために希望する value を渡します。W&B サーバー上の Artifact を更新するには、save() メソッドを呼び出します。W&B の Run 中または Run の外部で Artifact を更新できます。

Run の外部で Artifact を更新するには、W&B Public API(wandb.Api)を使用します。Run 中に Artifact を更新するには、Artifact API(wandb.Artifact)を使用します。

次のコード例は、wandb.Artifact API を使用して、Artifact の description を更新する方法を示しています。

import wandb

run = wandb.init(project="<example>")
artifact = run.use_artifact("<artifact-name>:<alias>")
artifact.description = "<description>"
artifact.save()

次のコード例は、wandb.Api API を使用して、Artifact の description を更新する方法を示しています。

import wandb

api = wandb.Api()

artifact = api.artifact("entity/project/artifact:alias")

# description を更新
artifact.description = "My new description"

# 選択的に metadata の キー を更新
artifact.metadata["oldKey"] = "new value"

# metadata を完全に置き換え
artifact.metadata = {"newKey": "new value"}

# エイリアス を追加
artifact.aliases.append("best")

# エイリアス を削除
artifact.aliases.remove("latest")

# エイリアス を完全に置き換え
artifact.aliases = ["replaced"]

# すべての Artifact の変更を永続化
artifact.save()

詳細については、Weights and Biases Artifact API を参照してください。

単一の Artifact と同じ方法で、Artifact のコレクションを更新することもできます。

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 - Create an artifact alias

W&B Artifacts のカスタムエイリアスを作成します。

エイリアス を使用して、特定の バージョン へのポインタとして使用します。デフォルトでは、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 - Create an artifact version

単一の run 、または分散された プロセス から新しい アーティファクト の バージョン を作成します。

単一の run で、または分散されたrunと共同で、新しいアーティファクトのバージョンを作成します。オプションで、インクリメンタルアーティファクト として知られる、以前のバージョンから新しいアーティファクトのバージョンを作成できます。

新しいアーティファクトのバージョンをゼロから作成する

新しいアーティファクトのバージョンを作成する方法は2つあります。単一のrunから作成する方法と、分散されたrunから作成する方法です。それらは次のように定義されます。

  • 単一のrun: 単一のrunは、新しいバージョンのすべてのデータを提供します。これは最も一般的なケースであり、runが必要なデータを完全に再作成する場合に最適です。例:分析のために保存されたモデルまたはモデルの予測をテーブルに出力するなど。
  • 分散されたrun: runのセットが集合的に新しいバージョンのすべてのデータを提供します。これは、多くの場合並行してデータを生成する複数のrunを持つ分散ジョブに最適です。例:分散方式でモデルを評価し、予測を出力するなど。

W&B は、プロジェクトに存在しない名前を wandb.Artifact API に渡すと、新しいアーティファクトを作成し、v0 エイリアスを割り当てます。同じアーティファクトに再度ログを記録すると、W&B はコンテンツのチェックサムを計算します。アーティファクトが変更された場合、W&B は新しいバージョン v1 を保存します。

wandb.Artifact API に名前とアーティファクトのタイプを渡し、それがプロジェクト内の既存のアーティファクトと一致する場合、W&B は既存のアーティファクトを取得します。取得されたアーティファクトのバージョンは1より大きくなります。

単一のrun

アーティファクト内のすべてのファイルを生成する単一のrunで、Artifactの新しいバージョンをログに記録します。このケースは、単一の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`、`.add_file`、`.add_dir`、および `.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`、`.add_file`、`.add_dir`、および `.add_reference` を使用して、
# ファイルとアセットをアーティファクトに追加します
artifact.add_file("image1.png")
artifact.save()

分散されたrun

コミットする前に、runのコレクションがバージョンで共同作業できるようにします。これは、1つのrunが新しいバージョンのすべてのデータを提供する上記の単一runモードとは対照的です。

次の例を検討してください。異なるrun(以下では Run 1Run 2、および Run 3 としてラベル付け)は、upsert_artifact で同じアーティファクトに異なる画像ファイルを追加します。

Run 1:

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.upsert_artifact(artifact, distributed_id="my_dist_artifact")

Run 2:

with wandb.init() as run:
    artifact = wandb.Artifact("artifact_name", "artifact_type")
    # `.add`、`.add_file`、`.add_dir`、および `.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`、`.add_file`、`.add_dir`、および `.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="データセットの変更") as run:
    saved_artifact = run.use_artifact(
        "my_artifact:latest"
    )  # アーティファクトをフェッチしてrunに入力します
    draft_artifact = saved_artifact.new_draft()  # ドラフトバージョンを作成します

    # ドラフトバージョン内のファイルのサブセットを変更します
    draft_artifact.add_file("file_to_add.txt")
    draft_artifact.remove("dir_to_remove/")
    run.log_artifact(
        artifact
    )  # 変更をログに記録して新しいバージョンを作成し、runへの出力としてマークします
client = wandb.Api()
saved_artifact = client.artifact("my_artifact:latest")  # アーティファクトをロードします
draft_artifact = saved_artifact.new_draft()  # ドラフトバージョンを作成します

# ドラフトバージョン内のファイルのサブセットを変更します
draft_artifact.remove("deleted_file.txt")
draft_artifact.add_file("modified_file.txt")
draft_artifact.save()  # ドラフトへの変更をコミットします

6 - Track external files

W&B の外部に保存されたファイル (Amazon S3 バケット 、GCS バケット 、HTTP ファイル サーバー 、NFS 共有など) を追跡します。

参照 Artifacts を使用して、W&Bシステム外に保存されたファイル(例えば、Amazon S3 バケット、GCS バケット、Azure Blob、HTTP ファイルサーバー、あるいは NFS 共有など)を追跡します。W&B CLIを使用し、W&B Runの外で Artifacts をログ記録します。

run の外で Artifacts をログ記録する

run の外で Artifact をログ記録すると、W&B は run を作成します。各 Artifact は run に属し、その run は プロジェクト に属します。Artifact(バージョン)はコレクションにも属し、タイプを持ちます。

wandb artifact put コマンドを使用すると、W&B run の外で Artifact を W&B サーバーにアップロードできます。Artifact が属する プロジェクト の名前と Artifact の名前(project/artifact_name)を指定します。オプションで、タイプ(TYPE)を指定します。以下のコードスニペットの PATH を、アップロードする Artifact のファイルパスに置き換えます。

$ wandb artifact put --name project/artifact_name --type TYPE PATH

指定した プロジェクト が存在しない場合、W&B は新しい プロジェクト を作成します。Artifact のダウンロード方法については、Artifacts のダウンロードと使用を参照してください。

W&B の外で Artifacts を追跡する

W&B Artifacts を使用して、データセット の バージョン管理 と モデルリネージ を行い、参照 Artifacts を使用して W&B サーバーの外に保存されたファイルを追跡します。このモードでは、Artifact は URL、サイズ、チェックサムなどのファイルに関する メタデータ のみを保存します。基になる データ がシステムから離れることはありません。ファイルを W&B サーバーに保存する方法については、クイックスタートを参照してください。

以下では、参照 Artifacts を構築する方法と、ワークフロー に組み込む最適な方法について説明します。

Amazon S3 / GCS / Azure Blob Storage 参照

W&B Artifacts を使用して、データセット と モデル の バージョン管理 を行い、クラウド ストレージ バケット内の参照を追跡します。Artifact の参照を使用すると、既存のストレージ レイアウトを変更することなく、シームレスに追跡を バケット の上に重ねることができます。

Artifacts は、基盤となるクラウド ストレージ ベンダー(AWS、GCP、Azure など)を抽象化します。以下のセクションで説明する情報は、Amazon S3、Google Cloud Storage、Azure Blob Storage に均一に適用されます。

次の構造の バケット があると仮定します。

s3://my-bucket
+-- datasets/
| +-- mnist/
+-- models/
 +-- cnn/

mnist/ の下には、画像のコレクションである データセット があります。これを Artifact で追跡してみましょう。

import wandb

run = wandb.init()
artifact = wandb.Artifact("mnist", type="dataset")
artifact.add_reference("s3://my-bucket/datasets/mnist")
run.log_artifact(artifact)

新しい参照 Artifact mnist:latest は、通常の Artifact と同様に見え、動作します。唯一の違いは、Artifact が S3/GCS/Azure オブジェクト に関する メタデータ (ETag、サイズ、オブジェクト の バージョン管理 が バケット で有効になっている場合は バージョン ID など)のみで構成されていることです。

W&B は、使用している クラウド プロバイダー に基づいて、認証情報 を検索するためのデフォルトのメカニズムを使用します。使用する認証情報 の詳細については、 クラウド プロバイダー の ドキュメント を参照してください。

クラウド プロバイダー 認証情報 の ドキュメント
AWS Boto3 documentation
GCP Google Cloud documentation
Azure Azure documentation

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

この Artifact は、通常の Artifact と同様に操作します。App UI では、ファイル ブラウザー を使用して参照 Artifact のコンテンツ を調べたり、完全な依存関係グラフ を調べたり、Artifact の バージョン管理 された履歴をスキャンしたりできます。

参照 Artifact をダウンロードする

import wandb

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

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

統合する

次のコード例は、Amazon S3、GCS、または Azure で データセット を追跡するために使用できる簡単な ワークフロー を示しています。

import wandb

run = wandb.init()

artifact = wandb.Artifact("mnist", type="dataset")
artifact.add_reference("s3://my-bucket/datasets/mnist")

# Artifact を追跡し、この run への入力としてマークします。
# バケット 内のファイル が変更された場合にのみ、新しい Artifact バージョン がログ記録されます。
run.use_artifact(artifact)

artifact_dir = artifact.download()

# ここで トレーニング を実行します...

モデル を追跡するために、 トレーニング スクリプト が モデル ファイル を バケット にアップロードした後、 モデル Artifact をログ記録できます。

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)

ファイルシステム 参照

データセット に 高速 に アクセス するためのもう 1 つの一般的なパターンは、すべての トレーニング ジョブ を実行しているマシンでリモート ファイルシステム に NFS マウント ポイント を公開することです。トレーニング スクリプト の観点から見ると、ファイル がローカル ファイルシステム にあるように見えるため、これは クラウド ストレージ バケット よりもさらに簡単なソリューションになる可能性があります。幸いなことに、その使いやすさは、ファイルシステム への参照を追跡するために Artifacts を使用することにも拡張されます(マウントされているかどうかに関係なく)。

次の構造のファイルシステム が /mount にマウントされていると仮定します。

mount
+-- datasets/
| +-- mnist/
+-- models/
 +-- cnn/

mnist/ の下には、画像のコレクションである データセット があります。これを Artifact で追跡してみましょう。

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 には 3 つのスラッシュ があることに注意してください。最初のコンポーネント は、ファイルシステム 参照の使用を示す file:// プレフィックス です。2 番目のコンポーネント は、 データセット へのパス /mount/datasets/mnist/ です。

結果として得られる Artifact mnist:latest は、通常の Artifact と同じように見え、動作します。唯一の違いは、Artifact がファイル に関する メタデータ (サイズ や MD5 チェックサム など)のみで構成されていることです。ファイル 自体がシステムから離れることはありません。

この Artifact は、通常の Artifact と同じように操作できます。UI では、ファイル ブラウザー を使用して参照 Artifact のコンテンツ を参照したり、完全な依存関係グラフ を調べたり、Artifact の バージョン管理 された履歴をスキャンしたりできます。ただし、 データ 自体が Artifact に含まれていないため、UI は画像 やオーディオ などのリッチ メディア を レンダリング できません。

参照 Artifact のダウンロードは簡単です。

import wandb

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

ファイルシステム 参照の場合、download() 操作は参照されたパスからファイルをコピーして Artifact ディレクトリー を構築します。上記の例では、/mount/datasets/mnist のコンテンツ が ディレクトリー artifacts/mnist:v0/ にコピーされます。Artifact に上書きされたファイル への参照が含まれている場合、Artifact を再構築できなくなるため、download() は エラー をスローします。

すべてをまとめると、マウントされたファイルシステム の下にある データセット を追跡するために使用できる簡単な ワークフロー を次に示します。

import wandb

run = wandb.init()

artifact = wandb.Artifact("mnist", type="dataset")
artifact.add_reference("file:///mount/datasets/mnist/")

# Artifact を追跡し、この run への入力としてマークします。
# ディレクトリー の下のファイル が変更された場合にのみ、新しい Artifact バージョン がログ記録されます。
run.use_artifact(artifact)

artifact_dir = artifact.download()

# ここで トレーニング を実行します...

モデル を追跡するために、 トレーニング スクリプト が モデル ファイル をマウント ポイント に書き込んだ後、 モデル Artifact をログ記録できます。

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 - Manage data

7.1 - Delete an artifact

App UI を使用してインタラクティブに、または W&B SDK を使用してプログラム的に Artifacts を削除します。

App UIまたは W&B SDK を使用して、アーティファクトをインタラクティブに、またはプログラムで削除できます。アーティファクトを削除すると、W&B はそのアーティファクトを 論理削除 としてマークします。つまり、アーティファクトは削除対象としてマークされますが、ファイルはストレージからすぐに削除されるわけではありません。

アーティファクトの内容は、論理削除、つまり削除保留状態のままとなり、定期的に実行されるガベージコレクション プロセスが、削除対象としてマークされたすべてのアーティファクトを確認します。ガベージコレクション プロセスは、アーティファクトとその関連ファイルが、以前または以降のアーティファクト バージョンで使用されていない場合、ストレージから関連ファイルを削除します。

このページのセクションでは、特定のアーティファクト バージョンを削除する方法、アーティファクト コレクションを削除する方法、エイリアスを使用または使用せずにアーティファクトを削除する方法などについて説明します。アーティファクトが W&B から削除されるタイミングは、TTL ポリシーでスケジュールできます。詳細については、アーティファクト TTL ポリシーによるデータ保持の管理 を参照してください。

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

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

  1. アーティファクトの名前を選択します。これにより、アーティファクト ビューが展開され、そのアーティファクトに関連付けられているすべてのアーティファクト バージョンが一覧表示されます。
  2. アーティファクトのリストから、削除するアーティファクト バージョンを選択します。
  3. ワークスペースの右側にあるケバブ ドロップダウンを選択します。
  4. 削除を選択します。

アーティファクト バージョンは、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():
    # 1つ以上エイリアスを持つ
    # アーティファクトを削除するには
    # delete_aliases=True を設定します
    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() メソッドを使用して、プログラムでアーティファクト コレクションを削除することもできます。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

7.2 - Manage artifact data retention

Time to live ポリシー (TTL)

W&B Artifact time-to-live(TTL)ポリシーを使用して、Artifacts が W&B から削除されるタイミングをスケジュールします。アーティファクトを削除すると、W&B はそのアーティファクトを ソフト削除 としてマークします。つまり、アーティファクトは削除対象としてマークされますが、ファイルはストレージからすぐに削除されるわけではありません。W&B が Artifacts を削除する方法の詳細については、Artifacts の削除 ページを参照してください。

W&B アプリで Artifacts TTL を使用してデータ保持を管理する方法については、こちらのビデオチュートリアルをご覧ください。

自動生成された Artifacts

ユーザーが生成した Artifacts のみ、TTL ポリシーを使用できます。W&B によって自動生成された Artifacts は、TTL ポリシーを設定できません。

次の Artifact の種類は、自動生成された Artifact を示します。

  • run_table
  • code
  • job
  • wandb-* で始まる任意の Artifact の種類

W&B プラットフォームで、またはプログラムで Artifact の種類を確認できます。

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 time-to-live (TTL) section] に移動します。
  4. [TTL permissions dropdown] で、TTL ポリシーを設定および編集できるユーザーを選択します。
  5. [Review and save settings] をクリックします。
  6. 変更を確認し、[Save settings] を選択します。

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. アーティファクトのリストから、TTL ポリシーを編集するアーティファクトの種類を展開します。
  4. TTL ポリシーを編集するアーティファクトバージョンを選択します。
  5. [バージョン] タブをクリックします。
  6. ドロップダウンから [TTL ポリシーの編集] を選択します。
  7. 表示されるモーダル内で、TTL ポリシードロップダウンから [カスタム] を選択します。
  8. [TTL 期間] フィールドに、TTL ポリシーを日数単位で設定します。
  9. [TTL の更新] ボタンを選択して、変更を保存します。

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

チームのデフォルト TTL ポリシーを設定します。デフォルト TTL ポリシーは、それぞれの作成日に基づいて、既存および将来のすべてのアーティファクトに適用されます。既存のバージョンレベルの TTL ポリシーを持つアーティファクトは、チームのデフォルト TTL の影響を受けません。

  1. チームのプロファイルページに移動します。
  2. [設定] タブを選択します。
  3. [Artifacts time-to-live (TTL) section] に移動します。
  4. [チームのデフォルト TTL ポリシーを設定] をクリックします。
  5. [期間] フィールドに、TTL ポリシーを日数単位で設定します。
  6. [Review and save settings] をクリックします。
  7. 変更を確認し、[Save settings] を選択します。

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. アーティファクトのリストから、TTL ポリシーを編集するアーティファクトの種類を展開します。
  4. TTL ポリシーを編集するアーティファクトバージョンを選択します。
  5. [バージョン] タブをクリックします。
  6. [レジストリへのリンク] ボタンの横にあるミートボール UI アイコンをクリックします。
  7. ドロップダウンから [TTL ポリシーの編集] を選択します。
  8. 表示されるモーダル内で、TTL ポリシードロップダウンから [非アクティブ化] を選択します。
  9. [TTL の更新] ボタンを選択して、変更を保存します。

TTL ポリシーを表示する

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. https://wandb.ai で W&B アプリに移動します。
  2. W&B プロジェクトに移動します。
  3. プロジェクト内で、左側のサイドバーにある [Artifacts] タブを選択します。
  4. コレクションをクリックします。

コレクションビュー内では、選択したコレクション内のすべてのアーティファクトを表示できます。[Time to Live] 列には、そのアーティファクトに割り当てられた TTL ポリシーが表示されます。

7.3 - Manage artifact storage and memory allocation

W&B Artifacts のストレージ、メモリアロケーションを管理します。

W&B は artifact ファイルを、デフォルトで米国にあるプライベートな Google Cloud Storage バケットに保存します。すべてのファイルは、保存時および転送時に暗号化されます。

機密性の高いファイルについては、Private Hosting をセットアップするか、reference artifacts を使用することをお勧めします。

トレーニング中、W&B はログ、アーティファクト、および設定ファイルを次のローカルディレクトリーにローカルに保存します。

ファイル デフォルトの場所 デフォルトの場所を変更するには、以下を設定します:
ログ ./wandb wandb.initdir 、または WANDB_DIR 環境変数を設定
artifacts ~/.cache/wandb WANDB_CACHE_DIR 環境変数
configs ~/.config/wandb WANDB_CONFIG_DIR 環境変数
アップロード用に artifacts をステージング ~/.cache/wandb-data/ WANDB_DATA_DIR 環境変数
ダウンロードされた artifacts ./artifacts WANDB_ARTIFACT_DIR 環境変数

環境変数を使用して W&B を構成するための完全なガイドについては、環境変数のリファレンスを参照してください。

ローカル artifact キャッシュのクリーンアップ

W&B は artifact ファイルをキャッシュして、ファイルを共有する バージョン 間でのダウンロードを高速化します。時間の経過とともに、このキャッシュディレクトリーが大きくなる可能性があります。wandb artifact cache cleanup コマンドを実行して、キャッシュを削除し、最近使用されていないファイルを削除します。

次のコードスニペットは、キャッシュのサイズを 1GB に制限する方法を示しています。コードスニペットをコピーして ターミナル に貼り付けます。

$ wandb artifact cache cleanup 1GB

8 - Explore artifact graphs

自動的に作成された有向非巡回 W&B Artifact グラフをトラバースします。

W&B は、特定の run が ログに記録した Artifacts と、特定の run が使用する Artifacts を自動的に追跡します。これらの Artifacts には、データセット、モデル、評価結果などが含まれます。Artifacts のリネージを調べることで、機械学習のライフサイクル全体で生成されるさまざまな Artifacts を追跡および管理できます。

リネージ

Artifacts のリネージを追跡することには、いくつかの重要な利点があります。

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

  • バージョン管理: Artifacts のリネージには、Artifacts のバージョン管理と、時間の経過に伴う変更の追跡が含まれます。これにより、チームは必要に応じてデータまたはモデルの以前のバージョンにロールバックできます。

  • 監査: Artifacts とその変換の詳細な履歴を持つことで、組織は規制およびガバナンスの要件を遵守できます。

  • コラボレーションと知識の共有: Artifacts のリネージは、試行錯誤の明確な記録を提供することにより、チームメンバー間のより良いコラボレーションを促進します。これは、努力の重複を回避し、開発プロセスを加速するのに役立ちます。

Artifacts のリネージの検索

[Artifacts] タブで Artifacts を選択すると、Artifacts のリネージを確認できます。このグラフビューには、パイプラインの概要が表示されます。

Artifacts グラフを表示するには:

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

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

指定した Artifacts またはジョブタイプが名前の前に表示され、Artifacts は青いアイコンで、runs は緑のアイコンで表示されます。矢印は、グラフ上の run または Artifacts の入出力を詳細に示します。

Run and artifact nodes Inputs and outputs

より詳細なビューを表示するには、個々の Artifacts または run をクリックして、特定のオブジェクトに関する詳細情報を取得します。

Previewing a run

Artifacts クラスター

グラフのレベルに 5 つ以上の runs または Artifacts がある場合、クラスターが作成されます。クラスターには、runs または Artifacts の特定の バージョン を検索するための検索バーがあり、クラスターから個々のノードをプルして、クラスター内のノードのリネージの調査を続行します。

ノードをクリックすると、ノードの概要を示すプレビューが開きます。矢印をクリックすると、個々の run または Artifacts が抽出され、抽出されたノードのリネージを調べることができます。

Searching a run cluster

API を使用してリネージを追跡する

W&B APIを使用してグラフをナビゲートすることもできます。

Artifacts を作成します。まず、wandb.init で run を作成します。次に、wandb.Artifact で新しい Artifacts を作成するか、既存の Artifacts を取得します。次に、.add_file で Artifacts にファイルを追加します。最後に、.log_artifact で Artifacts を 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)

Artifacts オブジェクトの logged_by メソッドと used_by メソッドを使用して、Artifacts からグラフをたどります。

# Walk up and down the graph from an artifact:
producer_run = artifact.logged_by()
consumer_runs = artifact.used_by()

次のステップ

9 - Artifact data privacy and compliance

W&B のファイルがデフォルトでどこに保存されるかについて学びましょう。機密情報の保存、保存方法について説明します。

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

GCS W&B Client Server diagram

Artifact の バージョン を削除すると、 データベース 内でソフト削除としてマークされ、ストレージコストから削除されます。Artifact 全体を削除すると、 完全に削除されるようにキューに入れられ、そのすべてのコンテンツが W&B バケット から削除されます。ファイルの削除に関して特別なニーズがある場合は、カスタマーサポートまでご連絡ください。

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

W&B Client Server Cloud diagram

Reference artifact は、非 Reference artifact を作成するのと同じように作成します。

import wandb

run = wandb.init()
artifact = wandb.Artifact("animals", type="dataset")
artifact.add_reference("s3://my-bucket/animals")

代替案については、contact@wandb.com までお問い合わせいただき、 プライベートクラウド および オンプレミス のインストールについてご相談ください。

10 - Tutorial: Create, track, and use a dataset artifact

Artifacts クイックスタート では、W&B で データセット artifact を作成、追跡、使用する方法を紹介します。

このチュートリアルでは、W&B Runsからデータセット Artifactsを作成、追跡、および使用する方法を示します。

1. W&Bにログイン

W&Bライブラリをインポートし、W&Bにログインします。まだお持ちでない場合は、無料のW&Bアカウントにサインアップする必要があります。

import wandb

wandb.login()

2. runを初期化

wandb.init() APIを使用して、W&B Runとしてデータを同期および記録するためのバックグラウンド プロセスを生成します。 project名とジョブタイプを指定します。

# W&B Runを作成します。この例では、データセット Artifactsの作成方法を示すため、ジョブタイプとして「dataset」を指定します。
run = wandb.init(project="artifacts-example", job_type="upload-dataset")

3. artifact オブジェクトを作成

wandb.Artifact() APIを使用して、artifact オブジェクトを作成します。 artifactの名前とファイルタイプの記述を、それぞれname パラメータと type パラメータに指定します。

たとえば、次のコードスニペットは、‘bicycle-dataset’ という名前で ‘dataset’ というラベルの artifact を作成する方法を示しています。

artifact = wandb.Artifact(name="bicycle-dataset", type="dataset")

artifact の構成方法の詳細については、Artifactsの構築を参照してください。

データセットを artifact に追加

artifact にファイルを追加します。一般的なファイルタイプには、Models や Datasets などがあります。次の例では、マシンにローカルに保存されている dataset.h5 という名前のデータセットを artifact に追加します。

# ファイルをartifactのコンテンツに追加します。
artifact.add_file(local_path="dataset.h5")

上記のコードスニペットのファイル名 dataset.h5 を、artifact に追加するファイルへのパスに置き換えます。

4. データセットをログに記録

W&B run オブジェクトの log_artifact() メソッドを使用して、artifact のバージョンを保存し、artifact を run の出力として宣言します。

# artifact のバージョンを W&B に保存し、この run の出力としてマークします。
run.log_artifact(artifact)

artifact をログに記録すると、デフォルトで 'latest' エイリアスが作成されます。 artifact のエイリアスとバージョンの詳細については、カスタムエイリアスを作成する新しい artifact バージョンを作成するをそれぞれ参照してください。

5. artifact をダウンロードして使用する

次のコード例は、W&B サーバーにログして保存した artifact を使用するために実行できる手順を示しています。

  1. まず、wandb.init() を使用して新しい run オブジェクトを初期化します。
  2. 次に、run オブジェクトの use_artifact() メソッドを使用して、使用する artifact を W&B に指示します。 これにより、artifact オブジェクトが返されます。
  3. 3 番目に、artifact の download() メソッドを使用して、artifact のコンテンツをダウンロードします。
# W&B Runを作成します。ここでは、この run をトレーニングの追跡に使用するため、'type' に 'training' を指定します。
run = wandb.init(project="artifacts-example", job_type="training")

# W&B に artifact を照会し、この run への入力としてマークします。
artifact = run.use_artifact("bicycle-dataset:latest")

# artifact のコンテンツをダウンロードします
artifact_dir = artifact.download()

または、パブリック API(wandb.Api)を使用して、Run の外部にある W&B にすでに保存されているデータをエクスポート(または更新)できます。 詳細については、外部ファイルを追跡するを参照してください。