Stellen Sie ein Modell aus der Registrierung bereit - 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.

Stellen Sie ein Modell aus der Registrierung bereit

Nachdem Sie eine Modellversion registriert und für die Bereitstellung genehmigt haben, stellen Sie sie für Echtzeit-Inferenzen auf einem SageMaker Endpunkt bereit. Sie können Ihr Modell mithilfe des SageMaker SDK oder der AWS SDK for Python (Boto3) (Boto3) bereitstellen.

Wenn Sie ein Projekt für Machine Learning (MLOps) erstellen und eine MLOps-Projektvorlage auswählen, die die Modellbereitstellung enthält, werden genehmigte Modellversionen in der Model Registry automatisch in der Produktion bereitgestellt. Informationen zur Verwendung von SageMaker MLOps-Projekten finden Sie unter Automatisieren von MLOps mit - SageMaker Projekten.

Sie können einem AWS Konto auch die Bereitstellung von Modellversionen ermöglichen, die in einem anderen Konto erstellt wurden, indem Sie eine kontoübergreifende Ressourcenrichtlinie hinzufügen. Beispielsweise kann ein Team in Ihrer Organisation für Schulungsmodelle verantwortlich sein, und ein anderes Team ist für die Bereitstellung und Aktualisierung von Modellen verantwortlich.

Bereitstellen eines Modells aus der Registrierung (SageMaker SDK)

Verwenden Sie den folgenden Codeausschnitt, um eine Modellversion mit dem Amazon SageMaker Python SDK bereitzustellen:

from sagemaker import ModelPackage from time import gmtime, strftime model_package_arn = 'arn:aws:sagemaker:us-east-2:12345678901:model-package/modeltest/1' model = ModelPackage(role=role, model_package_arn=model_package_arn, sagemaker_session=sagemaker_session) model.deploy(initial_instance_count=1, instance_type='ml.m5.xlarge')

Stellen Sie ein Modell aus der Registrierung bereit (Boto3)

Führen Sie die folgenden Schritte aus, um eine Modellversion mithilfe von AWS SDK for Python (Boto3) bereitzustellen:

  1. Der folgende Codeausschnitt geht davon aus, dass Sie bereits den SageMaker Boto3-Client sm_client und eine Modellversion erstellt haben, deren ARN in der Variablen gespeichert istmodel_version_arn.

    Erstellen Sie ein Modellobjekt aus der Modellversion, indem Sie die API-Operation create_model aufrufen. Übergeben Sie den Amazon-Ressourcennamen (ARN) der Modellversion als Teil des Containers für das Modellobjekt:

    model_name = 'DEMO-modelregistry-model-' + strftime("%Y-%m-%d-%H-%M-%S", gmtime()) print("Model name : {}".format(model_name)) container_list = [{'ModelPackageName': model_version_arn}] create_model_response = sm_client.create_model( ModelName = model_name, ExecutionRoleArn = role, Containers = container_list ) print("Model arn : {}".format(create_model_response["ModelArn"]))
  2. Erstellen Sie eine Endpunktkonfiguration, indem Sie create_endpoint_config aufrufen. Die Endpunktkonfiguration gibt die Anzahl und den Typ der Amazon EC2-Instances an, die für den Endpunkt verwendet werden sollen.

    endpoint_config_name = 'DEMO-modelregistry-EndpointConfig-' + strftime("%Y-%m-%d-%H-%M-%S", gmtime()) print(endpoint_config_name) create_endpoint_config_response = sm_client.create_endpoint_config( EndpointConfigName = endpoint_config_name, ProductionVariants=[{ 'InstanceType':'ml.m4.xlarge', 'InitialVariantWeight':1, 'InitialInstanceCount':1, 'ModelName':model_name, 'VariantName':'AllTraffic'}])
  3. Erstellen Sie den Endpunkt, indem Sie create_endpoint aufrufen.

    endpoint_name = 'DEMO-modelregistry-endpoint-' + strftime("%Y-%m-%d-%H-%M-%S", gmtime()) print("EndpointName={}".format(endpoint_name)) create_endpoint_response = sm_client.create_endpoint( EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name) print(create_endpoint_response['EndpointArn'])

Stellen Sie eine Modellversion von einem anderen Konto aus bereit

Sie können einem AWS Konto erlauben, Modellversionen bereitzustellen, die in einem anderen Konto erstellt wurden, indem Sie eine kontoübergreifende Ressourcenrichtlinie hinzufügen. Beispielsweise kann ein Team in Ihrer Organisation für Schulungsmodelle verantwortlich sein, und ein anderes Team ist für die Bereitstellung und Aktualisierung von Modellen verantwortlich. Wenn Sie diese Ressourcenrichtlinien erstellen, wenden Sie die Richtlinie auf die spezifische Ressource an, auf die Sie 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.

Anmerkung

Sie müssen während der Schulung für die Bereitstellung eines kontenübergreifenden Modells einen KMS-Schlüssel verwenden, um die Aktion zur Konfiguration der Ausgabedaten zu verschlüsseln.

Um die kontoübergreifende Modellbereitstellung in zu aktivieren SageMaker, müssen Sie eine kontoübergreifende Ressourcenrichtlinie für die Modellgruppe bereitstellen, die die Modellversionen enthält, die Sie bereitstellen möchten, das Amazon-ECR-Repository, in dem sich das Inferenz-Image für die Modellgruppe befindet, und den Amazon S3-Bucket, in dem die Modellversionen gespeichert sind.

Um ein Modell bereitstellen zu können, das in einem anderen Konto erstellt wurde, benötigen Sie eine Rolle, die Zugriff auf SageMaker Aktionen hat, z. B. eine Rolle mit der AmazonSageMakerFullAccess verwalteten Richtlinie. Weitere Informationen zu SageMaker-verwalteten Richtlinien finden Sie unter AWS Verwaltete Richtlinien für Amazon SageMaker.

Das folgende Beispiel erstellt kontenübergreifende Richtlinien für alle drei Ressourcen und wendet die Richtlinien auf die Ressourcen an. Im Beispiel wird auch davon ausgegangen, dass Sie zuvor die folgenden Variablen definiert haben:

  • bucket – Der Amazon S3-Bucket, in dem die Modellversionen gespeichert sind.

  • kms_key_id – Der KMS-Schlüssel, der zum Verschlüsseln der Trainingsausgabe verwendet wird.

  • sm_client – Ein SageMaker Boto3-Client.

  • model_package_group_name – Die Modellgruppe, der Sie kontoübergreifenden Zugriff gewähren möchten.

  • model_package_group_arn – Der Modellgruppen-ARN, für den Sie kontoübergreifenden Zugriff gewähren möchten.

import json # The cross-account id to grant access to cross_account_id = "123456789012" # Create the policy for access to the ECR repository ecr_repository_policy = { 'Version': '2012-10-17', 'Statement': [{ 'Sid': 'AddPerm', 'Effect': 'Allow', 'Principal': { 'AWS': f'arn:aws:iam::{cross_account_id}:root' }, 'Action': ['ecr:*'] }] } # 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 = account, repositoryName = 'decision-trees-sample', policyText = ecr_repository_policy ) # Create a policy for accessing the S3 bucket bucket_policy = { 'Version': '2012-10-17', 'Statement': [{ 'Sid': 'AddPerm', 'Effect': 'Allow', 'Principal': { 'AWS': f'arn:aws:iam::{cross_account_id}:root' }, 'Action': 's3:*', 'Resource': f'arn:aws:s3:::{bucket}/*' }] } # Convert the policy from JSON dict to string bucket_policy = json.dumps(bucket_policy) # Set the new policy s3 = boto3.client('s3') response = s3.put_bucket_policy( Bucket = bucket, Policy = bucket_policy) # Create the KMS grant for encryption in the source account to the # Model Registry account Model Group client = boto3.client('kms') response = client.create_grant( GranteePrincipal=cross_account_id, KeyId=kms_key_id Operations=[ 'Decrypt', 'GenerateDataKey', ], ) # 3. Create a policy for access to the Model Group. model_package_group_policy = { 'Version': '2012-10-17', 'Statement': [{ 'Sid': 'AddPermModelPackageGroup', 'Effect': 'Allow', 'Principal': { 'AWS': f'arn:aws:iam::{cross_account_id}:root' }, 'Action': ['sagemaker:DescribeModelPackageGroup'], 'Resource': f'arn:aws:sagemaker:{region}:{account}:model-package-group/{model_package_group_name}' },{ 'Sid': 'AddPermModelPackageVersion', 'Effect': 'Allow', 'Principal': { 'AWS': f'arn:aws:iam::{cross_account_id}:root' }, 'Action': ["sagemaker:DescribeModelPackage", "sagemaker:ListModelPackages", "sagemaker:UpdateModelPackage", "sagemaker:CreateModel"], 'Resource': f'arn:aws:sagemaker:{region}:{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 policy to the Model Group response = sm_client.put_model_package_group_policy( ModelPackageGroupName = model_package_group_name, ResourcePolicy = model_package_group_policy) print('ModelPackageGroupArn : {}'.format(create_model_package_group_response['ModelPackageGroupArn'])) print("First Versioned ModelPackageArn: " + model_package_arn) print("Second Versioned ModelPackageArn: " + model_package_arn2) print("Success! You are all set to proceed for cross-account deployment.")