モデルレジストリの変更でCI/CDイベントをトリガーする
自動化することで、ワークフローのステップ、例えば自動モデルテストやデプロイをトリガーすることができます。自動化を作成するには、イベントタイプに基づいて発生させたいアクションを定義します。
例えば、新しいバージョンの登録済みモデルを追加した時に、自動でモデルをGitHubにデプロイするトリガーを作成することができます。
イベントタイプ
イベントとは、W&Bエコシステム内で発生する変更のことです。モデルレジストリは、新しいアーティファクトを登録済みモデルにリンクするおよび登録済みモデルのバージョンに新しいエイリアスを追加するという2つのイベントタイプをサポートしています。
モデルバージョンのリンク方法についてはLink a model versionを、アーティファクトのエイリアスに関する情報についてはCreate a custom aliasを参照してください。
新しいモデル候補をテストするためには、新しいアーティファクトを登録済みモデルにリンクするイベントタイプを使用します。deploy
のような特定のワークフローのステップを示すエイリアスを指定するには、登録済みモデルのバージョンに新しいエイリアスを追加するイベントタイプを使用します。
アクションタイプ
アクションは、あるトリガーの結果として発生する応答的な変化(内部または外部)です。モデルレジストリで作成できるアクションには2種類あります: webhooksと W&B Launch Jobsです。
- Webhooks: HTTPリクエストを使用してW&Bから外部のWebサーバーと通信します。
- W&B Launch Job: Jobsは、ローカルデスクトップやKubernetes on EKS、Amazon SageMakerなどの外部コンピュートリソース上で新しいrunsを迅速に開始するための再利用可能で設定可能なテンプレートです。
以下のセクションでは、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 リクエストがシークレットを使用しない場合は、このセクションをスキップしてください。
- Azure、GCP、またはAWSデプロイメントでW&B Serverを使用している場合もシークレットが利用可能です。異なるデプロイメントタイプを使用している場合のシークレットの使用方法については、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を設定する際に使用するシークレットを指定します。詳細については、Configure a webhookセクションを参照してください。
シークレットを作成すると、W&Bワークフロー内で$
を使用してそのシークレットにアクセスできます。
W&B Serverでシークレットを使用する場合の考慮事項:
セキュリティ要件を満たすセキュリティ対策を構成するのはユーザーの責任です。
W&Bは、シークレットをAWS、GCP、またはAzureが提供するクラウドシークレットマネージャーのW&Bインスタンスに保存することを強く推奨します。AWS、GCP、およびAzureが提供するシークレットマネージャーは、高度なセキュリティ機能を備えています。
シークレットストアのバックエンドとしてKubernetesクラスターを使用することは推奨しません。Kubernetesクラスターの使用を検討するのは、AWS、GCP、またはAzureのクラウドシークレットマネージャーのW&Bインスタンスを使用できず、クラスターを使用する場合に発生する可能性のあるセキュリティ脆弱性を防ぐ方法を理解している場合に限ります。
Webhookの設定
Webhookを使用する前に、まずW&B App UIでそのWebhookを設定します。
- WebhookをW&Bチームのために設定できるのはW&B管理者のみです。
- 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が設定され(任意でシークレットも設定されている)場合、Model Registry Appにアクセスします 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ボタンをクリックします。
ペイロードの例
一般的なユースケースに基づいたペイロードの例を以下のタブで示します。例の中で、ペイロードパラメータの条件オブジェクトを指す次のキーが参照されています:
${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ドキュメントを参照してください。
W&Bからリポジトリディスパッチを送信してGitHubアクションをトリガーします。例えば、on
キーのトリガーとしてリポジトリディスパッチを受け入れるワークフローがあるとします:
on:
repository_dispatch:
types: BUILD_AND_DEPLOY
リポジトリのペイロードは次のようになります:
{
"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 Marketplaceの公式ドキュメントを参照してください。
Webhook Automations for Model EvaluationとWebhook Automations for Model DeploymentのYouTubeビデオを参照して、モデル評価とデプロイのためのオートメーションを作成するステップバイステップのビデオをご覧ください。
このW&Bレポートを参照して、GitHub Actions Webhook Automation for Model CIの使用方法を学びます。このGitHubリポジトリをチェックして、Modal Labs WebhookでModel CIを作成する方法を学びましょう。
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 Token
として指定されたシークレットが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 App UIまたはBashスクリプトを使用してインタラクティブにWebhookをトラブルシュートします。Webhookを新しく作成する際や既存のWebhookを編集する際にトラブルシュートできます。
- W&B App UI
- Bash script
W&B App UIを使用してインタラクティブにWebhookをテストします。
- W&B Team Settingsページに移動します。
- Webhooksセクションまでスクロールします。
- Webhookの名前の横にある水平の3つのドット(ミートボールアイコン)をクリックします。
- Testを選択します。
- 表示されたUIパネルにPOSTリクエストをフィールドに貼り付けます。
- Test webhookをクリックします。
W&B App UI内で、W&Bはエンドポイントによって行われたレスポンスを投稿します。
Testing Webhooks in Weights & BiasesのYouTubeビデオを参照して、現実世界の例を確認してください。
以下のbashスクリプトは、W&BがWebhookオートメーションをトリガーしたときに送信するPOSTリクエストを生成します。
以下のコードをシェルスクリプトにコピー&ペーストしてWebhookをトラブルシュートします。次の値に自分の値を指定してください。
ACCESS_TOKEN
SECRET
PAYLOAD
API_ENDPOINT
#!/bin/bash
# Your access token and secret
ACCESS_TOKEN="your_api_key"
SECRET="your_api_secret"
# The data you want to send (for example, in JSON format)
PAYLOAD='{"key1": "value1", "key2": "value2"}'
# Generate the HMAC signature
# For security, Wandb includes the X-Wandb-Signature in the header computed
# from the payload and the shared secret key associated with the webhook
# using the HMAC with SHA-256 algorithm.
SIGNATURE=$(echo -n "$PAYLOAD" | openssl dgst -sha256 -hmac "$SECRET" -binary | base64)
# Make the cURL request
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 ドキュメントを参照してください。
- Event typeドロップダウンからイベントタイプを選択します。サポートされているイベントについてはEvent typeセクションを参照してください。
- (任意) A new version is added to a registered modelイベントを選択した場合、Registered modelドロップダウンから登録モデルの名前を指定します。
- JobsをAction typeドロップダウンから選択します。
- JobドロップダウンからW&B Launchジョブを選択します。
- Job versionドロップダウンからバージョンを選択します。
- (任意) 新しいジョブのためのハイパーパラメーターの上書きを指定します。
- Destination projectドロップダウンからプロジェクトを選択します。
- ジョブをキューに追加するキューを選択します。
- Next stepをクリックします。
- Automation nameフィールドにWebhookオートメーションの名前を入力します。
- (任意) Webhookの説明を入力します。
- Create automationボタンをクリックします。
この例を参照してくださいレポートで、W&B Launchを使用してモデルCIのためのオートメーションを作成する方法をご確認ください。
オートメーションを表示する
W&B App UIから登録モデルに関連付けられたオートメーションを表示する。
- Model Registry Appに移動します。
- 登録モデルを選択します。
- ページの下部にスクロールしてAutomationsセクションを見つけます。
Automationsセクションには、選択したモデルに対して作成されたオートメーションの次のプロパティが表示されます:
- Trigger type: 設定されたトリガーのタイプ。
- Action type: オートメーションをトリガーするアクションタイプ。利用可能なオプションはWebhooksとLaunchです。
- Action name: オートメーションを作成する際に指定したアクション名。
- Queue: ジョブがキューに追加されたキューの名前。このフィールドは、Webhookアクションタイプを選択した場合は空白のままです。
オートメーションを削除する
オートメーションに関連付けられたモデルを削除します。アクションが完了する前にオートメーションを削除した場合でも、進行中のアクションには影響ありません。