Registrieren einer Modellversion - Amazon SageMaker

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Registrieren einer Modellversion

Sie können ein Amazon registrieren SageMaker modellieren, indem eine Modellversion erstellt wird, die die Modellgruppe angibt, zu der sie gehört. Eine Modellversion muss sowohl die Modellartefakte (die trainierten Gewichte eines Modells) als auch den Inferenzcode für das Modell enthalten.

Importieren in &S3;Inferenz-Pipelineist ein SageMaker -Modell, das aus einer linearen Folge von zwei bis fünfzehn Containern besteht, die Inferenzanforderungen verarbeiten. Sie registrieren eine Inferenzpipeline, indem Sie die Container und die zugehörigen Umgebungsvariablen angeben. Weitere Informationen zu Inferenz-Pipelines finden Sie unterHost-Modelle zusammen mit Vorverarbeitungslogik als serielle Inferenzpipeline hinter einem Endpunktaus.

Sie können ein Modell mit einer Inferenzpipeline registrieren, indem Sie die Container und die zugehörigen Umgebungsvariablen angeben. So erstellen Sie eine Modellversion mit einer Inferenz-Pipeline mithilfe derAWS SDK for Python (Boto3)oder indem Sie einen Schritt in einem SageMaker Modellbau-Pipeline, führen Sie die folgenden Schritte aus.

Registrieren einer Modellversion (SageMaker Pipelines)

So registrieren Sie eine Modellversion mit einem SageMaker Modellbau-Pipeline, erstellen Sie eineRegisterModeltreten Sie in Ihre Pipeline ein. Weitere Informationen zum Erstellen einesRegisterModelSchritt als Teil einer Pipeline, sieheSchritt 8: Definieren eines RegisterModel Schritt zum Erstellen eines Modellpaketsaus.

Registrieren einer Modellversion (Boto3)

Um eine Modellversion mit Boto3 zu registrieren, rufen Sie diecreate_model_package-Methode.

Zunächst konfigurieren Sie das Parameterwörterbuch, das an diecreate_model_package-Methode.

# Specify the model source model_url = "s3://your-bucket-name/model.tar.gz" modelpackage_inference_specification = { "InferenceSpecification": { "Containers": [ { "Image": '257758044811.dkr.ecr.us-east-2.amazonaws.com/sagemaker-xgboost:1.2-1', "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 rufst ducreate_model_packageMethode, übergibt 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 von einem anderen Konto

So registrieren Sie Modellversionen bei einer Modellpaketgruppe, die von einer anderen erstellt wurdeAWSKonto müssen Sie ein kontoübergreifendes Konto hinzufügenAWS Identity and Access ManagementRessourcenrichtlinie, um dieses Konto zu aktivieren. Verwenden Sie zum Beispiel eineAWS-Konto in Ihrer Organisation ist für Schulungsmodelle verantwortlich, 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, auf die Sie für diesen Fall Zugriff gewähren möchten. Weitere Informationen zu kontenübergreifenden Ressourcenrichtlinien finden Sie unterAWSfinden Sie unter,Logik für die kontenübergreifende RichtlinienauswertungimAWS Identity and Access Management-Benutzerhandbuchaus.

Anmerkung

Sie müssen auch einen KMS-Schlüssel verwenden, um dieKonfigurations-AusgabedatenAktion während der Schulung zur kontoübergreifenden Bereitstellung von Modellen.

Um die kontoübergreifende Modellregistrierung in SageMaker zu aktivieren, müssen Sie eine kontoübergreifende Ressourcenrichtlinie für die Modellgruppe bereitstellen, die die Modellversionen enthält. Im Folgenden finden Sie ein Beispiel, das kontoübergreifende Richtlinien für die Modellpaketgruppe erstellt und diese Richtlinien auf diese bestimmte Ressource anwendet.

Die folgende Konfiguration muss im Quellkonto festgelegt werden, das Modelle kontoübergreifend in einer Modellpaketgruppe registriert. In diesem Beispiel ist das Quellkonto das Modellschulungskonto, das das Modell kontoübergreifend in der Modellregistrierung des Modellregistrierungskontos trainiert und dann registriert.

Das Beispiel geht davon aus, dass Sie zuvor die folgenden Variablen definiert haben:

  • sm_client- EIN SageMaker Boto3-Kunde.

  • model_package_group_name- Die Modellgruppe, der Sie Zugriff gewähren möchten.

  • model_package_group_arn- Die Modellgruppe -Arn, der Sie kontenübergreifenden Zugriff gewähren möchten.

  • bucket- Der S3-Bucket, in dem die Modelltraining-Artefakte gespeichert sind.

Um ein in einem anderen Konto erstelltes Modell bereitstellen zu können, muss der Benutzer über eine Rolle verfügen, die Zugriff auf SageMaker Aktionen, wie z. B. eine Rolle bei derAmazonSageMakerFullAccessVerwaltete Richtlinie. Weitere Informationen zu SageMaker -verwalteten Richtlinien finden Sie unter AWSVerwaltete Richtlinien für Amazon SageMaker.

Erforderliche IAM-Ressourcenrichtlinien

Das folgende Diagramm erfasst die Richtlinien, die erforderlich sind, um die Registrierung von kontoübergreifenden Modellen zu ermöglichen Wie gezeigt, müssen diese Richtlinien während des Modelltrainings aktiv sein, um das Modell ordnungsgemäß im Modellregistrierungskonto zu registrieren.

Amazon ECR, Amazon S3 undAWS KMSRichtlinien werden in den folgenden Codebeispielen dargestellt.

Beispiel einer Amazon-ECR-Richtlinie

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

Beispielrichtlinie für Amazon S3 S3-Richtlinie

{ '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}/*' } ] }

BeispielAWS KMSPolitik

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

Wenden Sie Ressourcenrichtlinien auf Konten an

Die folgende Richtlinienkonfiguration wendet die im vorherigen Abschnitt beschriebenen Richtlinien an und muss in das Modellschulungskonto aufgenommen werden.

import json # The model registry account id of the model package 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 package 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 package 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}/*' }] } # 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 package 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 Modellregistrierungskonto eingefügt werden, in dem die Modellpaketgruppe existiert.

# The model registry account id of the model package 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 diecreate_model_packageAktion aus dem Modellschulungskonto zur Registrierung des Modellpakets im kontoübergreifenden Konto.

# Specify the model source model_url = "s3://{bucket}/model.tar.gz" #Set up the parameter dictionary to pass to the create_model_package method 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))