註冊模型版本 - Amazon SageMaker

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

註冊模型版本

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

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

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

註冊模型版本 (SageMaker管道)

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

註冊模型版本 (Boto3)

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

首先,您會設定 參數字典以傳遞至 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_packageAPI操作,在剛設定的參數字典中傳遞 。

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 中的說明開啟 Studio 主控台。 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,您必須為包含模型版本的模型群組提供跨帳戶資源政策。下列範例為模型群組建立了跨帳戶政策,並將這些政策套用至特定資源。

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

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

  • sm_client – SageMaker Boto3 用戶端。

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

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

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

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

必要的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))