メインコンテンツへスキップ
Artifact のバージョンを組織内で利用可能にするには、W&B Registry の コレクションリンク します。リンクすることで、そのバージョンは プライベートなプロジェクトレベルのスコープから、共有された組織レベルのスコープへ 移動します。Artifact バージョンのリンクは、W&B Python SDK を使用してプログラムで行うか、W&B App でインタラクティブに 行うことができます。 Artifact をリンクすると、W&B はソースとなる Artifact とコレクションのエントリの間に参照を作成します。リンクされたバージョンは、プロジェクト内の Run でログに記録されたソースの Artifact バージョンを指します。コレクション内のリンクされたバージョンと、それがログに記録されたプロジェクト内のソースバージョンの両方を確認できます。

Artifact をコレクションにリンクする

ユースケースに合わせて、以下のタブに記載されている手順に従って Artifact バージョンをリンクしてください。
開始する前に、以下を確認してください:
  • そのコレクションが許可している Artifact のタイプ。コレクションのタイプに関する詳細は、コレクションの作成 内の「Collection types」を参照してください。
  • コレクションが属する Registry が既に存在していること。Registry が存在するかどうかを確認するには、Registry App に移動して Registry 名を検索してください。
wandb.Run.link_artifact() または wandb.Artifact.link() を使用して、Artifact バージョンをプログラムでコレクションにリンクします。
Run のコンテキスト内で Artifact バージョンをリンクするには wandb.Run.link_artifact() を使用します。Run のコンテキスト外で 既存の Artifact バージョン をリンクするには wandb.Artifact.link() を使用します。
どちらのアプローチでも、Artifact の名前 (wandb.Artifact(name="<name>")、Artifact のタイプ (wandb.Artifact(type="<type>")、およびリンク先のコレクションと Registry の target_path (wandb.Artifact(target_path="<target_path>") を指定します。ターゲットパスは、プレフィックス "wandb-registry"、Registry 名、およびコレクション名をスラッシュで区切った形式で構成されます。
wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}

Run のコンテキスト内で Artifact バージョンをリンクする

Run のコンテキスト内で Artifact バージョンをリンクするには、wandb.Run.link_artifact() を使用します。これを行うには、まず wandb.init() で Run を初期化します。次に、Artifact オブジェクトを作成してファイルを追加します。最後に、wandb.Run.link_artifact() メソッドを使用して Artifact バージョンをコレクションにリンクします。この方法を使用すると、W&B プロジェクトに Run が作成されます。Artifact バージョンはそのコレクションにリンクされ、その Run に関連付けられます。以下のコードスニペットをコピーして貼り付けてください。<> で囲まれた値はご自身のものに置き換えてください。
import wandb

entity = "<team_entity>"          # チームの entity
project = "<project_name>"        # Artifact を含むプロジェクトの名前

# Run を初期化
with wandb.init(entity = entity, project = project) as run:

  # Artifact オブジェクトを作成
  # type パラメータは Artifact オブジェクトのタイプと
  # コレクションのタイプの両方を指定します
  artifact = wandb.Artifact(name = "<name>", type = "<type>")

  # Artifact オブジェクトにファイルを追加
  # ローカルマシンのファイルへのパスを指定します
  artifact.add_file(local_path = "<local_path_to_artifact>")

  # リンク先のコレクションと Registry を指定
  REGISTRY_NAME = "<registry_name>"  
  COLLECTION_NAME = "<collection_name>"
  target_path=f"wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}"

  # Artifact をコレクションにリンク
  run.link_artifact(artifact = artifact, target_path = target_path)

Run のコンテキスト外で Artifact バージョンをリンクする

Run のコンテキスト外で既存の Artifact バージョンをリンクするには、wandb.Artifact.link() を使用します。この方法では、wandb.init() で Run を初期化する必要はありません。つまり、W&B プロジェクトに Run は作成されません。言い換えると、Artifact バージョンは Run に関連付けられることなくコレクションにリンクされます。まず Artifact オブジェクトを作成し、ファイルを追加します。次に、wandb.Artifact.link() メソッドを使用して Artifact バージョンをコレクションにリンクします。以下のコードスニペットをコピーして貼り付けてください。<> で囲まれた値はご自身のものに置き換えてください。
import wandb

# Artifact オブジェクトを作成
# type パラメータは Artifact オブジェクトのタイプと
# コレクションのタイプの両方を指定します
artifact = wandb.Artifact(name = "<name>", type = "<type>")

# Artifact オブジェクトにファイルを追加
# ローカルマシンのファイルへのパスを指定します
artifact.add_file(local_path = "<local_path_to_artifact>")

# リンク先のコレクションと Registry を指定
REGISTRY_NAME = "<registry_name>"  
COLLECTION_NAME = "<collection_name>"
target_path=f"wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}"

# Artifact をコレクションにリンク
artifact.link(target_path = target_path)
Registry App では、リンクされた Artifact のメタデータ、バージョンデータ、使用状況、リネージ情報などを表示 できます。

Registry でリンクされた Artifact を表示する

W&B Registry で、リンクされた Artifact に関するメタデータ、リネージ、使用状況などの情報を表示できます。
  1. W&B Registry に移動します。
  2. Artifact をリンクした Registry の名前を選択します。
  3. コレクションの名前を選択します。
  4. コレクションの Artifact がメトリクスをログに記録している場合、Show metrics をクリックしてバージョン間でメトリクスを比較できます。
  5. Artifact バージョンのリストから、アクセスしたいバージョンを選択します。バージョン番号は、リンクされた各 Artifact バージョンに対して v0 から順に割り当てられます。
  6. Artifact バージョンの詳細を表示するには、そのバージョンをクリックします。このページのタブから、そのバージョンのメタデータ(ログに記録されたメトリクスを含む)、リネージ、および使用状況情報を表示できます。
Version タブ内の Full Name フィールドをメモしておいてください。リンクされた Artifact のフルネームは、Registry、コレクション名、および Artifact バージョンのエイリアスまたはインデックスで構成されます。
Full name of a linked artifact
wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}:v{INTEGER}
プログラムで Artifact バージョンにアクセスするには、リンクされた Artifact のフルネームが必要です。

トラブルシューティング

Artifact をリンクできない場合に再確認すべき一般的な事項を以下に挙げます。

個人アカウントからの Artifact のログ記録

個人の entity で W&B にログ記録された Artifact は、Registry にリンクできません。必ず組織内のチーム entity を使用して Artifact をログに記録してください。組織の Registry にリンクできるのは、組織のチーム内でログ記録された Artifact のみです。
Registry にリンクしたい場合は、必ずチーム entity で Artifact をログに記録してください。

チーム entity を見つける

W&B はチーム名をチームの entity として使用します。例えば、チーム名が team-awesome の場合、チーム entity は team-awesome になります。 以下の方法でチーム名を確認できます:
  1. チームの W&B プロフィールページに移動します。
  2. サイトの URL をコピーします。https://wandb.ai/<team> の形式になっており、<team> がチーム名とチーム entity の両方を表します。

チーム entity からログを記録する

  1. wandb.init() で Run を初期化する際に、チームを entity として指定します。Run の初期化時に entity を指定しない場合、Run はデフォルトの entity(チーム entity である場合とそうでない場合があります)を使用します。
    import wandb   
    
    with wandb.init(entity='<team_entity>', project='<project_name>') as run:
        # ここで Artifact をログに記録
    
  2. wandb.Run.log_artifact() を使用するか、Artifact オブジェクトを作成して以下の方法でファイルを追加して、Run に Artifact をログ記録します。
    artifact = wandb.Artifact(name="<artifact_name>", type="<type>")
    
    Artifact のログ記録については、Artifact の構築 を参照してください。
  3. Artifact が個人の entity にログ記録されている場合は、組織内の entity に再度ログ記録する必要があります。

W&B App UI で Registry のパスを確認する

UI で Registry のパスを確認する方法は 2 つあります。空のコレクションを作成してコレクションの詳細を表示するか、コレクションのホームページにある自動生成されたコードをコピーして貼り付ける方法です。

自動生成されたコードをコピーして貼り付ける

  1. https://wandb.ai/registry/ で W&B Registry に移動します。
  2. Artifact をリンクしたい Registry をクリックします。
  3. ページの上部に自動生成されたコードブロックが表示されます。
  4. これをコードにコピーして貼り付け、パスの最後の部分をコレクションの名前に置き換えてください。
Auto-generated code snippet

空のコレクションを作成する

  1. https://wandb.ai/registry/ で W&B Registry に移動します。
  2. Artifact をリンクしたい Registry をクリックします。
  3. 空のコレクションをクリックします。空のコレクションが存在しない場合は、新しいコレクションを作成します。
  4. 表示されるコードスニペット内で、.link_artifact() 内の target_path フィールドを確認します。
  5. (オプション) コレクションを削除します。
Create an empty collection
例えば、上記の手順を完了すると、target_path パラメータを含むコードブロックが見つかります。
target_path = 
      "smle-registries-bug-bash/wandb-registry-Golden Datasets/raw_images"
これを構成要素に分解すると、プログラムで Artifact をリンクするためのパスを作成する際に必要なものがわかります。
ORG_ENTITY_NAME = "smle-registries-bug-bash"
REGISTRY_NAME = "Golden Datasets"
COLLECTION_NAME = "raw_images"
一時的なコレクションから取得したコレクション名を、Artifact をリンクしたい実際のコレクション名に置き換えるようにしてください。