註冊模型版本 - Amazon SageMaker AI

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

註冊模型版本

您可以透過建立指定其所屬模型群組的模型版本來註冊 Amazon SageMaker AI 模型。模型版本必須同時包含模型成品 (模型的訓練權重) 和模型的推論程式碼。

推論管道是一種 SageMaker AI 模型,由處理推論請求的 2 到 15 個容器的線性序列組成。您可以透過指定容器和相關聯的環境變數來註冊推論管道。如需與推論管道相關的詳細資訊,請參閱Amazon SageMaker AI 中的推論管道

您可以透過指定容器和關聯的環境變數,在推論管道中註冊模型。若要使用 AWS SDK for Python (Boto3)、Amazon SageMaker Studio 主控台或在 SageMaker AI 模型建置管道中建立步驟,以使用推論管道建立模型版本,請使用下列步驟。

註冊模型版本 (SageMaker AI 管道)

若要使用 SageMaker AI 模型建置管道註冊模型版本,請在管道中建立RegisterModel步驟。如需與作為管道的一部分建立 RegisterModel 相關的詳細資訊,請參閱步驟 8:定義 RegisterModel 步驟以建立模型套件

註冊模型版本 (Boto3)

若要使用 Boto3 註冊模型版本,請呼叫 create_model_package API 操作。

首先,您將 參數字典設定為傳遞至 create_model_package API 操作。

# Specify the model source model_url = "s3://your-bucket-name/model.tar.gz" modelpackage_inference_specification = { "InferenceSpecification": { "Containers": [ { "Image": image_uri, "ModelDataUrl": model_url } ], "SupportedContentTypes": [ "text/csv" ], "SupportedResponseMIMETypes": [ "text/csv" ], } } # Alternatively, you can specify the model source like this: # modelpackage_inference_specification["InferenceSpecification"]["Containers"][0]["ModelDataUrl"]=model_url create_model_package_input_dict = { "ModelPackageGroupName" : model_package_group_name, "ModelPackageDescription" : "Model to detect 3 different types of irises (Setosa, Versicolour, and Virginica)", "ModelApprovalStatus" : "PendingManualApproval" } create_model_package_input_dict.update(modelpackage_inference_specification)

然後,您呼叫 create_model_package API 操作,傳入您剛設定的參數字典。

create_model_package_response = sm_client.create_model_package(**create_model_package_input_dict) model_package_arn = create_model_package_response["ModelPackageArn"] print('ModelPackage Version ARN : {}'.format(model_package_arn))

註冊模型版本 (Studio 或 Studio Classic)

若要在 Amazon SageMaker Studio 主控台中註冊模型版本,請根據您是否使用 Studio 或 Studio Classic 完成下列步驟。

Studio
  1. 依照啟動 Amazon SageMaker Studio 中的指示開啟 SageMaker Studio 主控台。 Amazon SageMaker

  2. 在左側導覽窗格中,從功能表中選擇模型

  3. 如果尚未選取,請選擇已註冊模型索引標籤。

  4. 如果尚未選取模型群組,請在已註冊模型索引標籤標籤的正下方選擇模型群組

  5. 選擇註冊,然後選擇模型版本

  6. 註冊模型版本表單中,輸入下列資訊:

    • 模型群組名稱下拉式清單中,選取版本所屬的模型群組名稱。

    • (可選) 輸入模型版本的描述。

    • 模型核准狀態下拉式清單中,選取版本核准狀態。

    • (選用) 在自訂中繼資料欄位中,選擇 + 新增並新增自訂標籤做為鍵/值對。

  7. 選擇 Next (下一步)

  8. 推論規格表單中,輸入下列資訊:

    • 推論映像位置 (ECR) 中,輸入您的 Amazon ECR 推論映像位置。

    • 模型成品位置 (S3) 中,輸入模型資料成品的 Amazon S3 儲存貯體位置。

    • 若要指定和輸入資料組態或環境變數,請選擇其他組態並輸入此資訊。

    • 若要新增更多容器,請選擇 + 新增容器

    • 即時推論執行個體類型中,輸入要用於即時推論的執行個體類型。

    • 轉換推論執行個體類型中,輸入用於批次轉換的執行個體類型。

    • 支援的內容類型中,輸入您的輸入 MIME 類型。

    • 支援的回應內容類型中,輸入您的輸出 MIME 類型。

  9. 選擇 Next (下一步)

  10. 在選用的推論建議表單中,輸入下列資訊:

    • 針對業務問題,選擇適用於模型的應用程式。

    • 針對任務,選擇適用於模型的問題類型。

    • 針對 S3 儲存貯體地址,輸入範例承載的 Amazon S3 儲存貯體位置。

    • 針對第一個容器,輸入下列資訊:

      • 針對模型名稱,輸入模型區域中使用的模型名稱。

      • 針對架構,選擇架構。

      • 針對架構版本,輸入架構版本。

    • 對所有容器重複上一個步驟。

  11. 選擇 Next (下一步)

  12. 選取一或多個顯示模型指標旁的核取方塊。

  13. 選擇 Next (下一步)

  14. 確認顯示的設定正確無誤,然後選擇註冊模型版本。如果您隨後看到顯示錯誤訊息的強制回應視窗,請選擇檢視 (位於訊息旁) 以檢視錯誤來源。

  15. 確認新模型版本在父模型群組頁面中顯示。

Studio Classic
  1. 登入 Amazon SageMaker Studio Classic。如需詳細資訊,請參閱啟動 Amazon SageMaker Studio Classic

  2. 在左側的導覽窗格中,選擇首頁圖示 ( Black square icon representing a placeholder or empty image. )。

  3. 選擇模型,然後選擇模型註冊表

  4. 開啟註冊版本表單。您可以使用兩種方式的其中一種來執行此動作:

    • 選擇動作,然後選擇建立模型版本

    • 選取您要為其建立模型版本的模型群組的名稱,然後選擇建立模型版本

  5. 註冊模型版本表單中,輸入下列資訊:

    • 模型套件群組名稱下拉式清單中,選取模型群組名稱。

    • (可選) 輸入模型版本的描述。

    • 模型核准狀態下拉式清單中,選取版本核准狀態。

    • (選用) 在自訂中繼資料欄位中,將自訂標籤新增為鍵/值對。

  6. 選擇 Next (下一步)

  7. 推論規格表單中,輸入下列資訊:

    • 輸入推論映像位置。

    • 輸入模型資料成品位置。

    • (選用) 輸入用於轉換和即時推論任務的影像相關資訊,以及支援的輸入和輸出 MIME 類型。

  8. 選擇 Next (下一步)

  9. (可選) 提供用於協助提出端點建議的詳細資料。

  10. 選擇下一步

  11. (可選) 選擇您要包含的模型指標。

  12. 選擇下一步

  13. 確認顯示的設定正確無誤,然後選擇註冊模型版本。如果您隨後看到顯示錯誤訊息的強制回應視窗,請選擇檢視 (位於訊息旁) 以檢視錯誤來源。

  14. 確認新模型版本在父模型群組頁面中顯示。

從其他帳戶註冊模型版本

若要向不同 AWS 帳戶建立的模型群組註冊模型版本,您必須新增跨帳戶 AWS Identity and Access Management 資源政策以啟用該帳戶。例如,您組織中的一個 AWS 帳戶負責訓練模型,而另一個帳戶負責管理、部署和更新模型。您可以建立 IAM 資源政策,並將政策套用至您想要在此案例中授予存取權的特定帳戶資源。如需 中跨帳戶資源政策的詳細資訊 AWS,請參閱AWS Identity and Access Management 《 使用者指南》中的跨帳戶政策評估邏輯

注意

在跨帳戶模型部署訓練期間,您還必須使用 KMS 金鑰來對輸出資料設定動作進行加密。

若要在 SageMaker AI 中啟用跨帳戶模型登錄,您必須為包含模型版本的模型群組提供跨帳戶資源政策。下列範例為模型群組建立了跨帳戶政策,並將這些政策套用至特定資源。

必須為在模型群組中註冊模型跨帳戶存取權的來源帳戶設定下列組態。在此範例中,來源帳戶是模型訓練帳戶,該帳戶將訓練模型,然後將模型跨帳戶存取權註冊到模型註冊表帳戶的模型註冊表中。

此範例假設您先前已定義下列變數:

  • sm_client – SageMaker AI Boto3 用戶端。

  • model_package_group_name – 您要授予存取權的模型群組。

  • model_package_group_arn – 您要授予跨帳戶存取權的模型群組 ARN。

  • bucket – 存放模型訓練成品的 Amazon S3 儲存貯體。

若要能夠部署在不同帳戶中建立的模型,使用者必須具有可存取 SageMaker AI 動作的角色,例如具有 AmazonSageMakerFullAccess 受管政策的角色。如需有關 SageMaker AI 受管政策的資訊,請參閱 AWS Amazon SageMaker AI 的 受管政策

必要的 IAM 資源政策

下圖展示允許跨帳戶模型註冊時所必要的政策。如圖所示,這些政策必須在模型訓練期間處於作用中狀態,模型才能正確註冊至模型註冊表帳戶。

跨帳戶註冊模型所需的政策。

Amazon ECR、Amazon S3 和 AWS KMS 政策會在下列程式碼範例中示範。

Amazon ECR 政策範例

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AddPerm", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{model_registry_account}:root" }, "Action": [ "ecr:BatchGetImage", "ecr:Describe*" ] } ] }

Amazon S3 政策範例

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AddPerm", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{model_registry_account}:root" }, "Action": [ "s3:GetObject", "s3:GetBucketAcl", "s3:GetObjectAcl" ], "Resource": "arn:aws:s3:::{bucket}/*" } ] }

範例 AWS KMS 政策

{ "Version": "2012-10-17", "Statement": [ { "Sid": "AddPerm", "Effect": "Allow", "Principal": { "AWS": "arn:aws:iam::{model_registry_account}:root" }, "Action": [ "kms:Decrypt", "kms:GenerateDataKey*" ], "Resource": "*" } ] }

將資源政策套用至帳戶

下列政策組態會套用前一節中討論的政策,且必須放入模型訓練帳戶。

import json # The Model Registry account id of the Model Group model_registry_account = "111111111111" # The model training account id where training happens model_training_account = "222222222222" # 1. Create a policy for access to the ECR repository # in the model training account for the Model Registry account Model Group ecr_repository_policy = {"Version": "2012-10-17", "Statement": [{"Sid": "AddPerm", "Effect": "Allow", "Principal": { "AWS": f"arn:aws:iam::{model_registry_account}:root" }, "Action": [ "ecr:BatchGetImage", "ecr:Describe*" ] }] } # Convert the ECR policy from JSON dict to string ecr_repository_policy = json.dumps(ecr_repository_policy) # Set the new ECR policy ecr = boto3.client('ecr') response = ecr.set_repository_policy( registryId = model_training_account, repositoryName = "decision-trees-sample", policyText = ecr_repository_policy ) # 2. Create a policy in the model training account for access to the S3 bucket # where the model is present in the Model Registry account Model Group bucket_policy = {"Version": "2012-10-17", "Statement": [{"Sid": "AddPerm", "Effect": "Allow", "Principal": {"AWS": f"arn:aws:iam::{model_registry_account}:root" }, "Action": [ "s3:GetObject", "s3:GetBucketAcl", "s3:GetObjectAcl" ], "Resource": [ "arn:aws:s3:::{bucket}/*", "Resource: arn:aws:s3:::{bucket}" ] }] } # Convert the S3 policy from JSON dict to string bucket_policy = json.dumps(bucket_policy) # Set the new bucket policy s3 = boto3.client("s3") response = s3.put_bucket_policy( Bucket = bucket, Policy = bucket_policy) # 3. Create the KMS grant for the key used during training for encryption # in the model training account to the Model Registry account Model Group client = boto3.client("kms") response = client.create_grant( GranteePrincipal=model_registry_account, KeyId=kms_key_id Operations=[ "Decrypt", "GenerateDataKey", ], )

下列組態必須放入模型群組所在的模型註冊表帳戶。

# The Model Registry account id of the Model Group model_registry_account = "111111111111" # 1. Create policy to allow the model training account to access the ModelPackageGroup model_package_group_policy = {"Version": "2012-10-17", "Statement": [ { "Sid": "AddPermModelPackageVersion", "Effect": "Allow", "Principal": {"AWS": f"arn:aws:iam::{model_training_account}:root"}, "Action": ["sagemaker:CreateModelPackage"], "Resource": f"arn:aws:sagemaker:{region}:{model_registry_account}:model-package/{model_package_group_name}/*" } ] } # Convert the policy from JSON dict to string model_package_group_policy = json.dumps(model_package_group_policy) # Set the new policy response = sm_client.put_model_package_group_policy( ModelPackageGroupName = model_package_group_name, ResourcePolicy = model_package_group_policy)

最後,透過模型訓練帳戶使用 create_model_package 動作跨帳戶註冊模型套件。

# Specify the model source model_url = "s3://{bucket}/model.tar.gz" #Set up the parameter dictionary to pass to the create_model_package API operation modelpackage_inference_specification = { "InferenceSpecification": { "Containers": [ { "Image": f"{model_training_account}.dkr.ecr.us-east-2.amazonaws.com/decision-trees-sample:latest", "ModelDataUrl": model_url } ], "SupportedContentTypes": [ "text/csv" ], "SupportedResponseMIMETypes": [ "text/csv" ], } } # Alternatively, you can specify the model source like this: # modelpackage_inference_specification["InferenceSpecification"]["Containers"][0]["ModelDataUrl"]=model_url create_model_package_input_dict = { "ModelPackageGroupName" : model_package_group_arn, "ModelPackageDescription" : "Model to detect 3 different types of irises (Setosa, Versicolour, and Virginica)", "ModelApprovalStatus" : "PendingManualApproval" } create_model_package_input_dict.update(modelpackage_inference_specification) # Create the model package in the Model Registry account create_model_package_response = sm_client.create_model_package(**create_model_package_input_dict) model_package_arn = create_model_package_response["ModelPackageArn"] print('ModelPackage Version ARN : {}'.format(model_package_arn))