
SageMaker AIのモデルカードとモデルダッシュボードを触ってみた
はじめに
おはようございます〜
クラウド事業統括本部/プロフェッショナルサービス事業本部/運用イノベーション部の三ツ口寛太です(╹◡╹)
AWS認定試験の勉強をしていて、Amazon SageMaker AIが気になったので、実機で触ってみることにしました🧑💻
とはいえ、SageMaker AIは機能が多く、いきなり学習ジョブやエンドポイントを動かすのはハードルが高いです。
そこで今回は、モデルの説明書にあたる モデルカード(Model Cards)と、モデルを一覧で見るモデルダッシュボード(Model Dashboard)に絞って、コンソールで触ってみました。学習もデプロイもしないので、約1-2時間で試せます。
この記事で分かること
- SageMaker AIのモデルカードで、何を書けるのか
- 実在するモデルがなくても、モデルカードを作れるのか
- モデルダッシュボードに、モデルカードが出てくる条件
- モデルカードをSageMakerのモデルに紐づけるときのつまずきポイント
こだわりポイント
- 学習ジョブやエンドポイントは作りません
- 入力値は架空の「解約予測モデル」で統一しました。そのまま真似できます
- うまくいかなかったエラーも、そのまま載せます
先に結論
- モデルカードは、実在するモデルがなくても単体で作れる
- 単体で作ったカードは、モデルダッシュボードには出ない。ダッシュボードの対象は、SageMakerのモデルやエンドポイント
- カードを「AWSリソースのモデル」に紐づけると、ダッシュボードのリスク評価の列に、カードの値が表示される
- 紐づけるモデルにS3のアーティファクトがないと、
ValidationExceptionで作成できない
今回の検証環境
| 項目 | 内容 |
|---|---|
| リージョン | 東京(ap-northeast-1) |
| 触る機能 | SageMaker AI の Model Cards、Model Dashboard |
| 使うモデル | 架空の解約予測モデル(学習は行わない) |
やってみた
1. メニューの場所を確認する
SageMaker AIのコンソールの左ナビに、Model governance があります。その下に「モデルダッシュボード」と「モデルカード」が並んでいます。

2. モデルカードを作る
「モデルカード」→「モデルカードを作成」を押します。4つのステップがあります。入力値は架空の解約予測モデルです。
入力値の一覧
ステップ1:モデルの詳細と使用目的
| 項目 | 値 |
|---|---|
| モデルカード名 | kensho-modelcard |
| ステータス | 下書き |
| 暗号化キー | オフ(デフォルト) |
| 「AWSリソースです」 | チェックなし |
| モデル名 | sample-churn-predictor |
| モデルID | sample-churn-001 |
| モデルの説明 | 顧客の解約可能性を予測する架空のモデル。検証用。 |
| モデルバージョン | 1 |
| 問題のタイプ | 二項分類 |
| アルゴリズムタイプ | 勾配ブースティングツリー |
| モデル作成者/所有者 | 検証チーム |
| ビジネス上の問題 | サブスクリプションサービスの解約を事前に予測し、解約防止施策の対象を絞り込みたい。 |
| ビジネスステークホルダー | カスタマーサクセス部門(架空) |
| 基幹業務 | 顧客維持 |
| リスク評価 | 中 |
使用目的
【一般的な目的】顧客の解約可能性をスコア化する。
【想定ユースケース】解約防止施策(フォローメールなど)の優先順位づけ。
【想定外のユースケース】個人の与信判断、採用・人事評価、サービス利用の拒否など、個人に不利益を与える判断の根拠にしない。
【前提条件】過去12か月の利用履歴が揃っている顧客のみを対象とする。
ステップ2:トレーニングの詳細
| 項目 | 値 |
|---|---|
| 最適化の方向 | Minimize |
| メトリクス | Loss |
| 説明 | 二値分類の標準的な損失関数 |
トレーニングジョブ名、結果、ハイパーパラメータは空欄にしました。
ステップ3:評価結果
何も追加せずに進みました。
ステップ4:追加情報
- 倫理的な考慮事項:顧客の行動データを扱うため、利用目的を顧客に周知し、必要最小限のデータのみを使用する。年齢・性別など属性による予測の偏りがないか、運用前に確認する。
- 注意事項とレコメンデーション:予測結果は担当者の判断を補助する目的に限り、予測だけで顧客への対応を自動的に決定しない。定期的に精度とデータの傾向を見直す。
ステップ1:モデルの詳細と使用目的
モデルカード名、ステータス、モデル名などを入力します。「このモデルは AWS リソースです」は、今回は存在しないモデルなのでチェックしません。

「問題のタイプ」と「アルゴリズムタイプ」はプルダウンで選びます。アルゴリズムの候補にXGBoostはなかったので、近い「勾配ブースティングツリー」を選びました。

「使用目的」には、一般的な目的、想定ユースケース、想定外のユースケース、前提条件を書きます。「やってはいけない使い方」を明示できるのが、モデルカードらしい部分だと感じました。

リスク評価は「中」にしました。「想定どおりに使われた場合のリスク」を選ぶ項目で、理由も書けます。

ステップ2:トレーニングの詳細
目的関数(最適化の方向、メトリクス)と備考を入力しました。学習はしていないので、観察結果には「実際のトレーニングは行っていない」と書いています。

トレーニングジョブ名などを空欄のまま進めても、エラーにはなりませんでした。

ステップ3:評価結果
評価結果は、何も追加せずに次へ進めました。

ステップ4:追加情報
倫理的な考慮事項と、注意事項とレコメンデーションを入力して送信します。

作成できると、一覧にカードが表示されます。

3. モデルダッシュボードを見る
「モデルダッシュボード」を開きます。先ほど作ったカードは、一覧に出ません。「現在リソースはありません」と表示されます。
画面の説明に「すべての SageMaker モデル、エンドポイント、およびモニタリングアラートを表示します」とあるとおり、ダッシュボードの対象は、SageMakerのモデルやエンドポイントです。カード単体は対象外のようです。

また、画面上部に「モデルモニターは、新規のお客様にはご利用いただけなくなりました」という警告が出ていました。このダッシュボードの「モデルの質」「データ品質」などの列は、モデルモニターと連携するものなので、今回は使わないことにします。
4. モデルカードをモデルに紐づける
ダッシュボードにカードのリスク評価を出すために、SageMakerのモデルを作って紐づけてみます。エンドポイントは作りません。
4-1. モデルを作る(アーティファクトなし)
「Deployments & inference」→「Models」→「モデルの作成」から、次の値で作ります。
| 項目 | 値 |
|---|---|
| モデル名 | sample-churn-model |
| IAMロール | 新規作成(S3バケットは「なし」) |
| 推論コードイメージ | 下記のXGBoostのURI |
| アーティファクトの場所 | 空欄 |
推論コードイメージには、ECRのURIが必要です。公式ドキュメントのリージョン別のパスのページは見つからなかったので、CloudShellで、SageMaker Python SDKから取得しました。
pip install "sagemaker<3"
python3 -c "from sagemaker import image_uris; print(image_uris.retrieve('xgboost', 'ap-northeast-1', '1.7-1'))"
354813040037.dkr.ecr.ap-northeast-1.amazonaws.com/sagemaker-xgboost:1.7-1
モデルは作成できました。
4-2. カードをクローンして紐づける → エラー
先ほどのカードを「クローン」して、「このモデルは AWS リソースです」にチェックを入れ、モデル名に sample-churn-model を指定します。「モデルの詳細を検索」を押すと、モデルのARNと推論環境が自動入力されます。ただし、モデルアーティファクトは空欄でした。

このまま送信すると、次のエラーになりました。
ValidationException
The document is not valid model_overview.model_artifact.0: Invalid type. Expected: string, given: null.

アーティファクトが空のまま送られて、入力チェックで弾かれたのだと思います。
4-3. アーティファクト付きのモデルを作る
CloudShellで、ダミーのアーティファクトをS3に置きます。バケット名には sagemaker を含めています。
BUCKET=sagemaker-sample-churn-$RANDOM$RANDOM
aws s3api create-bucket --bucket $BUCKET --region ap-northeast-1 --create-bucket-configuration LocationConstraint=ap-northeast-1
echo "dummy" > dummy.txt && tar czf model.tar.gz dummy.txt && aws s3 cp model.tar.gz s3://$BUCKET/model/model.tar.gz
echo s3://$BUCKET/model/model.tar.gz
最後に表示される s3://…/model/model.tar.gz が、アーティファクトのURIです。中身は「dummy」と書いた1行のファイルなので、モデルとしては動きません。
モデルを、sample-churn-model-v2 という名前で作り直します(同名は使えないため)。アーティファクトの場所に、上のS3のURIを指定します。
4-4. 再度クローンして紐づける
もう一度カードをクローンし、モデル名に sample-churn-model-v2 を指定して「モデルの詳細を検索」を押します。今度は、モデルアーティファクトにS3のURIが自動入力されました。

「AWSリソースです」にチェックを入れたクローンでは、モデル名、説明、バージョン、問題のタイプ、アルゴリズムタイプが空になるので、入力し直しました。
送信すると、カードを作成できました。

4-5. ダッシュボードで確認する
モデルダッシュボードを開くと、紐づけた sample-churn-model-v2 の行だけ、リスク評価の列に「中」が表示されました。紐づけていない sample-churn-model は「-」です。

結果のまとめ
| 確認したこと | 結果 |
|---|---|
| 実在するモデルなしで、カードを作れるか | 作れた |
| 学習ジョブ名などを空欄で進められるか | 進められた |
| 単体のカードが、ダッシュボードに出るか | 出ない |
| アーティファクトなしのモデルに紐づけられるか | ValidationException で不可 |
| アーティファクト付きのモデルに紐づけると | ダッシュボードにリスク評価「中」が出る |
注意点
- エンドポイントは作らない:今回は、モデルの作成までにとどめています
- モデル名は変更できない:モデルカードの作成後は変更できないと、画面に注意書きがあります
- 後片付け:モデルカード2枚、モデル2つ、S3バケット、IAMロールを削除しました
まとめ
SageMaker AIのモデルカードとモデルダッシュボードを、学習もデプロイもせずに触ってみました。
- カード単体は簡単に作れますが、ダッシュボードには出ません
- 紐づけるには、S3のアーティファクト付きのモデルが必要でした
- 紐づけると、ダッシュボードにリスク評価が表示されました
モデルカードには「想定外のユースケース」を書く欄があり、やってはいけない使い方まで残しておけるのが印象的でした。モデルダッシュボードは、モデルが増えたときにリスクの高いものを探す入口になりそうです。
「モデルカード」という言葉だけ知っている方は、一度触ってみると、イメージがつかみやすいと思います。
最後に
本日の写真はこちら!(ででん)

北海道は函館山に行った時の写真です!
日本3大夜景と呼ばれてますが、日本にこんな綺麗な夜景があるのか、、と大感動したのを覚えています🌃
良すぎるので是非行ってみてください!
本日も最後までご覧いただきありがとうございました〜








