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

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

レジストリ

W&B Registryは、組織内のアーティファクトバージョンの管理された中央リポジトリです。組織内で権限を持つユーザーは、すべてのアーティファクトのライフサイクルをダウンロード、共有、共同管理できます。

Registryを使用して、アーティファクトバージョンを追跡し、アーティファクトの使用履歴と変更履歴を監査し、アーティファクトのガバナンスとコンプライアンスを保証し、モデルCI/CDなどの下流プロセスを自動化できます。

要約すると、W&B Registryを使用して以下を行うことができます:

前の画像は「Model」と「Dataset」のコアレジストリとカスタムレジストリがあるRegistryアプリを示しています。

基本を学ぶ

各組織には最初にモデルとデータセットのアーティファクトを整理するためのModelsDatasetsと呼ばれる2つのレジストリが含まれています。組織のニーズに基づいて、他のアーティファクトタイプを整理するための追加のレジストリを作成することができます。

レジストリは1つ以上のコレクションで構成されています。各コレクションは、異なるタスクまたはユースケースを表しています。

レジストリにアーティファクトを追加するには、最初に特定のアーティファクトバージョンをW&Bにログします。アーティファクトをログすると、W&Bは自動的にそのアーティファクトにバージョンを割り当てます。アーティファクトバージョンは0から始まり、最初のバージョンはv0、2番目はv1というように続きます。

アーティファクトをW&Bにログしたら、その特定のアーティファクトバージョンをレジストリ内のコレクションにリンクできます。

例として、以下のコード例では、“my_model.txt"という名前のモデルアーティファクトをコアレジストリ内の"first-collection"というコレクションにログしリンクする方法を示しています:

  1. W&Bのrunを初期化します。
  2. アーティファクトをW&Bにログします。
  3. コレクションとレジストリの名前を指定して、アーティファクトバージョンをリンクします。
  4. アーティファクトをコレクションにリンクします。

このPythonコードをスクリプトとして保存し実行してください。W&B Python SDKバージョン0.18.6以上が必要です。

import wandb
import random

# アーティファクトをトラックするためにW&Bのrunを初期化
run = wandb.init(project="registry_quickstart") 

# シミュレートされたモデルファイルを作成してログします
with open("my_model.txt", "w") as f:
   f.write("Model: " + str(random.random()))

# アーティファクトをW&Bにログします
logged_artifact = run.log_artifact(
    artifact_or_path="./my_model.txt", 
    name="gemma-finetuned", 
    type="model" # アーティファクトタイプを指定
)

# 公開したいコレクションとレジストリの名前を指定
COLLECTION_NAME = "first-collection"
REGISTRY_NAME = "model"

# アーティファクトをレジストリにリンク
run.link_artifact(
    artifact=logged_artifact, 
    target_path=f"wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}"
)

指定したレジストリ内に存在しない場合、link_artifact(target_path = "")メソッドで返されるrunオブジェクトの指定したコレクションをW&Bが自動的に作成します。

他の組織メンバーと公開したアーティファクトバージョンを表示するためにRegistryアプリに移動します。まずW&Bに移動します。左側のサイドバーでApplications以下のRegistryを選択します。「Model」レジストリを選択します。そのレジストリ内で、リンクしたアーティファクトバージョンを持つ「first-collection」コレクションが表示されるはずです。

アーティファクトバージョンをレジストリ内のコレクションにリンクすると、それを所有している組織メンバーは、適切な権限を持っていれば、あなたのアーティファクトバージョンを表示、ダウンロード、管理し、下流のオートメーションを作成できます。

W&B Registryを有効にする

デプロイメントタイプに基づいて、以下の条件を満たしてW&B Registryを有効にします:

デプロイメントタイプ 有効にする方法
マルチテナントクラウド アクションは必要ありません。W&B RegistryはW&Bアプリで利用可能です。
専用クラウド アカウントチームに連絡してください。ソリューションアーキテクト(SA)チームがあなたのインスタンスのオペレーターコンソール内でW&B Registryを有効にします。インスタンスがサーバーリリースバージョン0.59.2以上であることを確認してください。
セルフマネージド ENABLE_REGISTRY_UIと呼ばれる環境変数を有効にします。サーバーで環境変数を有効にする方法の詳細についてはこちらのドキュメントをご覧ください。セルフマネージドインスタンスでは、インフラストラクチャ管理者がこの環境変数を有効にしてtrueに設定する必要があります。インスタンスがサーバーリリースバージョン0.59.2以上であることを確認してください。

開始するためのリソース

ユースケースに応じて、W&B Registryの利用を開始するための以下のリソースを探索してください:

  • チュートリアルビデオをチェックしてください:
  • W&BのModel CI/CD コースを受講し、以下を学びましょう:
    • W&B Registryを使用してアーティファクトを管理し、バージョン管理、リネージトラッキング、および異なるライフサイクルステージへのモデルプロモートを行います。
    • Webhooksを使用してモデル管理ワークフローを自動化します。
    • 外部MLシステムおよびツールとレジストリを統合して、モデル評価、モニタリング、デプロイメントを行います。

旧モデルレジストリからW&B Registryへの移行

旧モデルレジストリの廃止予定日は未定です。旧モデルレジストリを廃止する前に、W&Bは旧モデルレジストリの内容をW&B Registryに移行します。

旧モデルレジストリからW&B Registryへの移行プロセスについて詳しくは、旧モデルレジストリからの移行を参照してください。

移行が行われるまで、W&Bは旧モデルレジストリと新しいレジストリの両方をサポートしています。

質問がある場合や移行についての懸念がある場合は、support@wandb.comにお問い合わせいただくか、W&Bプロダクトチームとお話しください。

1 - レジストリの種類

W&B は 2 種類のレジストリをサポートしています: コア レジストリカスタム レジストリ

コアレジストリ

コアレジストリは、特定のユースケース、つまり ModelsDatasets のためのテンプレートです。

デフォルトでは、Models レジストリは "model" アーティファクトタイプを受け入れるように設定されており、Dataset レジストリは "dataset" アーティファクトタイプを受け入れるように設定されています。管理者は、追加の受け入れ可能なアーティファクトタイプを追加することができます。

上記の画像は、W&B レジストリ アプリ UI における ModelsDataset のコアレジストリと、Fine_Tuned_Models というカスタムレジストリを示しています。

コアレジストリには 組織の公開範囲 があります。レジストリの管理者はコアレジストリの公開範囲を変更することはできません。

カスタムレジストリ

カスタムレジストリは、"model" アーティファクトタイプや "dataset" アーティファクトタイプに制限されません。

機械学習パイプラインの各ステップのために、初期データ収集から最終モデルデプロイメントまでのカスタムレジストリを作成することができます。

例えば、「Benchmark_Datasets」というレジストリを作成し、トレーニングされたモデルの性能評価のためにキュレーションされたデータセットを整理することができます。このレジストリ内には、トレーニング中にモデルが見たことのないユーザー質問と、それに対応する専門家によって検証された答えが含まれる「User_Query_Insurance_Answer_Test_Data」というコレクションを持つことができます。

カスタムレジストリは、組織または制限付きの公開範囲 のいずれかを持つことができます。レジストリの管理者は、組織の公開範囲を制限付きに変更することができます。ただし、レジストリ管理者はカスタムレジストリの公開範囲を制限付きから組織の公開範囲へ変更することはできません。

カスタムレジストリの作成方法については、カスタムレジストリを作成する を参照してください。

まとめ

以下の表は、コアレジストリとカスタムレジストリの違いをまとめています:

コア カスタム
公開範囲 組織の公開範囲のみ。公開範囲は変更できません。 組織または制限付きのいずれか。公開範囲は組織から制限付きに変更できます。
メタデータ あらかじめ設定され、ユーザーによる編集は不可。 ユーザーが編集可能。
アーティファクトタイプ あらかじめ設定され、既存の受け入れられるアーティファクトタイプは削除できません。ユーザーは追加の受け入れ可能なアーティファクトタイプを追加可能。 管理者が受け入れられるタイプを定義できます。
カスタマイズ 既存のリストに追加のタイプを追加可能。 レジストリ名、説明、公開範囲、受け入れアーティファクトタイプを編集可能。

2 - カスタムレジストリを作成する

カスタムレジストリは、使用できるアーティファクトタイプに関して柔軟性とコントロールを提供し、レジストリの公開範囲を制限することができるなどの機能があります。

コアとカスタムレジストリの完全な比較は、Registry typesの概要表をご覧ください。

カスタムレジストリを作成する

カスタムレジストリを作成するには:

  1. https://wandb.ai/registry/Registry アプリに移動します。
  2. Custom registry 内で、Create registry ボタンをクリックします。
  3. Name フィールドにレジストリの名前を入力します。
  4. 必要に応じてレジストリの説明を提供します。
  5. Registry visibility ドロップダウンからレジストリを閲覧できる人を選択します。レジストリの公開範囲オプションの詳細については、Registry visibility typesをご覧ください。
  6. All types または Specify typesAccepted artifacts type ドロップダウンから選択します。
  7. Specify types を選択した場合)レジストリが受け入れる1つ以上のアーティファクトタイプを追加します。
  8. Create registry ボタンをクリックします。

たとえば、以下の画像はユーザーが作成しようとしている Fine_Tuned_Models というカスタムレジストリを示しています。このレジストリは、手動でレジストリに追加されたメンバーのみに制限されています。

公開範囲タイプ

レジストリの公開範囲は、誰がそのレジストリにアクセスできるかを決定します。カスタムレジストリの公開範囲を制限すると、指定されたメンバーのみがそのレジストリにアクセスできるようにするのに役立ちます。

カスタムレジストリには2つの公開範囲オプションがあります:

公開範囲 説明
Restricted 招待された組織メンバーのみがレジストリにアクセスできます。
Organization 組織内の全員がレジストリにアクセスできます。

チーム管理者またはレジストリ管理者は、カスタムレジストリの公開範囲を設定できます。

Restricted公開範囲でカスタムレジストリを作成したユーザーは、自動的にそのレジストリの管理者として登録されます。

カスタムレジストリの公開範囲を設定する

チーム管理者またはレジストリ管理者は、カスタムレジストリの作成時または作成後に公開範囲を設定することができます。

既存のカスタムレジストリの公開範囲を制限するには:

  1. https://wandb.ai/registry/Registry アプリに移動します。
  2. 任意のレジストリを選択します。
  3. 右上隅の歯車アイコンをクリックします。
  4. Registry visibility ドロップダウンから、希望するレジストリの公開範囲を選択します。
  5. Restricted visibility を選択した場合:
    1. このレジストリにアクセスを許可したい組織のメンバーを追加します。 Registry members and roles セクションまでスクロールし、Add member ボタンをクリックします。
    2. Member フィールドに追加したいメンバーのメールまたはユーザー名を入力します。
    3. Add new member をクリックします。

チーム管理者がそれを作成する際に、カスタムレジストリの公開範囲をどのように設定するかに関する詳細は Create a custom registry を参照してください。

3 - レジストリアクセスを設定する

レジストリ管理者は、レジストリの設定を設定することで、レジストリロールを設定ユーザーを追加、またはユーザーを削除することができます。

ユーザー管理

ユーザーまたはチームの追加

レジストリ管理者は、個々のユーザーまたは全チームをレジストリに追加できます。ユーザーまたはチームをレジストリに追加するには、次の手順を実行します。

  1. https://wandb.ai/registry/ に移動します。
  2. ユーザーまたはチームを追加したいレジストリを選択します。
  3. 右上隅のギアアイコンをクリックして、レジストリの設定にアクセスします。
  4. Registry access セクションで Add access をクリックします。
  5. Include users and teams フィールドに、追加したいユーザー名、メールアドレス、またはチーム名を指定します。
  6. Add access をクリックします。
UI を使用して個々のユーザーやチームをレジストリに追加するアニメーション

レジストリでのユーザーロール設定レジストリロールの権限についての詳細をご覧ください。

ユーザーまたはチームの削除

レジストリ管理者は、個々のユーザーまたはチーム全体をレジストリから削除できます。ユーザーまたはチームをレジストリから削除するには、次の手順を実行します。

  1. https://wandb.ai/registry/ に移動します。
  2. ユーザーを削除したいレジストリを選択します。
  3. 右上隅のギアアイコンをクリックして、レジストリの設定にアクセスします。
  4. Registry access セクションに移動し、削除したいユーザー名、メールアドレス、またはチームを入力します。
  5. Delete ボタンをクリックします。

レジストリロール

レジストリ内の各ユーザーには レジストリロール があり、そのレジストリで何をできるかが決まります。

W&B は、レジストリにユーザーやチームが追加されると、自動的にデフォルトのレジストリロールを割り当てます。

Entity Default registry role
Team Viewer
User (non admin) Viewer
Org admin Admin

レジストリ管理者は、レジストリ内のユーザーやチームのロールを割り当てまたは変更することができます。詳細は レジストリでのユーザーロールの設定 を参照してください。

以下の表は、ユーザーが持つことのできる異なるロールとその権限を示しています:

Permission Permission Group Viewer Member Admin
コレクションの詳細を表示する Read X X X
リンクされたアーティファクトの詳細を表示する Read X X X
使用: レジストリ内で use_artifact を使用してアーティファクトを使用 Read X X X
リンクされたアーティファクトをダウンロードする Read X X X
アーティファクトのファイルビューワーからファイルをダウンロードする Read X X X
レジストリを検索する Read X X X
レジストリの設定とユーザーリストを表示する Read X X X
コレクションの新しい自動化を作成する Create X X
新しいバージョンが追加されたときの Slack 通知をオンにする Create X X
新しいコレクションを作成する Create X X
新しいカスタムレジストリを作成する Create X X
コレクションカード (説明) を編集する Update X X
リンクされたアーティファクトの説明を編集する Update X X
コレクションのタグを追加または削除する Update X X
リンクされたアーティファクトからエイリアスを追加または削除する Update X X
新しいアーティファクトをリンクする Update X X
レジストリ用の許可されたタイプ一覧を編集する Update X X
カスタムレジストリ名を編集する Update X X
コレクションを削除する Delete X X
自動化を削除する Delete X X
レジストリからアーティファクトのリンクを解除する Delete X X
レジストリ用の承認されたアーティファクトタイプを編集する Admin X
レジストリの公開範囲を変更する(組織または制限付き) Admin X
ユーザーをレジストリに追加する Admin X
レジストリ内のユーザーのロールを割り当てるまたは変更する Admin X

継承された権限

レジストリ内のユーザーの権限は、そのユーザーに個別に、またはチームメンバーシップによって割り当てられた特権の最高レベルに依存します。

例えば、レジストリ管理者が Nico というユーザーをレジストリ A に追加し、Viewer レジストリロールを割り当てたとします。次に、レジストリ管理者が Foundation Model Team というチームをレジストリ A に追加し、Foundation Model Team に Member レジストリロールを割り当てたとします。

Nico は Foundation Model Team のメンバーであり、このチームは Registry の Member です。Member の権限は Viewer よりも高いため、W&B は Nico に Member ロールを付与します。

以下の表は、ユーザーの個別レジストリロールと、彼らが所属するチームのレジストリロールの間で矛盾が生じた場合の最高レベルの権限を示しています:

Team registry role Individual registry role Inherited registry role
Viewer Viewer Viewer
Member Viewer Member
Admin Viewer Admin

矛盾がある場合、W&B はユーザー名の横に最高レベルの権限を表示します。

例えば、以下の画像では、Alex は smle-reg-team-1 チームのメンバーであるため、Member ロールの特権を継承しています。

チームの一部であるため、メンバーのロールを継承するユーザー。

レジストリロールの設定

  1. https://wandb.ai/registry/ に移動します。
  2. 設定したいレジストリを選択します。
  3. 右上隅のギアアイコンをクリックします。
  4. Registry members and roles セクションまでスクロールします。
  5. Member フィールド内で、権限を編集したいユーザーまたはチームを検索します。
  6. Registry role 列でユーザーのロールをクリックします。
  7. ドロップダウンから、ユーザーに割り当てたいロールを選択します。

4 - コレクションを作成する

A collection とは、レジストリ内でリンクされたアーティファクト バージョンのセットです。それぞれのコレクションは、個別のタスクやユースケースを表します。

例えば、コアデータセット レジストリ内に複数のコレクションを持つことができます。それぞれのコレクションには、MNIST、CIFAR-10、ImageNet などの異なるデータセットが含まれます。

別の例として、「chatbot」と呼ばれるレジストリがあり、そこにはモデル アーティファクトのコレクション、データセット アーティファクトのコレクション、およびファインチューンされたモデル アーティファクトのコレクションがあります。

レジストリとそのコレクションの整理方法は、あなた次第です。

コレクションのタイプ

それぞれのコレクションは、一種類だけのアーティファクトのタイプを受け入れます。指定したタイプは、組織の他のメンバーと一緒にそのコレクションにリンクできるアーティファクトの種類を制限します。

例えば、「データセット」アーティファクトタイプを受け入れるコレクションを作成したとします。これにより、「データセット」タイプを持つ将来のアーティファクト バージョンのみをこのコレクションにリンクできます。同様に、「モデル」タイプのアーティファクトは、モデルアーティファクトタイプのみを受け入れるコレクションにのみリンクできます。

コレクションを作成するとき、事前に定義されたアーティファクト タイプのリストから選択できます。使用可能なアーティファクト タイプは、そのコレクションが所属するレジストリによります。

アーティファクトをコレクションにリンクしたり新しいコレクションを作成する前に、そのコレクションが受け入れるアーティファクトのタイプを調査してください

コレクションが受け入れるアーティファクトのタイプを確認する

コレクションにリンクする前に、コレクションが受け入れるアーティファクトタイプを確認してください。W&B Python SDK を使用してプログラム的に、もしくは W&B アプリを使用してインタラクティブに、コレクションが受け入れるアーティファクトタイプを確認することができます。

ホームページまたはレジストリの設定ページで、受け入れられるアーティファクトタイプをレジストリカードで見つけることができます。

どちらのメソッドでも、まず W&B レジストリ アプリに移動します。

レジストリ アプリのホームページでは、そのレジストリのレジストリ カードにスクロールして、受け入れられたアーティファクト タイプを表示できます。レジストリカード内の灰色の水平オーバルには、レジストリが受け入れるアーティファクト タイプが記載されています。

例えば、前の図はレジストリ アプリのホームページに複数のレジストリ カードを示しています。Modelレジストリカード内で、2つのアーティファクトタイプ: modelmodel-new を見ることができます。

レジストリの設定ページで受け入れられたアーティファクト タイプを表示するには:

  1. 設定を表示するレジストリカードをクリックします。
  2. 右上のギアアイコンをクリックします。
  3. 受け入れられたアーティファクト タイプ フィールドまでスクロールします。

W&B Python SDK を使用して、レジストリが受け入れるアーティファクト タイプをプログラム的に表示します。

import wandb

registry_name = "<registry_name>"
artifact_types = wandb.Api().project(name=f"wandb-registry-{registry_name}").artifact_types()
print(artifact_type.name for artifact_type in artifact_types)

コレクションが受け入れるアーティファクトのタイプを知ったら、コレクションを作成します

コレクションを作成する

レジストリ内でインタラクティブまたはプログラムでコレクションを作成します。コレクションを作成した後、そのコレクションが受け入れるアーティファクトのタイプを変更することはできません。

プログラム的にコレクションを作成する

wandb.init.link_artifact() メソッドを使用して、アーティファクトをコレクションにリンクします。target_path フィールドに、次の形式のパスとしてコレクションとレジストリの両方を指定します。

f"wandb-registry-{registry_name}/{collection_name}"

ここで、registry_name はレジストリの名前で、collection_name はコレクションの名前です。必ずレジストリ名の前に wandb-registry- プレフィックスを追加してください。

次のコードスニペットは、プログラムでコレクションを作成する方法を示しています。他の <> で囲まれた値を必ず自分の値で置き換えてください。

import wandb

# Run を初期化
run = wandb.init(entity = "<team_entity>", project = "<project>")

# アーティファクトオブジェクトを作成
artifact = wandb.Artifact(
  name = "<artifact_name>",
  type = "<artifact_type>"
  )

registry_name = "<registry_name>"
collection_name = "<collection_name>"
target_path = f"wandb-registry-{registry_name}/{collection_name}"

# アーティファクトをコレクションにリンク
run.link_artifact(artifact = artifact, target_path = target_path)

run.finish()

インタラクティブにコレクションを作成する

以下のステップで、W&B レジストリ アプリ UI を使用してレジストリ内にコレクションを作成する方法を説明します。

  1. W&B アプリ UI の Registry アプリに移動します。
  2. レジストリを選択します。
  3. 右上の Create collection ボタンをクリックします。
  4. Name フィールドにコレクションの名前を入力します。
  5. Type ドロップダウンからタイプを選択します。または、レジストリがカスタムアーティファクトタイプを有効にしている場合は、このコレクションが受け入れる1つ以上のアーティファクトタイプを提供します。
  6. オプションで、Description フィールドにコレクションの説明を追加します。
  7. オプションで、Tags フィールドに1つ以上のタグを追加します。
  8. Link version をクリックします。
  9. Project ドロップダウンから、アーティファクトが保存されているプロジェクトを選択します。
  10. Artifact コレクションのドロップダウンからアーティファクトを選択します。
  11. Version ドロップダウンから、コレクションにリンクしたいアーティファクトバージョンを選択します。
  12. Create collection ボタンをクリックします。

5 - レジストリにアーティファクトバージョンをリンクする

リンクアーティファクトのバージョンをコレクションに追加して、組織内の他のメンバーがアクセスできるようにします。

アーティファクトをレジストリにリンクすると、そのアーティファクトがそのレジストリに「公開」されます。 レジストリにアクセスできるユーザーは、コレクション内のリンクされたアーティファクトのバージョンにアクセスできます。

言い換えれば、アーティファクトをレジストリコレクションにリンクすることによって、アーティファクトのバージョンはプライベートなプロジェクトレベルのスコープから、共有される組織レベルのスコープになります。

アーティファクトをコレクションにリンクする

アーティファクトバージョンをインタラクティブまたはプログラム的にコレクションにリンクします。

ユースケースに基づいて、以下のタブで説明されている手順に従ってアーティファクトバージョンをリンクしてください。

プログラム的にアーティファクトバージョンをコレクションにリンクするには、wandb.init.Run.link_artifact()を使用します。

target_path パラメータを使用して、リンクするアーティファクトバージョンのコレクションとレジストリを指定します。ターゲットパスは、プレフィックス “wandb-registry”、レジストリの名前、コレクション名がフォワードスラッシュで区切られています。

wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}

以下のコードスニペットをコピーして貼り付け、既存のレジストリ内のコレクションにアーティファクトバージョンをリンクしてください。<>で囲まれた値を自分の値に置き換えてください。

import wandb

# run を初期化
run = wandb.init(
  entity = "<チームエンティティ>",
  project = "<プロジェクト名>"
)

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

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

# アーティファクトをリンクするコレクションとレジストリを指定
REGISTRY_NAME = "<registry_name>"  
COLLECTION_NAME = "<collection_name>"
target_path=f"wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}"

# アーティファクトをコレクションにリンク
run.link_artifact(artifact = artifact, target_path = target_path)
  1. Registry App に移動します。
  2. アーティファクトバージョンをリンクするコレクションの名前の隣にマウスをホバーさせます。
  3. 詳細を表示の隣にあるミートボールメニューアイコン(三つの横に並んだ点)を選択します。
  4. ドロップダウンから、新しいバージョンをリンクを選択します。
  5. サイドバーから、Team ドロップダウンからチームの名前を選択します。
  6. Project ドロップダウンからアーティファクトを含むプロジェクトの名前を選択します。
  7. Artifact ドロップダウンからアーティファクトの名前を選択します。
  8. Version ドロップダウンからコレクションにリンクしたいアーティファクトのバージョンを選択します。
  1. プロジェクトのアーティファクトブラウザに移動します。URLは: https://wandb.ai/<entity>/<project>/artifacts
  2. 左サイドバーでアーティファクトアイコンを選択します。
  3. レジストリにリンクしたいアーティファクトバージョンをクリックします。
  4. バージョン概要セクション内で、Link to registryボタンをクリックします。
  5. 画面右側に表示されるモーダルで、Select a registered model メニューのドロップダウンからアーティファクトを選択します。
  6. 次のステップ をクリックします。
  7. (任意) Aliases ドロップダウンから別名を選択します。
  8. Link to registry をクリックします。

リンクされたアーティファクトのメタデータ、バージョンデータ、使用状況、リネージ情報などをRegistry Appで表示します。

リンクされたアーティファクトをレジストリで表示する

Registry Appでメタデータ、リネージ、使用状況情報などのリンクされたアーティファクト情報を表示します。

  1. Registry App に移動します。
  2. アーティファクトをリンクしたレジストリの名前を選択します。
  3. コレクションの名前を選択します。
  4. コレクションのアーティファクトがメトリクスをログしている場合、メトリクスを表示をクリックしてバージョンを比較します。
  5. アーティファクトバージョンのリストから、アクセスしたいバージョンを選択します。バージョン番号は v0 から始まる増分で各リンクされたアーティファクトバージョンに割り当てられます。
  6. アーティファクトバージョンの詳細を表示するには、そのバージョンをクリックします。このページのタブから、そのバージョンのメタデータ(ログされたメトリクスを含む)、リネージ、使用状況情報を表示できます。

バージョンタブ 内の フルネーム フィールドに注意してください。リンクされたアーティファクトのフルネームは、レジストリ、コレクション名、アーティファクトのバージョンのエイリアスまたはインデックスから構成されています。

wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}:v{INTEGER}

プログラム的にアーティファクトバージョンにアクセスするには、リンクされたアーティファクトのフルネームが必要です。

トラブルシューティング

アーティファクトをリンクできない場合は、次のような一般的なチェックを確認してください。

個人アカウントからアーティファクトをログする

個人エンティティを使用してW&Bにログされたアーティファクトはレジストリにリンクすることができません。 アーティファクトを組織内のチームエンティティを使用してログに記録していることを確認してください。 組織のチーム内でログに記録されたアーティファクトのみが組織のレジストリにリンクされることができます。

あなたのチームエンティティを見つける

W&B はあなたのチームの名前をチームのエンティティとして使用します。 例えば、あなたのチームが team-awesome と呼ばれている場合、あなたのチームエンティティは team-awesome です。

あなたのチームの名前を確認するには:

  1. あなたのチームの W&B プロファイルページに移動します。
  2. サイトの URL をコピーします。それはhttps://wandb.ai/<team>の形式です。ここで <team> はあなたのチームの名前とチームのエンティティの両方です。

チームエンティティからログする

  1. wandb.init()を使用して run を初期化するときに、エンティティとしてチームを指定します。もし run を初期化するときに entity を指定しなかった場合、run はあなたのデフォルトエンティティを使用しますが、それがチームエンティティであるとは限りません。
import wandb   

run = wandb.init(
  entity='<team_entity>', 
  project='<project_name>'
  )
  1. run にアーティファクトをログするには、run.log_artifact を使用するか、Artifact オブジェクトを作成してからファイルを追加します:

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

    アーティファクトのログ方法についての詳細は、アーティファクトを構成するを参照してください。

  2. 個人エンティティにログされたアーティファクトがある場合、それを組織内のエンティティに再ログする必要があります。

W&B App UIでレジストリのパスを確認する

UIを使用してレジストリのパスを確認する方法は2つあります: 空のコレクションを作成してコレクションの詳細を表示するか、コレクションのホームページで自動生成されたコードをコピー&ペーストすることです。

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

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

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

  1. Registry app に移動します: https://wandb.ai/registry/.
  2. アーティファクトをリンクしたいレジストリをクリックします。
  3. 空のコレクションをクリックします。 空のコレクションが存在しない場合は、新しいコレクションを作成します。
  4. 表示されるコードスニペット内で、.link_artifact() 内の target_path フィールドを識別します。
  5. (任意) コレクションを削除します。

例えば、上記の手順を完了した後、target_pathパラメータを持つコードブロックを見つけます:

target_path = 
      "smle-registries-bug-bash/wandb-registry-Golden Datasets/raw_images"

これを構成要素に分解すると、プログラム的にアーティファクトをリンクするために必要なパスを作成するために必要なものが見えます:

ORG_ENTITY_NAME = "smle-registries-bug-bash"
REGISTRY_NAME = "Golden Datasets"
COLLECTION_NAME = "raw_images"

6 - レジストリからアーティファクトをダウンロードする

W&B Python SDK を使用して、レジストリにリンクされたアーティファクトをダウンロードします。アーティファクトをダウンロードして使用するには、レジストリ名、コレクション名、およびダウンロードしたいアーティファクトバージョンのエイリアスまたはインデックスを知る必要があります。

アーティファクトのプロパティを知ったら、リンクされたアーティファクトへのパスを構築してアーティファクトをダウンロードできます。または、W&B アプリ UI から事前に生成されたコードスニペットをコピーして貼り付けすることで、レジストリにリンクされたアーティファクトをダウンロードすることもできます。

リンクされたアーティファクトへのパスを構築

レジストリにリンクされたアーティファクトをダウンロードするには、そのリンクされたアーティファクトのパスを知っている必要があります。パスは、レジストリ名、コレクション名、およびアクセスしたいアーティファクトバージョンのエイリアスまたはインデックスで構成されます。

レジストリ、コレクション、およびアーティファクトバージョンのエイリアスまたはインデックスを手に入れたら、以下の文字列テンプレートを使用してリンクされたアーティファクトへのパスを構築できます。

# バージョンインデックスを指定したアーティファクト名
f"wandb-registry-{REGISTRY}/{COLLECTION}:v{INDEX}"

# エイリアスを指定したアーティファクト名
f"wandb-registry-{REGISTRY}/{COLLECTION}:{ALIAS}"

中括弧 {} 内の値を、アクセスしたいレジストリ、コレクション、およびアーティファクトバージョンのエイリアスまたはインデックスの名前で置き換えてください。

リンクされたアーティファクトのパスを取得したら、wandb.init.use_artifact メソッドを使用してアーティファクトにアクセスし、その内容をダウンロードします。以下のコードスニペットは、W&B レジストリにリンクされたアーティファクトを使用およびダウンロードする方法を示しています。<> 内の値を自分のものに置き換えてください。

import wandb

REGISTRY = '<registry_name>'
COLLECTION = '<collection_name>'
ALIAS = '<artifact_alias>'

run = wandb.init(
   entity = '<team_name>',
   project = '<project_name>'
   )  

artifact_name = f"wandb-registry-{REGISTRY}/{COLLECTION}:{ALIAS}"
# artifact_name = '<artifact_name>' # Registry App で指定されたフルネームをコピーして貼り付け
fetched_artifact = run.use_artifact(artifact_or_name = artifact_name)  
download_path = fetched_artifact.download()  

.use_artifact() メソッドは、runを作成するとともに、ダウンロードしたアーティファクトをその run の入力としてマークします。 アーティファクトを run の入力としてマークすることにより、W&B はそのアーティファクトのリネージを追跡できます。

runを作成したくない場合は、wandb.Api() オブジェクトを使用してアーティファクトにアクセスできます。

import wandb

REGISTRY = "<registry_name>"
COLLECTION = "<collection_name>"
VERSION = "<version>"

api = wandb.Api()
artifact_name = f"wandb-registry-{REGISTRY}/{COLLECTION}:{VERSION}"
artifact = api.artifact(name = artifact_name)
例: W&B レジストリにリンクされたアーティファクトを使用およびダウンロード

次のコード例は、ユーザーが Fine-tuned Models レジストリにある phi3-finetuned というコレクションにリンクされたアーティファクトをダウンロードする方法を示しています。アーティファクトバージョンのエイリアスは production に設定されています。

import wandb

TEAM_ENTITY = "product-team-applications"
PROJECT_NAME = "user-stories"

REGISTRY = "Fine-tuned Models"
COLLECTION = "phi3-finetuned"
ALIAS = 'production'

# 指定されたチームとプロジェクト内で run を初期化
run = wandb.init(entity=TEAM_ENTITY, project = PROJECT_NAME)

artifact_name = f"wandb-registry-{REGISTRY}/{COLLECTION}:{ALIAS}"

# アーティファクトにアクセスし、それをリネージ追跡のために run の入力としてマーク
fetched_artifact = run.use_artifact(artifact_or_name = name)  

# アーティファクトをダウンロード。ダウンロードされたコンテンツのパスを返します
downloaded_path = fetched_artifact.download()  

APIリファレンスガイドの use_artifactArtifact.download() で可能なパラメータや返り値の種類について詳しく見てください。

事前に生成されたコードスニペットのコピーと貼り付け

W&B は、レジストリにリンクされたアーティファクトをダウンロードするために、Pythonスクリプト、ノートブック、またはターミナルにコピーして貼り付けることができるコードスニペットを作成します。

  1. レジストリアプリに移動します。
  2. アーティファクトを含むレジストリの名前を選択します。
  3. コレクションの名前を選択します。
  4. アーティファクトバージョンのリストからアクセスするバージョンを選択します。
  5. Usage タブを選択します。
  6. Usage API セクションに表示されたコードスニペットをコピーします。
  7. コピーしたコードスニペットを Python スクリプト、ノートブック、またはターミナルに貼り付けます。

7 - バージョンをタグで整理する

コレクションやコレクション内のアーティファクト バージョンを整理するためにタグを使用します。タグは、Python SDK または W&B アプリ UI で追加、削除、編集が可能です。

コレクションやアーティファクトバージョンをレジストリ内で整理するためにタグを作成し追加します。W&B アプリ UI または W&B Python SDK を使用して、コレクションまたはアーティファクトバージョンにタグを追加、変更、表示、削除できます。

コレクションにタグを追加する

W&B アプリ UI または Python SDK を使用してコレクションにタグを追加します。

W&B アプリ UI を使用してコレクションにタグを追加します。

  1. W&B レジストリに移動します: https://wandb.ai/registry
  2. レジストリカードをクリックします
  3. コレクション名の横にある View details をクリックします
  4. コレクションカード内で、Tags フィールドの隣にあるプラスアイコン (+) をクリックし、タグの名前を入力します
  5. キーボードの Enter を押します
import wandb

COLLECTION_TYPE = "<collection_type>"
ORG_NAME = "<org_name>"
REGISTRY_NAME = "<registry_name>"
COLLECTION_NAME = "<collection_name>"

full_name = f"{ORG_NAME}/wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}"

collection = wandb.Api().artifact_collection(
  type_name = COLLECTION_TYPE, 
  name = full_name
  )

collection.tags = ["your-tag"]
collection.save()

コレクションに属するタグを更新する

tags 属性を再割り当てするか、変更することでプログラム上でタグを更新します。W&B は tags 属性をインプレースで変更するのではなく、再割り当てすることを推奨しており、これは良い Python の習慣でもあります。

例えば、以下のコードスニペットは、再割り当てを用いてリストを更新する一般的な方法を示しています。簡潔にするために、このコード例は コレクションにタグを追加するセクション から続いています。

collection.tags = [*collection.tags, "new-tag", "other-tag"]
collection.tags = collection.tags + ["new-tag", "other-tag"]

collection.tags = set(collection.tags) - set(tags_to_delete)
collection.tags = []  # すべてのタグを削除

次のコードスニペットは、インプレースでの変更を使用してアーティファクトバージョンに属するタグを更新する方法を示しています。

collection.tags += ["new-tag", "other-tag"]
collection.tags.append("new-tag")

collection.tags.extend(["new-tag", "other-tag"])
collection.tags[:] = ["new-tag", "other-tag"]
collection.tags.remove("existing-tag")
collection.tags.pop()
collection.tags.clear()

コレクションに属するタグを表示する

W&B アプリ UI を使用してコレクションに追加されたタグを表示します。

  1. W&B レジストリに移動します: https://wandb.ai/registry
  2. レジストリカードをクリックします
  3. コレクション名の横にある View details をクリックします

コレクションに 1 つ以上のタグがある場合、それらのタグはコレクションカード内の Tags フィールドの隣に表示されます。

コレクションに追加されたタグは、コレクション名の隣にも表示されます。

例えば、以下の画像では、「zoo-dataset-tensors」コレクションに “tag1” というタグが追加されています。

コレクションからタグを削除する

W&B アプリ UI を使用してコレクションからタグを削除します。

  1. W&B レジストリに移動します: https://wandb.ai/registry
  2. レジストリカードをクリックします
  3. コレクション名の横にある View details をクリックします
  4. コレクションカード内で、削除したいタグの名前の上にマウスを移動してください
  5. キャンセルボタン(X アイコン)をクリックします

アーティファクトバージョンにタグを追加する

W&B アプリ UI または Python SDK を使用して、コレクションにリンクされたアーティファクトバージョンにタグを追加します。

  1. W&B レジストリに移動します: https://wandb.ai/registry
  2. レジストリカードをクリックします
  3. タグを追加したいコレクションの名前の横にある View details をクリックします
  4. 下にスクロールして Versions を表示します
  5. アーティファクトバージョンの横にある View をクリックします
  6. Version タブ内で、Tags フィールドの隣にあるプラスアイコン (+) をクリックし、タグの名前を入力します
  7. キーボードの Enter を押します

タグを追加または更新したいアーティファクトバージョンを取得します。アーティファクトバージョンを取得したら、アーティファクトオブジェクトの tag 属性にアクセスして、そのアーティファクトのタグを追加または変更します。1 つ以上のタグをリストとして tag 属性に渡します。

他のアーティファクト同様、W&B からアーティファクトを取得するのに run を作成する必要はありませんが、run を作成し、その run の中でアーティファクトを取得することもできます。どちらの場合でも、W&B サーバー上でアーティファクトを更新するために、アーティファクトオブジェクトの save メソッドを呼び出すことを確認してください。

以下のコードセルをコピーして、アーティファクトバージョンのタグを追加または変更します。<> 内の値を自分のものに置き換えてください。

次のコードスニペットは、新しい run を作成せずにアーティファクトを取得してタグを追加する方法を示しています。

import wandb

ARTIFACT_TYPE = "<TYPE>"
ORG_NAME = "<org_name>"
REGISTRY_NAME = "<registry_name>"
COLLECTION_NAME = "<collection_name>"
VERSION = "<artifact_version>"

artifact_name = f"{ORG_NAME}/wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}:v{VERSION}"

artifact = wandb.Api().artifact(name = artifact_name, type = ARTIFACT_TYPE)
artifact.tags = ["tag2"] # リストに 1 つ以上のタグを提供
artifact.save()

次のコードスニペットは、新しい run を作成してアーティファクトを取得し、タグを追加する方法を示しています。

import wandb

ORG_NAME = "<org_name>"
REGISTRY_NAME = "<registry_name>"
COLLECTION_NAME = "<collection_name>"
VERSION = "<artifact_version>"

run = wandb.init(entity = "<entity>", project="<project>")

artifact_name = f"{ORG_NAME}/wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}:v{VERSION}"

artifact = run.use_artifact(artifact_or_name = artifact_name)
artifact.tags = ["tag2"] # リストに 1 つ以上のタグを提供
artifact.save()

アーティファクトバージョンに属するタグを更新する

tags 属性を再割り当てするか、変更することでプログラム上でタグを更新します。W&B は tags 属性をインプレースで変更するのではなく、再割り当てすることを推奨しており、これは良い Python の習慣でもあります。

例えば、以下のコードスニペットは、再割り当てを用いてリストを更新する一般的な方法を示しています。簡潔にするために、このコード例は アーティファクトバージョンにタグを追加するセクション から続いています。

artifact.tags = [*artifact.tags, "new-tag", "other-tag"]
artifact.tags = artifact.tags + ["new-tag", "other-tag"]

artifact.tags = set(artifact.tags) - set(tags_to_delete)
artifact.tags = []  # すべてのタグを削除

次のコードスニペットは、インプレースでの変更を使用してアーティファクトバージョンに属するタグを更新する方法を示しています。

artifact.tags += ["new-tag", "other-tag"]
artifact.tags.append("new-tag")

artifact.tags.extend(["new-tag", "other-tag"])
artifact.tags[:] = ["new-tag", "other-tag"]
artifact.tags.remove("existing-tag")
artifact.tags.pop()
artifact.tags.clear()

アーティファクトバージョンに属するタグを表示する

W&B アプリ UI または Python SDK を使用して、レジストリにリンクされたアーティファクトバージョンに属するタグを表示します。

  1. W&B レジストリに移動します: https://wandb.ai/registry
  2. レジストリカードをクリックします
  3. タグを追加したいコレクションの名前の横にある View details をクリックします
  4. 下にスクロールして Versions セクションを表示します

アーティファクトバージョンに 1 つ以上のタグがある場合、それらのタグは Tags 列に表示されます。

アーティファクトバージョンを取得して、そのタグを表示します。アーティファクトバージョンを取得したら、アーティファクトオブジェクトの tag 属性を表示して、そのアーティファクトに属するタグを表示します。

他のアーティファクト同様、W&B からアーティファクトを取得するのに run を作成する必要はありませんが、run を作成し、その run の中でアーティファクトを取得することもできます。

以下のコードセルをコピーして、アーティファクトバージョンのタグを追加または変更します。<> 内の値を自分のものに置き換えてください。

次のコードスニペットは、新しい run を作成せずにアーティファクトバージョンを取得して表示する方法を示しています。

import wandb

ARTIFACT_TYPE = "<TYPE>"
ORG_NAME = "<org_name>"
REGISTRY_NAME = "<registry_name>"
COLLECTION_NAME = "<collection_name>"
VERSION = "<artifact_version>"

artifact_name = f"{ORG_NAME}/wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}:v{VERSION}"

artifact = wandb.Api().artifact(name = artifact_name, type = artifact_type)
print(artifact.tags)

次のコードスニペットは、新しい run を作成してアーティファクトバージョンのタグを取得して表示する方法を示しています。

import wandb

ORG_NAME = "<org_name>"
REGISTRY_NAME = "<registry_name>"
COLLECTION_NAME = "<collection_name>"
VERSION = "<artifact_version>"

run = wandb.init(entity = "<entity>", project="<project>")

artifact_name = f"{ORG_NAME}/wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}:v{VERSION}"

artifact = run.use_artifact(artifact_or_name = artifact_name)
print(artifact.tags)

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

  1. W&B レジストリに移動します: https://wandb.ai/registry
  2. レジストリカードをクリックします
  3. タグを追加したいコレクションの名前の横にある View details をクリックします
  4. 下にスクロールして Versions を表示します
  5. アーティファクトバージョンの横にある View をクリックします
  6. Version タブ内でタグの名前の上にマウスを移動してください
  7. キャンセルボタン(X アイコン)をクリックします

既存のタグを検索する

W&B アプリ UI を使用して、コレクションやアーティファクトバージョン内の既存のタグを検索します。

  1. W&B レジストリに移動します: https://wandb.ai/registry
  2. レジストリカードをクリックします
  3. 検索バー内にタグの名前を入力します

特定のタグを持つアーティファクトバージョンを見つける

W&B Python SDK を使用して、特定のタグセットを持つアーティファクトバージョンを見つけます。

import wandb

api = wandb.Api()
tagged_artifact_versions = api.artifacts(
    type_name = "<artifact_type>",
    name = "<artifact_name>",
    tags = ["<tag_1>", "<tag_2>"]
)

for artifact_version in tagged_artifact_versions:
    print(artifact_version.tags)

8 - レジストリ項目を見つける

W&B レジストリアプリのグローバル検索バーを使用して、レジストリ、コレクション、アーティファクトバージョンタグ、コレクションタグ、またはエイリアスを見つけます。W&B Python SDK を使用して、特定の条件に基づいて レジストリ、コレクション、およびアーティファクトバージョンをフィルタリング するために、MongoDBスタイルのクエリを使用することができます。

表示権限がある項目のみが検索結果に表示されます。

レジストリ項目の検索

レジストリ項目を検索するには:

  1. W&B レジストリアプリに移動します。
  2. ページ上部の検索バーに検索語を指定します。Enter を押して検索します。

指定した語が既存のレジストリ、コレクション名、アーティファクトバージョンタグ、コレクションタグ、またはエイリアスと一致する場合、検索バーの下に検索結果が表示されます。

レジストリ検索バーにテキストを入力してレジストリ項目をフィルタリングするユーザーの.gif

MongoDBスタイルのクエリでレジストリ項目をクエリ

wandb.Api().registries()query predicates を使用して、1つ以上の MongoDBスタイルクエリ に基づいて、レジストリ、コレクション、およびアーティファクトバージョンをフィルタリングします。

以下の表は、フィルタリングしたい項目の種類に基づいて使用できるクエリの名前を示しています。

クエリ名
registries name, description, created_at, updated_at
collections name, tag, description, created_at, updated_at
versions tag, alias, created_at, updated_at, metadata

以下のコード例は、一般的な検索シナリオを示しています。

wandb.Api().registries() メソッドを使用するには、まず W&B Python SDK (wandb) ライブラリをインポートします。

import wandb

# (オプション)読みやすさのために、wandb.Api() クラスのインスタンスを作成します。
api = wandb.Api()

model という文字列を含むすべてのレジストリをフィルタリングします。

# `model` という文字列を含むすべてのレジストリをフィルタリングします。
registry_filters = {
    "name": {"$regex": "model"}
}

# フィルタに一致するすべてのレジストリの反復可能なオブジェクトを返します
registries = api.registries(filter=registry_filters)

レジストリに関係なく、コレクション名に yolo という文字列を含むすべてのコレクションをフィルタリングします。

# レジストリに関係なく、コレクション名に 
# `yolo` という文字列を含むすべてのコレクションをフィルタリングします。
collection_filters = {
    "name": {"$regex": "yolo"}
}

# フィルタに一致するすべてのコレクションの反復可能なオブジェクトを返します
collections = api.registries().collections(filter=collection_filters)

レジストリに関係なく、コレクション名に yolo という文字列を含み、cnn というタグを持つすべてのコレクションをフィルタリングします。

# レジストリに関係なく、コレクション名に 
# `yolo` という文字列を含み、`cnn` というタグを持つすべてのコレクションをフィルタリングします。
collection_filters = {
    "name": {"$regex": "yolo"},
    "tag": "cnn"
}

# フィルタに一致するすべてのコレクションの反復可能なオブジェクトを返します
collections = api.registries().collections(filter=collection_filters)

model という文字列を含むすべてのアーティファクトバージョンを検索し、image-classification というタグまたは latest エイリアスを持っているもの:

# `model` という文字列を含むすべてのアーティファクトバージョンを検索し、
# `image-classification` というタグまたは `latest` エイリアスを持っているもの。
registry_filters = {
    "name": {"$regex": "model"}
}

# 論理 $or 演算子を使用してアーティファクトバージョンをフィルタリングします
version_filters = {
    "$or": [
        {"tag": "image-classification"},
        {"alias": "production"}
    ]
}

# フィルタに一致するすべてのアーティファクトバージョンの反復可能なオブジェクトを返します
artifacts = api.registries(filter=registry_filters).collections().versions(filter=version_filters)

詳細については、MongoDB ドキュメントの logical query operators を参照してください。

前述のコードスニペット内の artifacts の反復可能なオブジェクトの各項目は、Artifact クラスのインスタンスです。つまり、各アーティファクトの属性(namecollectionaliasestagscreated_at など)にアクセスできます。

for art in artifacts:
    print(f"artifact name: {art.name}")
    print(f"collection artifact belongs to: { art.collection.name}")
    print(f"artifact aliases: {art.aliases}")
    print(f"tags attached to artifact: {art.tags}")
    print(f"artifact created at: {art.created_at}\n")

アーティファクトオブジェクトの属性の完全なリストについては、API Reference docs の Artifacts Class を参照してください。

レジストリやコレクションに関係なく、2024-01-08 から 2025-03-04 の 13:10 UTC の間に作成されたすべてのアーティファクトバージョンをフィルタリングします。

# 2024-01-08 から 2025-03-04 の 13:10 UTC の間に作成された
# すべてのアーティファクトバージョンを検索します。

artifact_filters = {
    "alias": "latest",
    "created_at" : {"$gte": "2024-01-08", "$lte": "2025-03-04 13:10:00"},
}

# フィルタに一致するすべてのアーティファクトバージョンの反復可能なオブジェクトを返します
artifacts = api.registries().collections().versions(filter=artifact_filters)

日付と時刻は YYYY-MM-DD HH:MM:SS の形式で指定します。日付のみでフィルタリングしたい場合は、時間、分、秒を省略することができます。

詳細は、MongoDB ドキュメントの query comparisons を参照してください。

9 - コレクションに注釈を付ける

コレクションに人間が理解しやすいテキストを追加して、ユーザーがコレクションの目的とその中に含まれるアーティファクトを理解するのを助けます。

コレクションに応じて、トレーニングデータ、モデルアーキテクチャー、タスク、ライセンス、参考文献、デプロイメントに関する情報を含めることをお勧めします。以下は、コレクションで文書化する価値のあるトピックのリストです。

W&Bは少なくともこれらの詳細を含めることを推奨します。

  • 概要: コレクションの目的。機械学習実験に使用された機械学習フレームワーク。
  • ライセンス: 機械学習モデルの使用に関連する法的条件と許可。モデルのユーザーがどの法的枠組みの下でモデルを利用できるかを理解するのに役立ちます。一般的なライセンスには、Apache 2.0、MIT、GPL などがあります。
  • 参考文献: 関連する研究論文、データセット、または外部リソースへの引用または参考文献。

コレクションにトレーニングデータが含まれている場合は、以下の詳細を考慮してください。

  • トレーニングデータ: 使用したトレーニングデータの説明
  • プロセッシング: トレーニングデータセットに対して行われたプロセッシング。
  • データストレージ: そのデータがどこに保存されていて、どのようにアクセスするか。

コレクションに機械学習モデルが含まれている場合は、以下の詳細を考慮してください。

  • アーキテクチャー: モデルのアーキテクチャー、レイヤー、および特定のデザイン選択に関する情報。
  • タスク: コレクションモデルが実行するように設計された特定のタスクまたは問題の種類。モデルの意図された能力のカテゴリ分けです。
  • モデルをデシリアライズ: あなたのチームの誰かがモデルをメモリにロードする方法に関する情報を提供してください。
  • タスク: 機械学習モデルが実行するように設計された特定のタスクまたは問題の種類。モデルの意図された能力のカテゴリ分けです。
  • デプロイメント: モデルがどのように、どこでデプロイされるかに関する詳細、およびワークフローのオーケストレーションプラットフォームなどの他の企業システムにモデルを統合する方法に関するガイダンス。

コレクションに説明を追加する

W&B Registry UIまたはPython SDKを使用して、インタラクティブまたはプログラム的にコレクションに説明を追加します。

  1. https://wandb.ai/registry/でW&B Registryにアクセスします。
  2. コレクションをクリックします。
  3. コレクション名の横にある詳細を表示を選択します。
  4. 説明フィールド内で、コレクションに関する情報を提供します。Markdownマークアップ言語でテキストをフォーマットします。

wandb.Api().artifact_collection() メソッドを使用してコレクションの説明にアクセスします。返されたオブジェクトの description プロパティを使用してコレクションに説明を追加または更新します。

type_nameパラメータにはコレクションのタイプを、nameパラメータにはコレクションの完全な名前を指定します。コレクションの名前は「wandb-registry」、レジストリの名前、およびコレクションの名前をスラッシュで区切ったものです:

wandb-registry-{REGISTRY_NAME}/{COLLECTION_NAME}

以下のコードスニペットをあなたのPythonスクリプトまたはノートブックにコピーペーストします。角括弧で囲まれた値 (<>) をあなた独自のものに置き換えてください。

import wandb

api = wandb.Api()

collection = api.artifact_collection(
  type_name = "<collection_type>", 
  name = "<collection_name>"
  )


collection.description = "This is a description."
collection.save()  

例えば、以下の画像は、モデルのアーキテクチャー、意図された使用法、パフォーマンス情報などをドキュメントしているコレクションを示しています。

モデルアーキテクチャー、意図された使用法、パフォーマンス情報などに関する情報が記載されたコレクションカード。

10 - リネージ マップを作成および表示する

W&B Registry でリネージ マップを作成する。

W&B レジストリ内のコレクションでは、ML 実験が使用するアーティファクトの履歴を確認することができます。この履歴は リネージグラフ と呼ばれます。

コレクションの一部ではないアーティファクトに対しても、W&Bにログを記録したリネージグラフを表示することができます。

リネージグラフは、アーティファクトをログする特定の run を表示できます。さらに、リネージグラフはどの run がアーティファクトを入力として使用したかも表示できます。言い換えると、リネージグラフはrun の入力と出力を表示できます。

例えば、次の画像は ML 実験全体で作成および使用されたアーティファクトを示しています。

左から右に、画像は以下を示しています。

  1. 複数の runs が split_zoo_dataset:v4 アーティファクトをログします。
  2. “rural-feather-20” run は split_zoo_dataset:v4 アーティファクトをトレーニング用に使用します。
  3. “rural-feather-20” run の出力は zoo-ylbchv20:v0 というモデルのアーティファクトです。
  4. “northern-lake-21” という run はモデルを評価するために zoo-ylbchv20:v0 モデルアーティファクトを使用します。

run の入力をトラックする

wandb.init.use_artifact API を使用して、run の入力または依存関係としてアーティファクトをマークします。

次のコードスニペットは、use_artifact の使用方法を示しています。山括弧 (< >) で囲まれた値をあなたの値に置き換えてください。

import wandb

# run を初期化する
run = wandb.init(project="<project>", entity="<entity>")

# アーティファクトを取得し、依存関係としてマークする
artifact = run.use_artifact(artifact_or_name="<name>", aliases="<alias>")

run の出力をトラックする

作成したアーティファクトの出力を run の出力として宣言するには、(wandb.init.log_artifact) を使用します。

次のコードスニペットは、wandb.init.log_artifact API の使用方法を示しています。山括弧 (< >) で囲まれた値をあなたの値に置き換えるようにしてください。

import wandb

# run を初期化する
run = wandb.init(entity  "<entity>", project = "<project>",)
artifact = wandb.Artifact(name = "<artifact_name>", type = "<artifact_type>")
artifact.add_file(local_path = "<local_filepath>", name="<optional-name>")

# アーティファクトをログとして run の出力にする
run.log_artifact(artifact_or_path = artifact)

アーティファクトの作成に関する詳細については、Create an artifact を参照してください。

コレクション内のリネージグラフを表示する

W&B レジストリ内のコレクションにリンクされたアーティファクトのリネージを表示します。

  1. W&B レジストリに移動します。
  2. アーティファクトを含むコレクションを選択します。
  3. ドロップダウンから、リネージグラフを表示したいアーティファクトのバージョンをクリックします。
  4. 「Lineage」タブを選択します。

アーティファクトのリネージグラフのページに移動すると、そのリネージグラフ内の任意のノードに関する追加情報を表示できます。

run ノードを選択して、その run の詳細(run の ID、run の名前、run の状態など)を表示します。例として、次の画像は rural-feather-20 run に関する情報を示しています。

アーティファクトノードを選択して、そのアーティファクトの詳細(完全な名前、タイプ、作成時間、関連するエイリアスなど)を表示します。

11 - レガシー モデルレジストリ から移行する

W&B は旧 W&B モデルレジストリ から新しい W&B レジストリ への資産の移行を行います。この移行は W&B が完全に管理し、ユーザーの介入を必要としません。このプロセスは、既存のワークフローに最小限の影響を与えるよう、できる限りシームレスに行うよう設計されています。

移行は、新しい W&B レジストリが現在のモデルレジストリで利用可能なすべての機能を含んだ時点で行われます。W&B は、現在のワークフロー、コードベース、参照を維持するよう努めます。

このガイドは常に更新され、新しい情報が得られるたびに更新されます。質問やサポートが必要な場合は、support@wandb.com に問い合わせてください。

W&B レジストリが旧モデルレジストリと異なる点

W&B レジストリは、モデル、データセット、およびその他のアーティファクトを管理するための、より強力で柔軟な環境を提供するよう設計された新機能と強化を導入します。

組織の公開範囲

旧モデルレジストリにリンクされたアーティファクトはチームレベルの公開範囲を持っています。つまり、チームのメンバーだけが旧 W&B モデルレジストリでアーティファクトを閲覧できます。W&B レジストリは組織レベルの公開範囲を持っています。つまり、適切な権限を持つ組織全体のメンバーがレジストリにリンクされたアーティファクトを閲覧できます。

レジストリへの公開範囲の制限

カスタムレジストリの表示とアクセスを誰ができるかを制限します。カスタムレジストリの作成時または作成後に、レジストリへの公開範囲を制限できます。制限されたレジストリでは、選択したメンバーのみがコンテンツにアクセスでき、プライバシーとコントロールを維持します。レジストリの公開範囲の詳細については、レジストリの公開範囲の種類を参照してください。

カスタムレジストリの作成

旧モデルレジストリとは異なり、W&B レジストリはモデルやデータセットレジストリに限定されません。特定のワークフローやプロジェクトニーズに合わせたカスタムレジストリを作成し、任意のオブジェクトタイプを保持できるようにします。この柔軟性により、チームは独自の要件に従ってアーティファクトを組織し、管理できるようになります。カスタムレジストリの作成方法について詳しくは、カスタムレジストリの作成を参照してください。

カスタムアクセス制御

各レジストリは詳細なアクセス制御をサポートし、メンバーには管理者、メンバー、ビューアーなどの特定の役割を割り当てることができます。管理者はレジストリの設定を管理し、メンバーの追加や削除、役割の設定、公開範囲の設定を行います。これにより、チームはレジストリ内のアーティファクトを誰が表示、管理、操作できるかを制御する必要があります。

用語の更新

登録されたモデルは現在、コレクション と呼ばれています。

変更点の概要

旧 W&B モデルレジストリ W&B レジストリ
アーティファクトの公開範囲 チームのメンバーのみがアーティファクトを閲覧またはアクセス可能 組織内のメンバーが、適切な権限を持ってレジストリにリンクされたアーティファクトを閲覧またはアクセス可能
カスタムアクセス制御 利用不可 利用可能
カスタムレジストリ 利用不可 利用可能
用語の更新 モデルバージョンへのポインタ (リンク) のセットは 登録されたモデル と呼ばれる。 アーティファクトバージョンへのポインタ (リンク) のセットは コレクション と呼ばれる。
wandb.init.link_model モデルレジストリ固有のAPI 現在は旧モデルレジストリでのみ互換性あり

移行の準備

W&B は登録されたモデル(現在はコレクションと呼ばれる)と関連するアーティファクトバージョンを旧モデルレジストリから W&B レジストリに移行します。このプロセスは自動的に行われ、ユーザーからのアクションは不要です。

チーム公開範囲から組織公開範囲へ

移行後、モデルレジストリは組織レベルの公開範囲を持つようになります。レジストリへのアクセスを制限するには、役割の割り当て を行うことができます。これにより、特定のメンバーのみが特定のレジストリにアクセスできるようにするのに役立ちます。

この移行は、旧 W&B モデルレジストリでの現在のチームレベルの登録モデル(まもなくコレクションと呼ばれる)の既存の許可境界を維持します。旧モデルレジストリで定義された権限は新しいレジストリでも維持されます。つまり、特定のチームメンバーに制限されているコレクションは、移行中および移行後も引き続き保護されます。

アーティファクトのパスの連続性

現在、アクションは不要です。

移行中

W&B が移行プロセスを開始します。移行は W&B サービスへの影響を最小限に抑える時間枠で行われます。移行が開始されると、旧モデルレジストリは読み取り専用の状態に移行し、参照用にアクセス可能なままになります。

移行後

移行後、コレクション、アーティファクトバージョン、および関連する属性は、新しい W&B レジストリ内で完全にアクセス可能になります。現在のワークフローを維持することに重点を置いており、変更に対応するためのサポートも提供されています。

新しいレジストリの使用

ユーザーは W&B レジストリで利用可能な新機能と機能を探索することが奨励されています。レジストリは、現在依存している機能をサポートするだけでなく、カスタムレジストリ、改善された公開範囲、および柔軟なアクセス制御などの強化機能も導入しています。

W&B レジストリを早期に試してみたい方や、旧 W&B モデルレジストリではなくレジストリで始めたい新しいユーザーの方にはサポートが提供されています。サポート@wandb.comまたはセールス MLE に連絡して、この機能を有効にします。なお、早期移行は BETA バージョンへの移行となります。W&B レジストリの BETA バージョンには、旧モデルレジストリのすべての機能または機能が含まれていない場合があります。

詳細と W&B レジストリの完全な機能範囲について学ぶには、W&B レジストリガイドを訪れてください。

FAQ

なぜ W&B はモデルレジストリから W&B レジストリへの資産を移行するのですか?

W&B は、新しいレジストリでより高度な機能と能力を提供するために、そのプラットフォームを進化させています。この移行は、モデル、データセット、およびその他のアーティファクトを管理するための、より統合された強力なツールセットを提供するための一歩です。

移行前に何をすべきですか?

移行前にユーザーからのアクションは必要ありません。W&B が移行を処理し、ワークフローと参照を維持することを保証します。

モデルアーティファクトへのアクセスは失われますか?

いいえ、移行後もモデルアーティファクトへのアクセスは維持されます。旧モデルレジストリは読み取り専用の状態で維持され、すべての関連データは新しいレジストリに移行されます。

アーティファクトに関連するメタデータは維持されますか?

はい、アーティファクトの作成、リネージ、その他の属性に関連する重要なメタデータは移行中に維持されます。ユーザーは、移行後もすべての関連するメタデータにアクセスできるため、アーティファクトの完全性と追跡可能性が維持されます。

助けが必要な場合は誰に連絡すればよいですか?

質問や懸念がある場合のサポートは利用可能です。support@wandb.com に問い合わせてサポートを受けてください。

12 - モデルレジストリ

モデルレジストリでトレーニングからプロダクションまでのモデルライフサイクルを管理する

W&B Model Registry は、チームのトレーニングされたモデルを収納し、MLプラクティショナーがプロダクションに向けた候補を公開し、下流のチームや関係者に消費させることができます。これは、ステージング/候補モデルを収容し、ステージングに関連するワークフローを管理するために使用されます。

W&B Model Registry を使用すると、以下が可能です:

仕組み

ステージングされたモデルを数ステップで追跡し、管理します。

  1. モデルバージョンをログする:トレーニングスクリプトに数行のコードを追加して、モデルファイルをアーティファクトとして W&B に保存します。
  2. パフォーマンスを比較する:ライブチャートをチェックして、トレーニングと検証からのメトリクスやサンプル予測を比較します。どのモデルバージョンが最もよくパフォーマンスしたかを特定します。
  3. レジストリにリンクする:ベストなモデルバージョンを登録済みモデルにリンクしてブックマークします。これは Python でプログラム的に、または W&B UI でインタラクティブに行うことができます。

以下のコードスニペットは、モデルを Model Registry にログし、リンクする方法を示しています:

import wandb
import random

# 新しい W&B run を開始
run = wandb.init(project="models_quickstart")

# モデルメトリクスをシミュレーションしてログする
run.log({"acc": random.random()})

# シミュレートされたモデルファイルを作成
with open("my_model.h5", "w") as f:
    f.write("Model: " + str(random.random()))

# モデルを Model Registry にログし、リンクする
run.link_model(path="./my_model.h5", registered_model_name="MNIST")

run.finish()
  1. モデルの移行を CI/CD ワークフローに接続する:候補モデルをワークフローステージを通して移行し、下流のアクションをオートメーション化することを Webhook を使って行います。

開始方法

ユースケースに応じて、W&B Models を使い始めるための以下のリソースを探ります。

12.1 - Tutorial: W&B を使ったモデル管理

W&B を活用したモデル管理の使い方を学ぶ

W&B にモデルをログする方法を示す次のウォークスルーに従ってください。このウォークスルーの終わりまでに次のことができるようになります:

  • MNIST データセットと Keras フレームワークを使用してモデルを作成およびトレーニングします。
  • トレーニングしたモデルを W&B プロジェクトにログします。
  • 作成したモデルの依存関係として使用したデータセットをマークします。
  • モデルを W&B Registry にリンクします。
  • レジストリにリンクしたモデルのパフォーマンスを評価します。
  • モデルバージョンをプロダクション用に準備完了としてマークします。

セットアップ

始める前に、このウォークスルーに必要な Python の依存関係をインポートします:

import wandb
import numpy as np
from tensorflow import keras
from tensorflow.keras import layers
from wandb.integration.keras import WandbMetricsLogger
from sklearn.model_selection import train_test_split

entity 変数に W&B エンティティを指定します:

entity = "<entity>"

データセット アーティファクトを作成する

まず、データセットを作成します。次のコードスニペットは、MNIST データセットをダウンロードする関数を作成します:

def generate_raw_data(train_size=6000):
    eval_size = int(train_size / 6)
    (x_train, y_train), (x_eval, y_eval) = keras.datasets.mnist.load_data()

    x_train = x_train.astype("float32") / 255
    x_eval = x_eval.astype("float32") / 255
    x_train = np.expand_dims(x_train, -1)
    x_eval = np.expand_dims(x_eval, -1)

    print("Generated {} rows of training data.".format(train_size))
    print("Generated {} rows of eval data.".format(eval_size))

    return (x_train[:train_size], y_train[:train_size]), (
        x_eval[:eval_size],
        y_eval[:eval_size],
    )

# データセットを作成
(x_train, y_train), (x_eval, y_eval) = generate_raw_data()

次に、データセットを W&B にアップロードします。これを行うには、artifact オブジェクトを作成し、そのアーティファクトにデータセットを追加します。

project = "model-registry-dev"

model_use_case_id = "mnist"
job_type = "build_dataset"

# W&B run を初期化
run = wandb.init(entity=entity, project=project, job_type=job_type)

# トレーニングデータ用に W&B Table を作成
train_table = wandb.Table(data=[], columns=[])
train_table.add_column("x_train", x_train)
train_table.add_column("y_train", y_train)
train_table.add_computed_columns(lambda ndx, row: {"img": wandb.Image(row["x_train"])})

# 評価データ用に W&B Table を作成
eval_table = wandb.Table(data=[], columns=[])
eval_table.add_column("x_eval", x_eval)
eval_table.add_column("y_eval", y_eval)
eval_table.add_computed_columns(lambda ndx, row: {"img": wandb.Image(row["x_eval"])})

# アーティファクトオブジェクトを作成
artifact_name = "{}_dataset".format(model_use_case_id)
artifact = wandb.Artifact(name=artifact_name, type="dataset")

# wandb.WBValue オブジェクトをアーティファクトに追加
artifact.add(train_table, "train_table")
artifact.add(eval_table, "eval_table")

# アーティファクトに加えられた変更を永続化
artifact.save()

# W&B にこの run が完了したことを知らせます
run.finish()

モデルのトレーニング

前のステップで作成したアーティファクトデータセットを使用してモデルをトレーニングします。

データセットアーティファクトを run の入力として宣言

前のステップで作成したデータセットアーティファクトを W&B run の入力として宣言します。これにより、特定のモデルをトレーニングするために使用されたデータセット(およびデータセットのバージョン)を追跡できるため、モデルをログに記録するという文脈で特に便利です。W&B は収集された情報を使用して、lineage map を作成します。

use_artifact API を使用して、データセットアーティファクトを run の入力として宣言し、アーティファクト自体を取得します。

job_type = "train_model"
config = {
    "optimizer": "adam",
    "batch_size": 128,
    "epochs": 5,
    "validation_split": 0.1,
}

# W&B run を初期化
run = wandb.init(project=project, job_type=job_type, config=config)

# データセットアーティファクトを取得
version = "latest"
name = "{}:{}".format("{}_dataset".format(model_use_case_id), version)
artifact = run.use_artifact(artifact_or_name=name)

# データフレームから特定のコンテンツを取得
train_table = artifact.get("train_table")
x_train = train_table.get_column("x_train", convert_to="numpy")
y_train = train_table.get_column("y_train", convert_to="numpy")

モデルの入力と出力を追跡する方法の詳細については、Create model lineage mapを参照してください。

モデルの定義とトレーニング

このウォークスルーでは、Keras を使用して MNIST データセットから画像を分類するための 2D 畳み込みニューラルネットワーク (CNN) を定義します。

MNIST データに対する CNN のトレーニング
# 設定辞書から値を取得して変数に格納(アクセスしやすくするため)
num_classes = 10
input_shape = (28, 28, 1)
loss = "categorical_crossentropy"
optimizer = run.config["optimizer"]
metrics = ["accuracy"]
batch_size = run.config["batch_size"]
epochs = run.config["epochs"]
validation_split = run.config["validation_split"]

# モデルアーキテクチャを作成
model = keras.Sequential(
    [
        layers.Input(shape=input_shape),
        layers.Conv2D(32, kernel_size=(3, 3), activation="relu"),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Conv2D(64, kernel_size=(3, 3), activation="relu"),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Flatten(),
        layers.Dropout(0.5),
        layers.Dense(num_classes, activation="softmax"),
    ]
)
model.compile(loss=loss, optimizer=optimizer, metrics=metrics)

# トレーニングデータのラベルを生成
y_train = keras.utils.to_categorical(y_train, num_classes)

# トレーニングセットとテストセットを作成
x_t, x_v, y_t, y_v = train_test_split(x_train, y_train, test_size=0.33)

次に、モデルをトレーニングします:

# モデルをトレーニング
model.fit(
    x=x_t,
    y=y_t,
    batch_size=batch_size,
    epochs=epochs,
    validation_data=(x_v, y_v),
    callbacks=[WandbCallback(log_weights=True, log_evaluation=True)],
)

最後に、モデルをローカルマシンに保存します:

# モデルをローカルに保存
path = "model.h5"
model.save(path)

モデルを Model Registry にログし、リンクする

link_model API を使用して、一つまたは複数のファイルを W&B run にログし、それを W&B Model Registry にリンクします。

path = "./model.h5"
registered_model_name = "MNIST-dev"

run.link_model(path=path, registered_model_name=registered_model_name)
run.finish()

指定した名前の registered-model-name がまだ存在しない場合、W&B は登録されたモデルを作成します。

オプションのパラメータに関する詳細は、API リファレンスガイドの link_model を参照してください。

モデルのパフォーマンスを評価する

複数のモデルのパフォーマンスを評価するのは一般的な手法です。

まず、前のステップで W&B に保存された評価データセットアーティファクトを取得します。

job_type = "evaluate_model"

# 初期化
run = wandb.init(project=project, entity=entity, job_type=job_type)

model_use_case_id = "mnist"
version = "latest"

# データセットアーティファクトを取得し、それを依存関係としてマーク
artifact = run.use_artifact(
    "{}:{}".format("{}_dataset".format(model_use_case_id), version)
)

# 必要なデータフレームを取得
eval_table = artifact.get("eval_table")
x_eval = eval_table.get_column("x_eval", convert_to="numpy")
y_eval = eval_table.get_column("y_eval", convert_to="numpy")

評価したい W&B からのモデルバージョン をダウンロードします。use_model API を使用してモデルにアクセスし、ダウンロードします。

alias = "latest"  # エイリアス
name = "mnist_model"  # モデルアーティファクトの名前

# モデルにアクセスしダウンロードします。ダウンロードされたアーティファクトへのパスを返します
downloaded_model_path = run.use_model(name=f"{name}:{alias}")

Keras モデルをロードし、損失を計算します:

model = keras.models.load_model(downloaded_model_path)

y_eval = keras.utils.to_categorical(y_eval, 10)
(loss, _) = model.evaluate(x_eval, y_eval)
score = (loss, _)

最後に、損失のメトリクスを W&B run にログします:

# メトリクス、画像、テーブル、または評価に役立つデータをログします。
run.log(data={"loss": (loss, _)})

モデルバージョンを昇格する

モデルエイリアス を使用して、機械学習ワークフローの次のステージに準備が整ったモデルバージョンをマークします。各登録済みモデルは 1 つまたは複数のモデルエイリアスを持つことができます。モデルエイリアスは、1 度に 1 つのモデルバージョンにのみ所属できます。

例えば、モデルのパフォーマンスを評価した後、そのモデルがプロダクションの準備が整ったと確信したとします。モデルバージョンを昇格させるために、特定のモデルバージョンに production エイリアスを追加します。

W&B アプリ UI を使用してインタラクティブに、または Python SDK を使用してプログラムでモデルバージョンにエイリアスを追加できます。次のステップは、W&B Model Registry App を使用してエイリアスを追加する方法を示しています:

  1. https://wandb.ai/registry/model の Model Registry App に移動します。
  2. 登録されているモデルの名前の横にある View details をクリックします。
  3. Versions セクション内で、プロモーションしたいモデルバージョンの名前の横にある View ボタンをクリックします。
  4. Aliases フィールドの隣にあるプラスアイコン (+) をクリックします。
  5. 表示されるフィールドに production と入力します。
  6. キーボードの Enter キーを押します。

12.2 - モデルレジストリの用語と概念

モデルレジストリの用語と概念

以下の用語は、W&B モデルレジストリの主要な構成要素を説明します: model versionmodel artifact、および registered model

Model version

モデルバージョンは、単一のモデルチェックポイントを表します。モデルバージョンは、実験内のモデルとそのファイルのある時点でのスナップショットです。

モデルバージョンは、訓練されたモデルを記述するデータとメタデータの不変なディレクトリーです。W&B は、後でモデルのアーキテクチャーと学習されたパラメータを保存(および復元)できるように、ファイルをモデルバージョンに追加することを推奨しています。

モデルバージョンは、1つだけの model artifact に属します。モデルバージョンは、ゼロまたは複数の registered models に属する場合があります。モデルバージョンは、model artifact にログされる順序で格納されます。同じ model artifact にログされたモデルの内容が以前のモデルバージョンと異なる場合、W&B は自動的に新しいモデルバージョンを作成します。

モデリングライブラリによって提供されるシリアライズプロセスから生成されたファイルをモデルバージョン内に保存します(例:PyTorchKeras)。

Model alias

モデルエイリアスは、登録されたモデル内でモデルバージョンを一意に識別または参照するための可変文字列です。登録されたモデルのバージョンにだけエイリアスを割り当てることができます。これは、エイリアスがプログラム的に使用されたとき、一意のバージョンを指す必要があるためです。エイリアスは、モデルの状態(チャンピオン、候補、プロダクション)をキャプチャするためにも使用されます。

“best”、“latest”、“production”、“staging” のようなエイリアスを使用して、特定の目的を持つモデルバージョンにマークを付けることは一般的です。

たとえば、モデルを作成し、それに “best” エイリアスを割り当てたとします。その特定のモデルを run.use_model で参照できます。

import wandb
run = wandb.init()
name = f"{entity/project/model_artifact_name}:{alias}"
run.use_model(name=name)

Model tags

モデルタグは、1つ以上の登録されたモデルに属するキーワードまたはラベルです。

モデルタグを使用して、登録されたモデルをカテゴリに整理し、モデルレジストリの検索バーでそれらのカテゴリを検索します。モデルタグは Registered Model Card の上部に表示されます。ML タスク、所有チーム、または優先順位に基づいて登録モデルをグループ化するために使用することもできます。同じモデルタグを複数の登録されたモデルに追加してグループ化を可能にします。

Model artifact

モデルアーティファクトは、ログされた model versions のコレクションです。モデルバージョンは、model artifact にログされた順序で保存されます。

モデルアーティファクトには1つ以上のモデルバージョンが含まれる場合があります。モデルバージョンがログされていない場合、モデルアーティファクトは空です。

たとえば、モデルアーティファクトを作成するとします。モデルのトレーニング中に、定期的にチェックポイントでモデルを保存します。各チェックポイントはその独自の model version に対応しています。トレーニングスクリプトの開始時に作成した同じモデルアーティファクトに、モデルトレーニング中とチェックポイント保存中に作成されたすべてのモデルバージョンが保存されます。

以下の画像は、3つのモデルバージョン v0、v1、v2 を含むモデルアーティファクトを示しています。

モデルアーティファクトの例はこちらをご覧ください。

Registered model

登録モデルは、モデルバージョンへのポインタ(リンク)のコレクションです。登録モデルを、同じ ML タスク用の候補モデルの「ブックマーク」フォルダーとして考えることができます。登録モデルの各「ブックマーク」は、model artifact に属する model version へのポインタです。model tags を使用して登録モデルをグループ化することができます。

登録モデルは、単一のモデリングユースケースやタスクに対する候補モデルを表すことがよくあります。たとえば、使用するモデルに基づいて異なる画像分類タスクの登録モデルを作成するかもしれません:ImageClassifier-ResNet50ImageClassifier-VGG16DogBreedClassifier-MobileNetV2 など。モデルバージョンは、登録モデルにリンクされた順にバージョン番号が割り当てられます。

登録モデルの例はこちらをご覧ください。

12.3 - モデルを追跡する

W&B Python SDK を使用して、モデル、モデルの依存関係、およびそのモデルに関連するその他の情報を追跡します。

モデル、モデルの依存関係、およびそのモデルに関連するその他の情報を W&B Python SDK を使用して追跡します。

内部的には、W&B は モデルアーティファクト のリネージを作成し、W&B アプリ UI で表示したり、W&B Python SDK を使用してプログラム的に確認することができます。詳細は モデルリネージマップの作成 を参照してください。

モデルをログする方法

run.log_model API を使用してモデルをログします。モデルファイルが保存されているパスを path パラメータに提供してください。このパスはローカルファイル、ディレクトリー、または s3://bucket/path のような外部バケットへのリファレンス URI のいずれかにすることができます。

オプションでモデルアーティファクトの名前を name パラメータに指定できます。name が指定されていない場合、W&B は入力パスのベース名を実行 ID を前に付けたものとして使用します。

以下のコードスニペットをコピーして貼り付けてください。<> で囲まれた値をあなた自身のものに置き換えてください。

import wandb

# W&B run を初期化
run = wandb.init(project="<project>", entity="<entity>")

# モデルをログする
run.log_model(path="<path-to-model>", name="<name>")
例: Keras モデルを W&B にログする

以下のコード例は、畳み込みニューラルネットワーク (CNN) モデルを W&B にログする方法を示します。

import os
import wandb
from tensorflow import keras
from tensorflow.keras import layers

config = {"optimizer": "adam", "loss": "categorical_crossentropy"}

# W&B run を初期化
run = wandb.init(entity="charlie", project="mnist-project", config=config)

# トレーニングアルゴリズム
loss = run.config["loss"]
optimizer = run.config["optimizer"]
metrics = ["accuracy"]
num_classes = 10
input_shape = (28, 28, 1)

model = keras.Sequential(
    [
        layers.Input(shape=input_shape),
        layers.Conv2D(32, kernel_size=(3, 3), activation="relu"),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Conv2D(64, kernel_size=(3, 3), activation="relu"),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Flatten(),
        layers.Dropout(0.5),
        layers.Dense(num_classes, activation="softmax"),
    ]
)

model.compile(loss=loss, optimizer=optimizer, metrics=metrics)

# モデルを保存
model_filename = "model.h5"
local_filepath = "./"
full_path = os.path.join(local_filepath, model_filename)
model.save(filepath=full_path)

# モデルをログする
run.log_model(path=full_path, name="MNIST")

# W&B に対して明示的に run の終了を通知します。
run.finish()

12.4 - 登録済みモデルを作成する

モデル作成のタスクのために、すべての候補モデルを保持する Registered Model を作成します。

registered model を作成し、モデリングタスクのすべての候補モデルを保持します。モデルレジストリ内でインタラクティブに、または Python SDK を使用してプログラム的に registered model を作成できます。

プログラムで registered model を作成する

W&B Python SDK を使用してモデルを登録します。registered model が存在しない場合、W&B は自動的に registered model を作成します。

<> で囲まれた他の値をあなた自身のもので置き換えてください:

import wandb

run = wandb.init(entity="<entity>", project="<project>")
run.link_model(path="<path-to-model>", registered_model_name="<registered-model-name>")
run.finish()

registered_model_name に指定した名前は Model Registry App に表示される名前です。

インタラクティブに registered model を作成する

Model Registry App でインタラクティブに registered model を作成します。

  1. Model Registry App に移動します: https://wandb.ai/registry/model
  2. Model Registry ページの右上にある New registered model ボタンをクリックします。
  3. 表示されたパネルから、registered model が属するエンティティを Owning Entity ドロップダウンから選択します。
  4. Name フィールドにモデルの名前を入力します。
  5. Type ドロップダウンから、registered model とリンクするアーティファクトのタイプを選択します。
  6. (オプション) Description フィールドにモデルについての説明を追加します。
  7. (オプション) Tags フィールドに1つ以上のタグを追加します。
  8. Register model をクリックします。

12.5 - モデルバージョンをリンクする

モデル バージョンを登録されたモデルに、W&B アプリまたは Python SDK を使ってプログラム的にリンクします。

モデルのバージョンを W&B App または Python SDK を使用してプログラムで登録済みのモデルにリンクします。

プログラムでモデルをリンクする

link_model メソッドを使用して、プログラムでモデルファイルを W&B run にログし、それを W&B モデルレジストリ にリンクします。

<>で囲まれた値を自分のものに置き換えることを忘れないでください:

import wandb

run = wandb.init(entity="<entity>", project="<project>")
run.link_model(path="<path-to-model>", registered_model_name="<registered-model-name>")
run.finish()

指定した registered-model-name パラメータの名前が既に存在しない場合、W&B は登録済みのモデルを自動的に作成します。

例えば、既に “Fine-Tuned-Review-Autocompletion” という名前の登録済みモデル(registered-model-name="Fine-Tuned-Review-Autocompletion")がモデルレジストリにあり、それにいくつかのモデルバージョンがリンクされているとします: v0v1v2。新しいモデルをプログラムでリンクし、同じ登録済みモデル名を使用した場合(registered-model-name="Fine-Tuned-Review-Autocompletion")、W&B はこのモデルを既存の登録済みモデルにリンクし、モデルバージョン v3 を割り当てます。この名前の登録済みモデルが存在しない場合、新しい登録済みモデルが作成され、モデルバージョン v0 を持ちます。

“Fine-Tuned-Review-Autocompletion” 登録済みモデルの一例をここでご覧ください.

インタラクティブにモデルをリンクする

インタラクティブにモデルレジストリまたはアーティファクトブラウザでモデルをリンクします。

  1. https://wandb.ai/registry/model のモデルレジストリアプリに移動します。
  2. 新しいモデルをリンクしたい登録済みモデルの名前の横にマウスをホバーします。
  3. View details の横のミートボールメニューアイコン(三つの水平な点)を選択します。
  4. ドロップダウンメニューから Link new version を選択します。
  5. Project ドロップダウンからモデルを含むプロジェクトの名前を選択します。
  6. Model Artifact ドロップダウンからモデルアーティファクトの名前を選択します。
  7. Version ドロップダウンから登録済みモデルにリンクしたいモデルバージョンを選択します。
  1. W&B App でプロジェクトのアーティファクトブラウザに移動します: https://wandb.ai/<entity>/<project>/artifacts
  2. 左側のサイドバーで Artifacts アイコンを選択します。
  3. リストにあなたのモデルを表示したいプロジェクトを表示します。
  4. モデルのバージョンをクリックして、モデルレジストリにリンクします。
  5. 画面右側に表示されるモーダルから、Select a register model メニュードロップダウンから登録済みモデルを選択します。
  6. Next step をクリックします。
  7. (オプション)Aliases ドロップダウンからエイリアスを選択します。
  8. Link to registry をクリックします。

リンクされたモデルのソースを表示する

リンクされたモデルのソースを表示する方法は2つあります: モデルがログされているプロジェクト内のアーティファクトブラウザと W&B モデルレジストリです。

モデルレジストリ内の特定のモデルバージョンを、(そのモデルがログされているプロジェクト内に位置する)ソースモデルアーティファクトと接続するポインタがあります。ソースモデルアーティファクトにもモデルレジストリへのポインタがあります。

  1. https://wandb.ai/registry/model でモデルレジストリに移動します。
  2. 登録済みモデルの名前の横で View details を選択します。
  3. Versions セクション内で調査したいモデルバージョンの横にある View を選択します。
  4. 右パネル内の Version タブをクリックします。
  5. Version overview セクション内に Source Version フィールドを含む行があります。Source Version フィールドはモデルの名前とそのバージョンを示しています。

例えば、次の画像は v0 モデルバージョンである mnist_modelSource version フィールド mnist_model:v0 を参照)を登録済みモデル MNIST-dev にリンクしていることを示しています。

  1. W&B App でプロジェクトのアーティファクトブラウザに移動します: https://wandb.ai/<entity>/<project>/artifacts
  2. 左側のサイドバーで Artifacts アイコンを選択します。
  3. アーティファクトパネルから model ドロップダウンメニューを展開します。
  4. モデルレジストリにリンクされたモデルの名前とバージョンを選択します。
  5. 右パネル内の Version タブをクリックします。
  6. Version overview セクション内に Linked To フィールドを含む行があります。Linked To フィールドは、登録済みモデルの名前とそれに属するバージョンを示しています(registered-model-name:version)。

例えば、次の画像では、MNIST-dev という登録済みモデルがあります(Linked To フィールドを参照)。バージョン v0 のモデルバージョン mnist_modelmnist_model:v0)が MNIST-dev 登録済みモデルを指しています。

12.6 - モデルを整理する

モデルタグを使用して登録済みのモデルをカテゴリーに整理し、それらのカテゴリーを検索します。

  1. https://wandb.ai/registry/model で W&B モデルレジストリアプリに移動します。

  2. モデルタグを追加したい登録済みモデルの名前の横にある View details を選択します。

  3. Model card セクションまでスクロールします。

  4. Tags フィールドの横にあるプラスボタン (+) をクリックします。

  5. タグの名前を入力するか、既存のモデルタグを検索します。 例えば、次の画像は FineTuned-Review-Autocompletion という登録済みモデルに複数のモデルタグが追加されている様子を示しています。

12.7 - モデルリネージ マップを作成する

このページでは、従来の W&B Model Registry でのリネージグラフの作成について説明します。W&B Registry でのリネージグラフについて学ぶには、リネージマップの作成と表示を参照してください。

モデルアーティファクトを W&B にログする際の便利な機能の一つにリネージグラフがあります。リネージグラフは、run によってログされたアーティファクトと特定の run で使用されたアーティファクトを表示します。

つまり、モデルアーティファクトをログする際には、少なくともモデルアーティファクトを使用または生成した W&B run を表示するためのアクセスが可能です。依存関係を追跡する場合、モデルアーティファクトで使用された入力も見ることができます。

例えば、以下の画像では、ML 実験全体で作成および使用されたアーティファクトが示されています。

画像は左から右に向かって次のように示しています。

  1. jumping-monkey-1 W&B run によって mnist_dataset:v0 のデータセットアーティファクトが作成されました。
  2. vague-morning-5 W&B run は mnist_dataset:v0 データセットアーティファクトを使用してモデルをトレーニングしました。この W&B run の出力は mnist_model:v0 というモデルアーティファクトでした。
  3. serene-haze-6 という run は mnist_model:v0 のモデルアーティファクトを使用してモデルを評価しました。

アーティファクトの依存関係を追跡

データセットアーティファクトを W&B run の入力として宣言することで、use_artifact API を使用して依存関係を追跡できます。

以下のコードスニペットでは、use_artifact API の使用方法を示します。

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

# アーティファクトを取得し、依存関係としてマーク
artifact = run.use_artifact(artifact_or_name="name", aliases="<alias>")

アーティファクトを取得した後、そのアーティファクトを使用して(例えば)、モデルのパフォーマンスを評価できます。

例: モデルを訓練し、データセットをモデルの入力として追跡
job_type = "train_model"

config = {
    "optimizer": "adam",
    "batch_size": 128,
    "epochs": 5,
    "validation_split": 0.1,
}

run = wandb.init(project=project, job_type=job_type, config=config)

version = "latest"
name = "{}:{}".format("{}_dataset".format(model_use_case_id), version)

artifact = run.use_artifact(name)

train_table = artifact.get("train_table")
x_train = train_table.get_column("x_train", convert_to="numpy")
y_train = train_table.get_column("y_train", convert_to="numpy")

# 設定辞書から変数に値を保存して簡単にアクセス
num_classes = 10
input_shape = (28, 28, 1)
loss = "categorical_crossentropy"
optimizer = run.config["optimizer"]
metrics = ["accuracy"]
batch_size = run.config["batch_size"]
epochs = run.config["epochs"]
validation_split = run.config["validation_split"]

# モデルアーキテクチャーの作成
model = keras.Sequential(
    [
        layers.Input(shape=input_shape),
        layers.Conv2D(32, kernel_size=(3, 3), activation="relu"),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Conv2D(64, kernel_size=(3, 3), activation="relu"),
        layers.MaxPooling2D(pool_size=(2, 2)),
        layers.Flatten(),
        layers.Dropout(0.5),
        layers.Dense(num_classes, activation="softmax"),
    ]
)
model.compile(loss=loss, optimizer=optimizer, metrics=metrics)

# トレーニングデータのラベルを生成
y_train = keras.utils.to_categorical(y_train, num_classes)

# トレーニングセットとテストセットの作成
x_t, x_v, y_t, y_v = train_test_split(x_train, y_train, test_size=0.33)

# モデルのトレーニング
model.fit(
    x=x_t,
    y=y_t,
    batch_size=batch_size,
    epochs=epochs,
    validation_data=(x_v, y_v),
    callbacks=[WandbCallback(log_weights=True, log_evaluation=True)],
)

# モデルをローカルに保存
path = "model.h5"
model.save(path)

path = "./model.h5"
registered_model_name = "MNIST-dev"
name = "mnist_model"

run.link_model(path=path, registered_model_name=registered_model_name, name=name)
run.finish()

12.8 - モデルバージョンをダウンロードする

W&B Python SDK で モデル をダウンロードする方法

W&B Python SDK を使用して、Model Registry にリンクしたモデルアーティファクトをダウンロードします。

<> の中の値を自身のものに置き換えてください:

import wandb

# Run を初期化
run = wandb.init(project="<project>", entity="<entity>")

# モデルへのアクセスとダウンロード。ダウンロードしたアーティファクトへのパスを返します
downloaded_model_path = run.use_model(name="<your-model-name>")

モデルバージョンを以下のいずれかの形式で参照します:

  • latest - 最も最近リンクされたモデルバージョンを指定するために latest エイリアスを使用します。
  • v# - 特定のバージョンを取得するために v0v1v2 などを使用します。
  • alias - モデルバージョンに対してチームが設定したカスタムエイリアスを指定します。

API リファレンスガイドの use_model を参照して、使用可能なパラメータと返り値の型についての詳細を確認してください。

例:ログされたモデルをダウンロードして使用する

例えば、以下のコードスニペットでは、ユーザーが use_model API を呼び出しています。彼らは取得したいモデルアーティファクトの名前を指定し、さらにバージョン/エイリアスも提供しています。その後、API から返されたパスを downloaded_model_path 変数に格納しています。

import wandb

entity = "luka"
project = "NLP_Experiments"
alias = "latest"  # モデルバージョンのセマンティックニックネームまたは識別子
model_artifact_name = "fine-tuned-model"

# Run を初期化
run = wandb.init()
# モデルへのアクセスとダウンロード。ダウンロードしたアーティファクトへのパスを返します

downloaded_model_path = run.use_model(name=f"{entity/project/model_artifact_name}:{alias}")

<> の中の値を自身のものに置き換えてください:

import wandb
# Run を初期化
run = wandb.init(project="<project>", entity="<entity>")
# モデルへのアクセスとダウンロード。ダウンロードしたアーティファクトへのパスを返します
downloaded_model_path = run.use_model(name="<your-model-name>")

モデルバージョンを以下のいずれかの形式で参照します:

  • latest - 最も最近リンクされたモデルバージョンを指定するために latest エイリアスを使用します。
  • v# - 特定のバージョンを取得するために v0v1v2 などを使用します。
  • alias - モデルバージョンに対してチームが設定したカスタムエイリアスを指定します。

API リファレンスガイドの use_model を参照して、使用可能なパラメータと返り値の型についての詳細を確認してください。

  1. https://wandb.ai/registry/model の Model Registry App に移動します。
  2. ダウンロードしたいモデルを含む登録済みモデル名の隣にある 詳細を見る を選択します。
  3. バージョンセクション内で、ダウンロードしたいモデルバージョンの隣にある表示ボタンを選択します。
  4. ファイル タブを選択します。
  5. ダウンロードしたいモデルファイルの隣にあるダウンロードボタンをクリックします。

12.9 - 機械学習モデルを文書化する

モデル カードに説明を追加して、モデルをドキュメント化する

モデルレジストリに登録されたモデルのモデルカードに説明を追加して、機械学習モデルの側面を文書化します。文書化する価値があるトピックには以下のものがあります:

  • Summary: モデルの概要。モデルの目的。モデルが使用する機械学習フレームワークなど。
  • Training data: 使用したトレーニングデータについて、トレーニングデータセットで行ったプロセッシング、そのデータがどこに保存されているかなどを説明します。
  • Architecture: モデルのアーキテクチャー、レイヤー、および特定の設計選択に関する情報。
  • Deserialize the model: チームの誰かがモデルをメモリにロードする方法についての情報を提供します。
  • Task: 機械学習モデルが実行するよう設計された特定のタスクや問題のタイプ。モデルの意図された能力の分類です。
  • License: 機械学習モデルの使用に関連する法的条件と許可。モデルユーザーが法的な枠組みのもとでモデルを利用できることを理解するのに役立ちます。
  • References: 関連する研究論文、データセット、または外部リソースへの引用や参照。
  • Deployment: モデルがどのように、そしてどこにデプロイメントされているのか、他の企業システムにどのように統合されているかに関するガイダンスを含む詳細。

モデルカードに説明を追加する

  1. https://wandb.ai/registry/model で W&B モデルレジストリ アプリに移動します。
  2. モデルカードを作成したい登録済みモデル名の横にある View details を選択します。
  3. Model card セクションに移動します。
  4. Description フィールド内に、機械学習モデルに関する情報を入力します。モデルカード内のテキストは Markdown マークアップ言語 でフォーマットします。

例えば、次の画像は Credit-card Default Prediction という登録済みモデルのモデルカードを示しています。

12.10 - アラートと通知を作成する

新しいモデルバージョンがモデルレジストリにリンクされた時に Slack 通知を受け取る。

新しいモデルバージョンがモデルレジストリにリンクされたときに、Slack 通知を受け取る。

  1. https://wandb.ai/registry/model で W&B Model Registry アプリを開きます。
  2. 通知を受け取りたい登録済みモデルを選択します。
  3. Connect Slack ボタンをクリックします。
  4. OAuth ページに表示される Slack ワークスペースで W&B を有効にするための指示に従います。

チームのために Slack 通知を設定すると、通知を受け取る登録済みモデルを選択できます。

下のスクリーンショットは Slack 通知が設定された FMNIST 分類器の登録済みモデルを示しています。

新しいモデルバージョンが FMNIST 分類器の登録済みモデルにリンクされるたびに、接続された Slack チャンネルにメッセージが自動的に投稿されます。

12.11 - データ ガバナンスとアクセス コントロールを管理する

モデルレジストリのロールベース アクセス制御 (RBAC) を使用して、誰が保護されたエイリアスを更新できるかを制御します。

保護されたエイリアス を使用して、モデル開発パイプラインの主要なステージを表現します。モデルレジストリ管理者 のみが保護されたエイリアスを追加、変更、または削除できます。モデルレジストリ管理者は保護されたエイリアスを定義し、使用することができます。W&B は非管理ユーザーがモデルバージョンから保護されたエイリアスを追加または削除することをブロックします。

例えば、stagingproduction を保護されたエイリアスとして設定したとします。チームのどのメンバーも新しいモデルバージョンを追加できますが、staging または production エイリアスを追加できるのは管理者のみです。

アクセス制御の設定

次の手順で、チームのモデルレジストリに対するアクセス制御を設定します。

  1. W&B モデルレジストリアプリケーションに移動します:https://wandb.ai/registry/model
  2. ページ右上のギアボタンを選択します。
  3. Manage registry admins ボタンを選択します。
  4. Members タブ内で、モデルバージョンから保護されたエイリアスを追加および削除するアクセス権を付与したいユーザーを選択します。

保護されたエイリアスの追加

  1. W&B モデルレジストリアプリケーションに移動します:https://wandb.ai/registry/model
  2. ページ右上のギアボタンを選択します。
  3. Protected Aliases セクションまでスクロールダウンします。
  4. プラスアイコン (+) をクリックして新しいエイリアスを追加します。