モデルレジストリの変更によるCI/CDイベントのトリガー
モデルの自動テストやデプロイメントなどのワークフローステップをトリガーするオートメーションを作成します。オートメーションを作成するには、イベントタイプに基づいて発生させたいアクションを定義します。
例えば、新しいバージョンの登録モデルを追加したときにモデルをGitHubに自動デプロイするトリガーを作成できます。
この YouTube動画 で、カスタムモデルおよび新しいモデルバージョンをW&BモデルレジストリからAmazon SageMaker Endpointsに自動デプロイする手順をステップバイステップでご覧ください。
イベントタイプ
イベントとは、W&Bエコシステム内で行われる変更のことです。モデルレジストリは、新しいアーティファクトを登録モデルにリンクする と 登録モデルのバージョンに新しいエイリアスを追加する の2つのイベントタイプをサポートしています。
新しいモデル候補をテストするには、新しいアーティファクトを登録モデルにリンクする イベントタイプを使用します。ワークフローの特別なステップ(例:deploy
)を表すエイリアスを指定するには、登録モデルのバージョンに新しいエイリアスを追加する イベントタイプを使用し、そのエイリアスを持つ新しいモデルバージョンが適用されるたびにこのイベントが発生します。
アクションタイプ
アクションとは、トリガーの結果として発生する内部または外部の変異です。モデルレジストリでは、webhooks と W&B Launch Jobs の2種類のアクションを作成できます。
- Webhooks: W&BからHTTPリクエストを介して外部のウェブサーバーと通信します。
- W&B Launchジョブ: Jobs は、デスクトップ上やKubernetes on EKS、Amazon SageMakerなど外部の計算リソースで新しいrunを迅速に起動できる再利用可能で設定可能なrunテンプレートです。
以下のセクションでは、webhooksとW&B Launchを使用したオートメーションの作成方法について説明します。
Webhookオートメーションを作成
W&B App UIを使ってアクションに基づくwebhookを自動化します。これを行うには、まずwebhookを設定し、次にwebhookオートメーションを構成します。
webhookのエンドポイントにはアドレスレコード(Aレコード)を指定してください。W&Bは、[0-255].[0-255].[0-255].[0.255]
のように直接IPアドレスで公開されているエンドポイントやlocalhost
として公開されているエンドポイントへの接続をサポートしていません。この制限は、サーバー側リクエスト偽装(SSRF)攻撃やその他の関連する脅威ベクターから保護するためです。
認証や認可のためのシークレットを追加
シークレットは、資格情報、APIキー、パスワード、トークンなどのプライベートな文字列を隠すためのチームレベルの変数です。W&Bは、平文の内容を保護したい文字列を保存するためにシークレットを使用することを推奨します。
webhookでシークレットを使用するには、まずそのシークレットをチームのシークレットマネージャに追加する必要があります。
- シークレットを作成、編集、削除できるのはW&B管理者のみです。
- HTTP POSTリクエストを送信する外部サーバーでシークレットを使用していない場合、このセクションはスキップしてください。
- W&B Server をAzure, GCP, またはAWSデプロイメントで使用している場合もシークレットを利用できます。異なるデプロイメントタイプを使用している場合、W&Bアカウントチームに連絡してシークレットの使用方法について相談してください。
W&Bがwebhookオートメーションを使用するときに作成を推奨するシークレットには次の2種類があります:
- トークンへのアクセス: 送信者を認可してwebhookリクエストを安全に扱うため
- シークレット: ペイロードから送信されるデータの信憑性と整合性を保証するため
以下の手順に従ってwebhookを作成してください:
- W&B App UIに移動します。
- Team Settingsをクリックします。
- ページをスクロールダウンし、Team secretsセクションを見つけます。
- New secretボタンをクリックします。
- モーダルが表示されます。Secret nameフィールドにシークレットの名前を入力します。
- Secretフィールドにシークレットを追加します。
- (オプション)webhookに追加のシークレットキーやトークンが必要な場合、ステップ5と6を繰り返して別のシークレット(例えば認証トークン)を作成します。
webhookを構成する際に使用するシークレットを指定します。詳細はWebhookを構成するセクションを参照してください。
シークレットを一度作成すると、W&Bのワークフロー内でそのシークレットに$
を使ってアクセスできます。
W&B Serverでシークレットを使用する場合の考慮点:
自分のセキュリティニーズを満たすためのセキュリティ対策を構成する責任があります。
W&Bは、シークレットをAWS、GCP、またはAzureによって提供されているクラウドシークレットマネージャーのW&Bインスタンスに保存することを強く推奨します。AWS、GCP、およびAzureによって提供されるシークレットマネージャーは、高度なセキュリティ機能を備えています。
シークレットストアのバックエンドとしてKubernetesクラスターを使用することはお勧めしません。Kubernetesクラスターを使用する場合、クラスタ使用によるセキュリティ脆弱性を防ぐ方法を理解していることが必要です。
Webhookを構成
webhookを使用する前に、まずW&B App UIでそのwebhookを構成する必要があります。
- W&B TeamのW&B管理者のみがwebhookを構成できます。
- webhookの認証に追加のシークレットキーやトークンが必要な場合、既に1つ以上のシークレットを作成したことを確認してください。
- W&B App UIに移動します。
- Team Settingsをクリックします。
- ページをスクロールダウンし、Webhooksセクションを見つけます。
- New webhookボタンをクリックします。
- Nameフィールドにwebhookの名前を入力します。
- URLフィールドにwebhookのエンドポイントURLを入力します。
- (オプション) Secret ドロップダウンメニューから、webhookペイロードの認証に使用するシークレットを選択します。
- (オプション) Access token ドロップダウンメニューから、送信者を認可するアクセス トークンを選択します。
- (オプション) Access token ドロップダウンメニューから、webhookの認証に必要な追加のシークレットキーまたはトークン(例えば認証トークン)を選択します。
POSTリクエストでシークレットと認証トークンがどこに指定されているかについては、Webhookのトラブルシューティングセクションを参照してください。
Webhookを追加
webhookを構成し、(オプションで)シークレットを設定したら、https://wandb.ai/registry/modelのモデルレジストリアプリに移動します。
- Event type ドロップダウンから、イベントタイプを選択します。
- (オプション) A new version is added to a registered model イベントを選択した場合、Registered model ドロップダウンから登録モデルの名前を指定します。
- Action type ドロップダウンからWebhooksを選択します。
- Next stepボタンをクリックします。
- Webhook ドロップダウンからwebhookを選択します。
- (オプション) JSONエディタにペイロードを入力します。一般的なユースケースの例についてはExample payloadセクションを参照してください。
- Next stepをクリックします。
- Automation name フィールドにwebhookオートメーションの名前を入力します。
- (オプション) webhookの説明を入力します。
- Create automation ボタンをクリックします。
Example payloads
以下のタブでは、一般的なユースケースに基づいたペイロードの例を示しています。これらの例では、ペイロードパラメータ内の条件オブジェクトを参照するための以下のキーが使用されています:
${event_type}
トリガーされたアクションのイベントタイプを参照${event_author}
トリガーされたアクションのユーザーを参照${artifact_version}
トリガーされたアクションの特定のアーティファクトバージョンを参照。アーティファクトインスタンスとして渡されます。${artifact_version_string}
トリガーされたアクションの特定のアーティファクトバージョンを参照。文字列として渡されます。${artifact_collection_name}
アーティファクトバージョンがリンクされているアーティファクトコレクションの名前を参照${project_name}
トリガーされたアクションの変更を所有するプロジェクトの名前を参照${entity_name}
トリガーされたアクションの変更を所有するエンティティの名前を参照
- GitHub repository dispatch
- Microsoft Teams notification
- Slack notifications
アクセス トークンにGHAワークフローをトリガーするために必要な権限が設定されていることを確認してください。 詳細については、こちらのGitHub Docsをご覧ください。
W&Bからリポジトリ ディスパッチを送信して、GitHubアクションをトリガーします。例えば、on
キーのトリガーとしてリポジトリ ディスパッチを受け入れるワークフローがあるとします:
on:
repository_dispatch:
types: BUILD_AND_DEPLY
リポジトリのペイロードは以下のようになります:
{
"event_type": "BUILD_AND_DEPLOY",
"client_payload":
{
"event_author": "${event_author}",
"artifact_version": "${artifact_version}",
"artifact_version_string": "${artifact_version_string}",
"artifact_collection_name": "${artifact_collection_name}",
"project_name": "${project_name}",
"entity_name": "${entity_name}"
}
}
webhookペイロードのevent_type
キーは、GitHubワークフローファイルのtypes
フィールドと一致する必要があります。
テンプレート文字列の内容と位置は、オートメーションが構成されているイベントまたはモデルバージョンに依存します。${event_type}
は"LINK_ARTIFACT"または"ADD_ARTIFACT_ALIAS"としてレンダーされます。以下に例のマッピングを示します:
${event_type} --> "LINK_ARTIFACT" または "ADD_ARTIFACT_ALIAS"
${event_author} --> "<wandb-user>"
${artifact_version} --> "wandb-artifact://_id/QXJ0aWZhY3Q6NTE3ODg5ODg3"
${artifact_version_string} --> "<entity>/model-registry/<registered_model_name>:<alias>"
${artifact_collection_name} --> "<registered_model_name>"
${project_name} --> "model-registry"
${entity_name} --> "<entity>"
テンプレート文字列を使用して、W&BからGitHub Actionsやその他のツールにコンテキストを動的に渡します。これらのツールがPythonスクリプトを呼び出すことができれば、W&B APIを通じて登録モデルアーティファクトを消費できます。
リポジトリ ディスパッチの詳細については、 GitHubマーケットプレイスの公式ドキュメントを参照してください。
モデル評価のためのWebhookオートメーション と モデルデプロイメントのためのWebhookオートメーション についてのステップバイステップのYouTube動画をご覧ください。
GitHub Actions webhookオートメーションを使用したModel CIの使い方については、こちらのW&B Reportを参照してください。Modal Labs webhookを使用してModel CIを作成する方法については、 このGitHubリポジトリを参照してください。
Teams ChannelのWebhook URLを取得するために、「Incoming Webhook」を設定します。以下は例のペイロードです:
{
"@type": "MessageCard",
"@context": "http://schema.org/extensions",
"summary": "New Notification",
"sections": [
{
"activityTitle": "Notification from WANDB",
"text": "This is an example message sent via Teams webhook.",
"facts": [
{
"name": "Author",
"value": "${event_author}"
},
{
"name": "Event Type",
"value": "${event_type}"
}
],
"markdown": true
}
]
}
実行時にW&Bデータをペイロードに挿入するために、テンプレート文字列を使用できます(上記のTeams例のように)。
あなたのSlackアプリをセットアップし、Slack API ドキュメントに記載されている手順に従って、インカミングWebhookインテグレーションを追加します。[Bot User OAuthトークン
]として指定されたシークレットをW&B webhookのアクセス トークンとして確保してください。
以下は例のペイロードです:
{
"text": "New alert from WANDB!",
"blocks": [
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "Registry event: ${event_type}"
}
},
{
"type":"section",
"text": {
"type": "mrkdwn",
"text": "New version: ${artifact_version_string}"
}
},
{
"type": "divider"
},
{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "Author: ${event_author}"
}
}
]
}
Webhook のトラブルシューティング
W&B アプリケーション の UI を使用して対話的に Webhook のトラブルシューティングを行うか、または Bash スクリプトを使用してプログラム的にトラブルシューティングを行います。新しい Webhook を作成する際や既存の Webhook を編集する際に、Webhook のトラブルシューティングを行うことができます。
- W&B アプリケーション UI
- Bash script
W&B アプリケーション UI を使用して Webhook を対話的にテストします。
- W&B Team Settings ページに移動します。
- Webhooks セクションまでスクロールします。
- Webhook の名前の横にある水平の三点(ミートボールアイコン)をクリックします。
- Test を選択します。
- 表示される UI パネルから、POST リクエストを表示されるフィールドに貼り付けます。
- Test webhook をクリックします。
W&B アプリケーション UI 内では、エンドポイントによって生成されたレスポンスが投稿されます。
実際の例については、Weights & Biases における Webhook のテストの YouTube ビデオをご覧ください。
以下の bash スクリプトは、W&B が Webhook 自動化をトリガーしたときに送信する POST リクエストに類似した POST リクエストを生成します。
以下のコードをシェルスクリプトにコピー&ペーストして、Webhook のトラブルシューティングを行います。以下の値を自分のものに置き換えてください。
ACCESS_TOKEN
SECRET
PAYLOAD
API_ENDPOINT
#!/bin/bash
# アクセストークンとシークレット
ACCESS_TOKEN="your_api_key"
SECRET="your_api_secret"
# 送信したいデータ(例:JSON形式)
PAYLOAD='{"key1": "value1", "key2": "value2"}'
# HMAC シグネチャを生成
# セキュリティのために、Wandb はヘッダに X-Wandb-Signature を含め
# ペイロードと Webhook に関連付けられた共有シークレット キーから
# HMAC with SHA-256 アルゴリズムを使用して計算します。
SIGNATURE=$(echo -n "$PAYLOAD" | openssl dgst -sha256 -hmac "$SECRET" -binary | base64)
# cURL リクエストの作成
curl -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "X-Wandb-Signature: $SIGNATURE" \
-d "$PAYLOAD" API_ENDPOINT
Launch 自動化を作成する
自動的に W&B ジョブを開始します。
このセクションは、すでにジョブ、キューが作成されており、アクティブなエージェントがポーリングしていることを前提としています。詳細については、W&B Launch docsをご覧ください。
- Event type ドロップダウンからイベントタイプを選択します。サポートされているイベントについては Event type セクションを参照してください。
- (オプション)A new version is added to a registered model イベントを選択した場合、Registered model ドロップダウンから登録されたモデルの名前を提供します。
- Action type ドロップダウンから Jobs を選択します。
- Job ドロップダウンから W&B Launch ジョブを選択します。
- Job version ドロップダウンからバージョンを選択します。
- (オプション)新しいジョブのハイパーパラメーターの上書きを提供します。
- Destination project ドロップダウンからプロジェクトを選択します。
- キューにジョブをエンキューします。
- Next step をクリックします。
- Automation name フィールドにWebhook自動化の名前を入力します。
- (オプション)Webhook の説明を提供します。
- Create automation ボタンをクリックします。
モデルCIで W&B Launch の自動化を作成する方法について、エンドツーエンドの例はこのレポートをご覧ください。
自動化を見る
W&B アプリケーション UI から登録されたモデルに関連する自動化を確認します。
- https://wandb.ai/registry/model の Model Registry アプリに移動します。
- 登録されたモデルを選択します。
- ページの下部にある Automations セクションまでスクロールします。
Automations セクション内では、選択したモデルに対して作成された自動化の以下のプロパティを確認できます:
- Trigger type: 設定されたトリガーのタイプ。
- Action type: 自動化をトリガーするアクションタイプ。利用可能なオプションは Webhooks と Launch です。
- Action name: 自動化を作成する際に提供されたアクション名。
- Queue: ジョブがエンキューされたキューの名前。Webhook アクションタイプを選択した場合、このフィールドは空のままです。
自動化を削除する
モデルに関連付けられた自動化を削除します。アクションが完了する前にその自動化を削除した場合でも、進行中のアクションには影響しません。
- https://wandb.ai/registry/model の Model Registry アプリに移動します。
- 登録されたモデルをクリックします。
- ページの下部にある Automations セクションまでスクロールします。
- 自動化の名前の横にカーソルを合わせ、垂直ドット(三点)メニューをクリックします。
- Delete を選択します。