Registrieren Sie eine Modellversion
Sie können ein Modell von Amazon SageMaker AI registrieren, indem Sie eine Modellversion erstellen, die die Modellgruppe angibt, zu der es gehört. Eine Modellversion muss sowohl die Modellartefakte (die trainierten Gewichte eines Modells) als auch optional den Inferenzcode für das Modell enthalten.
Eine Inferenz-Pipeline ist ein SageMaker-AI-Modell, das aus einer linearen Reihenfolge von zwei bis fünfzehn Containern besteht, welche Anfragen für datenbasierte Inferenz verarbeiten. Sie registrieren eine Inferenz-Pipeline, indem Sie die Container und die zugehörigen Umgebungsvariablen angeben. Weitere Informationen zu Inferenz-Pipelines finden Sie unter Inferenz-Pipelines in Amazon SageMaker AI.
Sie können ein Modell bei einer Inferenz-Pipeline registrieren, indem Sie die Container und die zugehörigen Umgebungsvariablen angeben. Gehen Sie wie folgt vor, um eine Modellversion mit einer Inferenz-Pipeline zu erstellen, indem Sie entweder AWS SDK für Python (Boto3), die Konsole von Amazon SageMaker Studio verwenden oder einen Schritt in einer Modellerstellungs-Pipeline von SageMaker AI erstellen.
Themen
Registrieren einer Modellversion (SageMaker-AI-Pipelines)
Um eine Modellversion mithilfe einer Modellerstellungs-Pipeline von SageMaker AI zu registrieren, erstellen Sie einen RegisterModel-Schritt in Ihrer Pipeline. Weitere Informationen zum Erstellen eines RegisterModel als Teil einer Pipeline finden Sie unter Schritt 8: Definieren eines RegisterModel-Schritts zum Erstellen eines Modellpakets.
Registrieren einer Modellversion (Boto3)
Um eine Modellversion mithilfe von Boto3 zu registrieren, rufen Sie die create_model_package-API-Operation auf.
Zunächst richten Sie das Parameterwörterbuch ein, das an die create_model_package-API-Operation übergeben werden soll.
# 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)
Dann rufen Sie die create_model_package-API-Operation auf und übergeben das Parameterwörterbuch, das Sie gerade eingerichtet haben.
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))
Registrieren einer Modellversion (Studio oder Studio Classic)
Um eine Modellversion in der Amazon SageMaker Studio-Konsole zu registrieren, führen Sie die folgenden Schritte aus, je nachdem, ob Sie Studio oder Studio Classic verwenden.
Registrieren Sie eine Modellversion von einem anderen Konto aus
Um Modellversionen für eine Modellgruppe zu registrieren, die mit einem anderen AWS Konto erstellt wurde, müssen Sie eine kontoübergreifende AWS Identity and Access Management Ressourcenrichtlinie hinzufügen, um dieses Konto zu aktivieren. Beispielsweise ist ein AWS Konto in Ihrer Organisation für Trainingsmodelle zuständig, und ein anderes Konto ist für die Verwaltung, Bereitstellung und Aktualisierung von Modellen verantwortlich. Sie erstellen IAM-Ressourcenrichtlinien und wenden die Richtlinien auf die spezifische Kontoressource an, der Sie in diesem Fall Zugriff gewähren möchten. Weitere Informationen zu kontenübergreifenden Ressourcenrichtlinien in AWS, finden Sie unter Bewertungslogik für kontenübergreifende Richtlinien im AWS Identity and Access Management Benutzerhandbuch.
Informationen zur kontenübergreifenden Auffindbarkeit, sodass andere Konten Modellpaketgruppen vom Konto des Ressourceneigentümers aus einsehen können, finden Sie unter Kontoübergreifende Auffindbarkeit.
Anmerkung
Sie müssen außerdem einen KMS-Schlüssel verwenden, um die Aktion zur Konfiguration der Ausgabedaten während des Trainings für die kontenübergreifende Bereitstellung zu verschlüsseln.
Um die kontoübergreifende Model Registry in SageMaker AI zu aktivieren, müssen Sie eine kontoübergreifende Ressourcenrichtlinie für die Modellgruppe angeben, die die Modellversionen enthält. Im Folgenden finden Sie ein Beispiel, das kontenübergreifende Richtlinien für die Modellgruppe erstellt und diese Richtlinien auf diese spezifische Ressource anwendet.
Die folgende Konfiguration muss für das Quellkonto festgelegt werden, das kontenübergreifende Modelle in einer Modellgruppe registriert. In diesem Beispiel ist das Quellkonto das Modelltrainingskonto, das das Modellkonto schult und anschließend in der Modellregistrierung des Modellregistrierungskontos registriert.
Das Beispiel geht davon aus, dass Sie zuvor die folgenden Variablen definiert haben:
-
sm_client– Boto3-Client von SageMaker AI. -
model_package_group_name– die Modellgruppe, der Sie Zugriff gewähren möchten. -
model_package_group_arn– der Modellgruppen-ARN, für den Sie kontoübergreifenden Zugriff gewähren möchten. -
bucket– der Amazon-S3-Bucket, in dem das Trainingsartefakte des Modells gespeichert sind.
Um ein Modell bereitstellen zu können, das in einem anderen Konto erstellt wurde, muss der Benutzer über eine Rolle verfügen, die Zugriff auf SageMaker-AI-Aktionen hat, z. B. eine Rolle mit der verwalteten AmazonSageMakerFullAccess-Richtlinie. Informationen zu den von SageMaker AI verwalteten Richtlinien finden Sie unter Verwaltete AWS-Richtlinien für Amazon SageMaker AI.
Erforderliche IAM-Ressourcenrichtlinien
Das folgende Diagramm zeigt die Richtlinien, die für die Registrierung eines kontenübergreifenden Modells erforderlich sind. Wie gezeigt, müssen diese Richtlinien während der Modelltraining aktiv sein, damit das Modell ordnungsgemäß im Model Registry-Konto registriert werden kann.
Amazon ECR, Amazon S3 und AWS KMS Richtlinien werden in den folgenden Codebeispielen demonstriert.
Beispiel für eine Amazon ECR-Richtlinie
Beispiel für eine Amazon S3-Richtlinie
Beispiel für eine AWS KMS Richtlinie
Wenden Sie Ressourcenrichtlinien auf Konten an
Die folgende Richtlinienkonfiguration wendet die im vorherigen Abschnitt erläuterten Richtlinien an und muss in das Modelltrainingskonto aufgenommen werden.
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", ], )
Die folgende Konfiguration muss in das Model Registry-Konto übernommen werden, in dem sich die Modellgruppe befindet.
# 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)
Verwenden Sie abschließend die create_model_package Aktion aus dem Modelltrainingskonto, um das Modellpaket im Cross-Konto zu registrieren.
# 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))