View a markdown version of this page

SageMaker Model Registry に SageMaker AI モデルを自動的に登録する - Amazon SageMaker AI

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

SageMaker Model Registry に SageMaker AI モデルを自動的に登録する

MLflow モデルを登録すると、SageMaker AI は対応するモデルパッケージグループとモデルパッケージバージョンを SageMaker Model Registry に自動的に作成します。これにより、以下を実行することができます。

  • MLflow SDK または MLflow UI からモデルを登録します。

  • 推論仕様をアタッチして、SageMaker AI エンドポイントへの直接デプロイを有効にします。

  • モデルパッケージに含まれる評価メトリクスをモデルカードとしてログに記録します。

  • MLflow エイリアスを使用して、モデルライフサイクルステージ (ステージング、本番稼働) とステータス (保留中、アクティブ) を管理します。

  • IAM 条件キーとリソースタグベースのポリシーを使用して、ライフサイクルの移行と登録を制御します。

注記

モデルレジストリ同期はオプトイン機能です。これを有効にするには、モデルレジストリ同期が有効になっている UpdateMlflowTrackingServer または UpdateMlflowApp API を呼び出します。

モデルのログ記録と登録

このセクションでは、登録するモデルを準備し、SageMaker Model Registry に登録して、Studio で表示する方法について説明します。

必要な IAM 許可

MLflow 追跡サーバーまたは MLflow App IAM サービスロールに次のアクセス許可が必要です。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "sagemaker:CreateModelPackageGroup", "sagemaker:DescribeModelPackageGroup", "sagemaker:CreateModelPackage", "sagemaker:UpdateModelPackage", "sagemaker:AddTags", "sagemaker:CreateAction", "sagemaker:AddAssociation" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "s3:GetObject", "s3:PutObject", "s3:ListBucket" ], "Resource": "*" } ] }

MLflow Apps の IAM ロールの設定の詳細については、「」を参照してくださいMLflow アプリの IAM アクセス許可を設定する

登録するモデルを準備する

モデルを登録する前に、トレーニングの実行中にログに記録します。オプションで推論仕様と評価メトリクスをアタッチし、登録時に SageMaker AI モデルパッケージに引き継ぐことができます。

モデルのログ記録

MLflow SDK を使用して、トレーニングの実行中にモデルをログに記録します。

import mlflow from sklearn.datasets import make_regression from sklearn.ensemble import RandomForestRegressor from mlflow.models import infer_signature mlflow.set_tracking_uri(arn) mlflow.set_experiment("my-experiment") params = {"n_estimators": 3, "random_state": 42} X, y = make_regression(n_features=4, n_informative=2, random_state=0, shuffle=False) with mlflow.start_run() as run: model = RandomForestRegressor(**params).fit(X, y) signature = infer_signature(X, model.predict(X)) mlflow.log_params(params) model_info = mlflow.sklearn.log_model( model, name="sklearn-model", signature=signature, input_example=X[:3] )

推論仕様をログに記録する (オプション)

推論仕様は、モデルのデプロイに必要なコンテナイメージとインスタンスタイプを定義します。登録前にログに記録されたモデルにアタッチすると、推論仕様は SageMaker AI モデルパッケージに自動的に含まれます。これにより、追加の設定なしで Model Registry から SageMaker AI エンドポイントに直接デプロイできます。

を使用して推論仕様をアタッチsagemaker_mlflow.log_inference_specification()します。

import sagemaker_mlflow # Get the logged model's artifact location logged_model = mlflow.MlflowClient().get_logged_model(model_info.model_id) inference_spec = { "Containers": [{ "Image": "763104351884.dkr.ecr.us-west-2.amazonaws.com/pytorch-inference:2.0.0-cpu-py310", "ModelDataSource": { "S3DataSource": { "S3Uri": logged_model.artifact_location + "/", "S3DataType": "S3Prefix", "CompressionType": "None", } }, }], "SupportedRealtimeInferenceInstanceTypes": ["ml.m5.xlarge"], } sagemaker_mlflow.log_inference_specification( model_info.model_id, inference_specification=inference_spec )
注記

推論仕様は、SageMaker AI CreateModelPackage API の InferenceSpecificationパラメータと同じスキーマに従う必要があります。詳細については、SageMaker AI API リファレンスの「InferenceSpecification」を参照してください。

ログ記録後、推論仕様はモデルとともにsagemaker_inference_specification.jsonアーティファクトとして保存されます。

MLflow UI の推論仕様アーティファクト。

ログ評価メトリクス (オプション)

評価メトリクスは、モデルのパフォーマンスの標準化された概要を提供します。登録前に記録すると、評価結果がモデルカードとして SageMaker AI Model Package に含まれ、メトリクスが SageMaker AI Model Registry と Studio に表示されます。モデルカードの詳細については、「モデルカードスキーマ」を参照してください。

を使用して評価メトリクスsagemaker_mlflow.evaluate()をログに記録します。

import sagemaker_mlflow import pandas as pd eval_df = pd.DataFrame(X, columns=["f1", "f2", "f3"]) eval_df["target"] = y dataset = mlflow.data.from_pandas( eval_df, source="s3://my-bucket/eval.csv", name="eval_set", targets="target" ) sagemaker_mlflow.evaluate(model_info, data=dataset, model_type="regressor")

ログ記録後、評価グループはモデルとともにアーティファクトとして保存されます。

MLflow UI の評価グループアーティファクト。

SDK を使用してモデルを登録する

mlflow.register_model() を使用して、SageMaker Model Registry にモデルを登録します。これにより、SageMaker AI にモデルパッケージグループ (存在しない場合) とモデルパッケージバージョンが自動的に作成されます。

model_uri = f"runs:/{run.info.run_id}/sklearn-model" mv = mlflow.register_model(model_uri, "MyRegisteredModel") print(f"Name: {mv.name}") print(f"Version: {mv.version}")

バージョンを登録する前に、 create_registered_modelを使用してモデルパッケージグループを作成することもできます。

from mlflow import MlflowClient client = MlflowClient() client.create_registered_model("MyRegisteredModel", tags={"team": "ml-platform"})

登録後、モデルバージョンには SageMaker AI モデルパッケージ ARN がタグ付けされます。次のように取得できます。

mv = client.get_model_version("MyRegisteredModel", mv.version) sm_arn = mv.tags["sagemaker.model_package_arn"] print(f"SageMaker Model Package ARN: {sm_arn}")
注記

モデル名にはスペースを入れないでください。MLflow はスペースを含むモデル名に対応していますが、SageMaker AI モデルパッケージは対応していません。モデル名にスペースを使用すると、登録プロセスは失敗します。

MLflow UI を使用してモデルを登録する

MLflow UI で SageMaker Model Registry にモデルを直接登録できます。モデルメニューで、モデルの作成を選択します。この方法で作成されたモデルは、SageMaker Model Registry に自動的に追加されます。

MLflow UI 内でのモデルレジストリの作成。

実験の追跡中にモデルをログに記録したら、MLflow UI でその実行のページに移動します。Artifacts ペインを選択し、モデルの登録を選択して、MLflow と SageMaker Model Registry の両方にモデルバージョンを登録します。

MLflow 実行ページからモデルバージョンを登録します。

登録されたモデルを Studio で表示する

Studio 内で、左側のナビゲーションペインのモデルを選択して、登録済みモデルを表示します。Studio の基本的な操作方法については、「Amazon SageMaker Studio を起動する」を参照してください。

Studio のモデルパッケージバージョンページには、MLflow から同期されたトレーニングメトリクスとデータセットが表示されます。

Studio のトレーニングメトリクスを示すモデルパッケージバージョンの概要。

トレーニングタブには、トレーニングデータセットの場所とモデルアーティファクトパスも表示されます。

Studio でのデータセットとモデルアーティファクトのトレーニング。

推論仕様を記録した場合、コンテナセクションにはコンテナイメージ、モデルデータの場所、サポートされているインスタンスタイプが表示されます。デプロイステージには、モデルをデプロイする準備ができていることを示す「承認済み」と表示されます。

Studio の推論仕様コンテナとインスタンスタイプ。

評価メトリクスを記録した場合、評価タブには、スコア、平均絶対誤差、二乗平均平方根誤差などのパフォーマンスメトリクスが表示されます。

Studio の評価メトリクス。

評価タブには、評価データセットの場所も表示されます。

Studio の評価データセット。

系統タブには、MLflow 実験、モデルバージョン、コンテナイメージ、モデルパッケージグループの関係が表示されます。

Studio での MLflow 実験の関連付けを示すモデル系統グラフ。

制限事項

  • モデル名にスペースを使用しないでください。SageMaker AI モデルパッケージはスペースをサポートしておらず、登録は失敗します。

  • ロールにアーティファクトパスに対するs3:GetObjectアクセス許可がない場合、推論仕様と評価アーティファクトはサイレントにスキップされます。モデルパッケージは引き続き作成されますが、推論データや評価データは作成されません。

  • ロールに sagemaker:CreateActionまたは がない場合sagemaker:AddAssociation、MLflow モデルと SageMaker AI モデルパッケージ間の系統の関連付けはサイレントにスキップされます。これは登録やライフサイクル管理には影響しません。

  • ライフサイクルステージとステータスを設定しても、Studio でデプロイボタンは有効になりません。UI からワンクリックデプロイを有効にするには、SageMaker AI API Approvedを使用してモデルパッケージの承認ステータスを個別に に設定する必要があります。

  • MLflow App IAM サービスロールのアクセス許可の変更が有効になるまでに最大 15 分かかる場合があります。

モデルライフサイクルステージを管理する

モデルを登録したら、MLflow モデルバージョンのエイリアスを設定することで、SageMaker AI Model Registry でライフサイクルステージとステータスを管理できます。ライフサイクル命名規則を使用してエイリアスを設定すると、対応する SageMaker AI モデルパッケージのライフサイクルが自動的に更新されます。モデルライフサイクルステージの詳細については、「 Model Registry」の「Stage models」を参照してください。

ライフサイクル管理の IAM アクセス許可

MLflow 追跡サーバーまたは MLflow App IAM サービスロールには、ライフサイクルステージを管理するためのsagemaker:UpdateModelPackageアクセス許可が必要です。このアクションは、上記の基本登録アクセス許可にすでに含まれています。

ライフサイクル移行の制限

IAM 条件キーを使用して、ロールが実行できるライフサイクル移行を制御できます。

  • sagemaker:ModelLifeCycle/stage — 設定中のライフサイクルステージ。値: stagingproduction

  • sagemaker:ModelLifeCycle/stageStatus — 設定中のライフサイクルステータス。値: pendingactive

例: 本番稼働用プロモーションを拒否する

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "sagemaker:UpdateModelPackage", "Resource": "*", "Condition": { "StringEquals": { "sagemaker:ModelLifeCycle/stage": "production" } } } ] }

例: ステージング/保留中の移行のみを許可する

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": "sagemaker:UpdateModelPackage", "Resource": "*", "Condition": { "StringEquals": { "sagemaker:ModelLifeCycle/stage": "staging", "sagemaker:ModelLifeCycle/stageStatus": "pending" } } } ] }

ライフサイクル移行が IAM ポリシーによって拒否されると、MLflow エイリアスオペレーションは失敗し、呼び出し元にエラーを返します。

SageMaker AI Model Registry のモデルライフサイクルの詳細については、「Deploy a Model from the Registry」を参照してください。

SDK を使用してライフサイクルステージを設定する

ライフサイクルステージとステータスを設定するには、次のエイリアス形式を使用します。

sagemakerlifecycle-stage-status

サポートされているステージ: stagingproduction

サポートされているステータス: pendingactive

注記

ステージとステータスの値は小文字にする必要があります。MLflow エイリアスは小文字のみをサポートするため、 Productionや などの値は有効Activeではありません。

import mlflow mlflow.set_tracking_uri(arn) client = mlflow.MlflowClient() # Set lifecycle to staging/pending client.set_registered_model_alias("MyRegisteredModel", "sagemakerlifecycle-staging-pending", version) # Promote to production/active client.set_registered_model_alias("MyRegisteredModel", "sagemakerlifecycle-production-active", version)

SageMaker AI モデルパッケージを記述することで、ライフサイクルの状態を確認できます。

import boto3 sm = boto3.client("sagemaker") mv = client.get_model_version("MyRegisteredModel", version) sm_arn = mv.tags["sagemaker.model_package_arn"] desc = sm.describe_model_package(ModelPackageName=sm_arn) print(desc["ModelLifeCycle"]["Stage"]) # "staging" print(desc["ModelLifeCycle"]["StageStatus"]) # "pending"

MLflow UI を使用してライフサイクルステージを設定する

MLflow UI で、モデルバージョンページに移動します。エイリアスで、 sagemakerlifecycle-stage-status形式を使用してエイリアスを追加します。エイリアスが保存されると、SageMaker AI モデルパッケージのライフサイクルが自動的に更新されます。

MLflow UI でのライフサイクルエイリアスの設定。

Studio でライフサイクルステージを表示する

Studio で、Models に移動し、Model Package のバージョンを選択します。ライフサイクルステージとステータスは、モデルライフサイクルの詳細タブに表示されます。

Studio のモデルライフサイクルステージとステータス。

リソースタグを使用して登録済みモデルの更新を防ぐ

IAM リソースタグベースの条件を使用して、MLflow 追跡サーバーまたは MLflow アプリロールが特定のモデルパッケージグループまたはモデルパッケージバージョンを変更できないようにできます。これにより、個々のモデルが特定の状態に達した後に MLflow を通じて更新されないようにロックできます。

たとえば、次のポリシーは、 タグが のモデルパッケージUpdateModelPackageを拒否しますlocked=true

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "sagemaker:UpdateModelPackage", "Resource": "*", "Condition": { "StringEquals": { "aws:ResourceTag/locked": "true" } } } ] }

このポリシーが追跡サーバーまたは MLflow アプリロールにアタッチされると、MLflow からタグ付けされたモデルパッケージのライフサイクルを更新しようとすると、アクセス拒否エラーで失敗します。

同様に、モデルパッケージグループCreateModelPackageを制限して、新しいバージョンが登録されないようにすることができます。

{ "Version": "2012-10-17", "Statement": [ { "Effect": "Deny", "Action": "sagemaker:CreateModelPackage", "Resource": "arn:aws:sagemaker:region:account:model-package-group/group-name/*", "Condition": { "StringEquals": { "aws:ResourceTag/frozen": "true" } } } ] }
注記

リソースタグベースの条件は、SageMaker AI モデルパッケージグループまたはモデルパッケージリソース (MLflow モデルではない) に適用されるタグに依存します。これらのタグは、SageMaker AI コンソール、CLI、または SDK を使用して適用できます。タグベースの条件は、タグの適用後に伝播されるまでに最大 15 分かかる場合があります。