Artifacts FAQs
以下の質問は W&B Artifacts と W&B Artifact ワークフロー についてよくある質問です。
Questions about Artifacts
自分の artifacts には誰がアクセスできますか?
Artifacts は親プロジェクトのアクセス権を継承します:
- プロジェクトが非公開の場合、そのプロジェクトのチームメンバーのみが artifacts にアクセスできます。
- 公開プロジェクトの場合、すべてのユーザーが artifacts を読み取るアクセス権を持ちますが、作成や変更ができるのはプロジェクトのチームメンバーのみです。
- オープンプロジェクトの場合、すべてのユーザーが artifacts を読み書きできます。
Questions about Artifacts workflows
このセクションでは Artifacts の管理と編集に関するワークフローについて説明します。多くのワークフローでは W&B API を使用します。これは 我々のクライアントライブラリ のコンポーネントで、W&B に保存されているデータへのアクセスを提供します。
既存の run に artifact をログするにはどうすれば良いですか?
時折、以前にログした run の出力として artifact をマークしたい場合があります。その場合、古い run を 再初期化 して新しい artifacts をログできます。次のように行います:
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)
アーティファクトに保存期限または削除ポリシーを設定するにはどうすれば良いですか?
PII を含むデータセットアーティファクトなど、データプライバシー規制の対象となる artifacts がある場合や、ストレージ管理のためにアーティファクトのバージョンの削除をスケジュールしたい場合は、TTL(タイム・トゥ・リブ)ポリシーを設定できます。詳細は こちら のガイドを参照してください。
run がログしたまたは消費した artifacts をどのように見つけることができますか? また、それらの artifacts を生成または消費した run をどのように見つけることができますか?
W&B は特定の run がログした artifacts と使用した artifacts を自動的に追跡し、その情報を使用してアーティファクトグラフを構築します。これは、ノードが runs と artifacts である二部的有向非巡回グラフです。このグラフは こちら (「Explode」をクリックするとグラフ全体が表示されます)などがあります。
このグラフは Public API を使ってプログラム的にナビゲートできます。run または artifact から始めることができます。
- From an Artifact
- From a Run
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()
api = wandb.Api()
run = api.run("entity/project/run_id")
# run からグラフを下方に移動:
produced_artifacts = run.logged_artifacts()
# run からグラフを上方に移動:
consumed_artifacts = run.used_artifacts()
# アーティファクトからグラフを上方に移動:
earlier_run = consumed_artifacts[0].logged_by()
# アーティファクトからグラフを下方に移動:
consumer_runs = produced_artifacts[0].used_by()
sweep の run からモデルを最適にログする方法は?
sweep のモデルをログする効果的なパターンの一つは、sweep のモデルアーティファクトを持ち、そのバージョンが sweep の異なる runs に対応するようにすることです。具体的には、次のようにします:
wandb.Artifact(name="sweep_name", type="model")
sweep の最適な run からアーティファクトを見つけるにはどうすれば良いですか?
以下のコードを使用して、sweep で最良のパフォーマンスを示す run に関連する artifacts を取得できます:
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.init
に save_code=True
を使用して、run を起動しているメインスクリプトやノートブックを保存します。すべてのコードを run に保存するには、Artifacts を使用してコードをバージョン管理します。以下はその例です:
code_artifact = wandb.Artifact(type="code")
code_artifact.add_file("./train.py")
wandb.log_artifact(code_artifact)
複数のアーキテクチャと runs で artifacts を使用するには?
モデルのバージョン管理には様々な方法があります。Artifacts はあなたが適切だと思う方法でモデルのバージョン管理を実装するツールを提供します。複数のモデルアーキテクチャを多数の runs にわたって探索するプロジェクトの場合、アーキテクチャごとに artifacts を分けるのが一般的なパターンです。例えば、このように行うことができます:
- 異なるモデルアーキテクチャ毎に新しいアーティファクトを作成します。アーティファクトの
metadata
属性を使用してアーキテクチャの詳細を記述します(run でconfig
を使用する方法に似ています)。 - 各モデルに対して、定期的に
log_artifact
を使用してチェックポイントをログします。W&B は自動的にこれらのチェックポイントの履歴を構築し、最も最近のチェックポイントにlatest
エイリアスを付与するので、任意のモデルアーキテクチャに対してarchitecture-name:latest
を使用して最新のチェックポイントを参照できます。
Reference Artifact FAQs
W&B でこれらのバージョンIDとETagを取得するにはどうすればよいですか?
W&B にアーティファクトリファレンスをログし、バケットでバージョン管理が有効になっている場合、バージョンIDは S3 UI で確認できます。これらのバージョンIDとETagを W&B で取得するには、アーティファクトを取得し、対応するマニフェストエントリを取得します。例えば:
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")