メインコンテンツまでスキップ

アーティファクトFAQ

以下の質問は、W&B ArtifactsおよびW&B Artifactワークフローに関してよくある質問です。

アーティファクトに関する質問

アーティファクトのファイルはいつ削除されますか?

W&Bは、上記のように、連続するアーティファクトのバージョン間での重複を最小限に抑える方法でアーティファクトのファイルを保存しています。

アーティファクトのバージョンを削除する際、W&Bは完全に削除が安全なファイルをチェックします。つまり、そのファイルが以前のアーティファクトのバージョンまたは後続のアーティファクトのバージョンで使用されていないことを保証します。削除が安全である場合、ファイルは直ちに削除され、当社のサーバーにはその痕跡は残りません。

誰が私のアーティファクトにアクセスできますか?

アーティファクトは、親プロジェクトのアクセス権を継承します。

  • プロジェクトがプライベートの場合、プロジェクトのチームのメンバーのみがそのアーティファクトにアクセスできます。
  • 公開プロジェクトの場合、すべてのユーザーはアーティファクトへの読み取りアクセスがありますが、プロジェクトのチームのメンバーのみがそれらを作成または変更できます。
  • オープンプロジェクトの場合、すべてのユーザーはアーティファクトへの読み書きアクセスがあります。

アーティファクトのワークフローに関する質問

このセクションでは、アーティファクトの管理と編集のワークフローについて説明します。これらのワークフローの多くは、W&Bで保存されたデータにアクセスを提供するクライアントライブラリのコンポーネントであるW&B APIを使用しています。

既存のランにアーティファクトをログする方法は?

たまに、アーティファクトを以前にログしたランの出力としてマークしたい場合があります。そのようなシナリオでは、古いランを再初期化して、以下のように新しいアーティファクトをログすることができます。

with wandb.init(id="existing_run_id", resume="allow") as run:
artifact = wandb.Artifact("artifact_name", "artifact_type")
artifact.add_file("my_data/file.txt")
run.log_artifact(artifact)

ランでログしたアーティファクトを検索したり、ランが利用したアーティファクトを検索したりする方法はありますか? アーティファクトを生成または使用したランを検索する方法は?

W&Bは、ランがログしたアーティファクトと、ランが使用したアーティファクトを自動的にトラッキングし、その情報をもとに、ランとアーティファクトで構成される二部有向非循環グラフであるアーティファクトグラフを構築します。こちらのグラフのようなグラフです(フルグラフを見るには、「Explode」をクリックしてください)。

このグラフは、ランまたはアーティファクトから始めて、Public APIを使ってプログラムで探索することができます。

api = wandb.Api()

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

# アーティファクトからグラフを遡る:
producer_run = artifact.logged_by()
# アーティファクトからグラフをたどる:
consumer_runs = artifact.used_by()

# runからグラフをたどる:
next_artifacts = consumer_runs[0].logged_artifacts()
# runからグラフを遡る:
previous_artifacts = producer_run.used_artifacts()

スイープ内のrunsからモデルを最適にログする方法は?

sweep内でモデルをログする効果的な方法の1つは、スイープのモデルアーティファクトを持ち、バージョンがスイープからの異なるrunsに対応するようにすることです。具体的には、次のようになります。

wandb.Artifact(name="sweep_name", type="model")

スイープ内の最適なrunからアーティファクトを見つける方法は?

以下のコードを使用して、スイープ内で最も性能の良いrunに関連付けられたアーティファクトを取得できます。

api = wandb.Api()
sweep = api.sweep("entity/project/sweep_id")
runs = sorted(sweep.runs, key=lambda run: run.summary.get("val_acc", 0), reverse=True)
best_run = runs[0]
for artifact in best_run.logged_artifacts():
artifact_path = artifact.download()
print(artifact_path)

コードを保存する方法は?

wandb.initsave_code=Trueを使用して、runを開始するメインスクリプトまたはノートブックを保存します。すべてのコードをrunに保存するには、アーティファクトを使ってコードをバージョン管理します。以下に例を示します。

code_artifact = wandb.Artifact(type="code")

code_artifact.add_file("./train.py")

wandb.log_artifact(code_artifact)

複数のアーキテクチャーとrunsを使ったアーティファクトの使い方

モデルのバージョンを考える方法は多くありますが、アーティファクトはモデルのバージョン管理を自分で実装するためのツールを提供します。複数のモデルアーキテクチャーを探求し、いくつかのrunsでアーティファクトをアーキテクチャーごとに分ける典型的なパターンがあります。例えば以下のように行うことができます。

  1. 異なるモデルアーキテクチャーごとに新しいアーティファクトを作成します。アーティファクトのmetadata属性を使って、アーキテクチャーをより詳細に記述できます(runのconfigを使うのと同様に)。

  2. 各モデルのチェックポイントをlog_artifactで定期的に記録します。W&Bは自動的にこれらのチェックポイントの履歴を構築し、最新のチェックポイントをlatestエイリアスで注釈付けします。これにより、任意のモデルアーキテクチャの最新のチェックポイントをarchitecture-name:latestで参照できます。

アーティファクト参照FAQ

W&BでこれらのバージョンIDとETagsをどのように取得できますか?

W&Bでアーティファクト参照をログし、バケットでバージョン管理が有効になっている場合、バージョンIDはS3 UIで表示できます。W&BでこれらのバージョンIDとETagsを取得するには、公開API を使って対応するマニフェストエントリを取得できます。例えば以下のようになります。

artifact = run.use_artifact("my_table:latest")

for entry in artifact.manifest.entries.values():
versionID = entry.extra.get("versionID")

etag = manifest_entry.extra.get("etag")
Was this page helpful?👍👎