翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
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アーティファクトとして保存されます。
ログ評価メトリクス (オプション)
評価メトリクスは、モデルのパフォーマンスの標準化された概要を提供します。登録前に記録すると、評価結果がモデルカードとして 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")
ログ記録後、評価グループはモデルとともにアーティファクトとして保存されます。
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 でその実行のページに移動します。Artifacts ペインを選択し、モデルの登録を選択して、MLflow と SageMaker Model Registry の両方にモデルバージョンを登録します。
登録されたモデルを Studio で表示する
Studio 内で、左側のナビゲーションペインのモデルを選択して、登録済みモデルを表示します。Studio の基本的な操作方法については、「Amazon SageMaker Studio を起動する」を参照してください。
Studio のモデルパッケージバージョンページには、MLflow から同期されたトレーニングメトリクスとデータセットが表示されます。
トレーニングタブには、トレーニングデータセットの場所とモデルアーティファクトパスも表示されます。
推論仕様を記録した場合、コンテナセクションにはコンテナイメージ、モデルデータの場所、サポートされているインスタンスタイプが表示されます。デプロイステージには、モデルをデプロイする準備ができていることを示す「承認済み」と表示されます。
評価メトリクスを記録した場合、評価タブには、スコア、平均絶対誤差、二乗平均平方根誤差などのパフォーマンスメトリクスが表示されます。
評価タブには、評価データセットの場所も表示されます。
系統タブには、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— 設定中のライフサイクルステージ。値:staging、production。sagemaker:ModelLifeCycle/stageStatus— 設定中のライフサイクルステータス。値:pending、active。
例: 本番稼働用プロモーションを拒否する
{ "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
サポートされているステージ: staging、 production
サポートされているステータス: pending、 active
注記
ステージとステータスの値は小文字にする必要があります。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-形式を使用してエイリアスを追加します。エイリアスが保存されると、SageMaker AI モデルパッケージのライフサイクルが自動的に更新されます。stage-status
Studio でライフサイクルステージを表示する
Studio で、Models に移動し、Model Package のバージョンを選択します。ライフサイクルステージとステータスは、モデルライフサイクルの詳細タブに表示されます。
リソースタグを使用して登録済みモデルの更新を防ぐ
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 分かかる場合があります。