Bereitstellen eines Modells aus der Registrierung - 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.

Bereitstellen eines Modells aus der Registrierung

Nachdem Sie eine Modellversion registriert und für die Bereitstellung genehmigt haben, stellen Sie sie auf einem SageMaker-Endpunkt bereit, um Rückschlüsse in Echtzeit zu erhalten.

Wenn Sie ein MLOPS-Projekt erstellen und eine MLOPS-Projektvorlage auswählen, die die Modellbereitstellung umfasst, werden genehmigte Modellversionen in der Modellregistrierung automatisch für die Produktion bereitgestellt. Weitere Informationen zur Verwendung von SageMaker mLOPS-Projekte, sieheAutomatisieren Sie MLOPs mit SageMaker Projekteaus.

Sie können auch eineAWS-Konto zur Bereitstellung von Modellversionen, die in einem anderen Konto durch Hinzufügen einer kontoübergreifenden Ressourcenrichtlinie erstellt wurden. Beispielsweise könnte 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 Registry (SageMaker SDK)

So stellen Sie eine Modellversion mithilfe derAmazon SageMaker Python SDKVerwenden Sie das folgende Codeausschnitt:

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')

Bereitstellen eines Modells aus der Registrierung (Boto3)

So stellen Sie eine Modellversion mithilfe derAWS SDK for Python (Boto3)Führen Sie die folgenden Schritte aus:

  1. Erstellen Sie ein Modellobjekt aus der Modellversion, indem Sie diecreate_model-Methode. Übergeben Sie den Amazon-Ressourcennamen (ARN) der Modellversion als Teil derContainersfür das Modellobjekt.

    Im folgenden Codeausschnitt wird davon ausgegangen, dass Sie bereits die SageMaker Boto3-Kundesm_client, und dass Sie bereits eine Modellversion mit einem ARN erstellt haben, den Sie in einer Variablen namensmodel_version_arnaus.

    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 einer Endpunktkonfiguration, indem Sie aufrufencreate_endpoint_configaus. Die Endpunkt-Konfiguration gibt die Anzahl der Amazon EC2 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 des -Endpunkts durch Aufrufencreate_endpointaus.

    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'])

Bereitstellen einer Modellversion von einem anderen Konto

Sie können eineAWS-Konto zur Bereitstellung von Modellversionen, die in einem anderen Konto durch Hinzufügen einer kontoübergreifenden Ressourcenrichtlinie erstellt wurden. Beispielsweise könnte 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 finden Sie unterAWSfinden Sie unter,Logik für die kontenübergreifende RichtlinienauswertungimAWS Identity and Access Management-Benutzerhandbuchaus.

Anmerkung

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

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

Um ein Modell bereitstellen zu können, das in einem anderen Konto erstellt wurde, müssen Sie über eine Rolle verfügen, die Zugriff auf SageMaker Aktionen, wie z. B. eine Rolle bei derAmazonSageMakerFullAccessVerwaltete Richtlinie. Weitere Informationen zu verwalteten SageMaker-Richtlinien finden Sie unterAWSVerwaltete Richtlinien für Amazon SageMakeraus.

Im folgenden Beispiel werden kontoübergreifende Richtlinien für alle drei dieser Ressourcen erstellt und die Richtlinien auf die Ressourcen angewendet.

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

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

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

  • sm_client- EIN SageMaker Boto3-Kunde.

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

  • model_package_group_arn- Die Modellgruppe -Arn, der Sie kontenü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 package 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 package 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 package 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.")