

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 mit Python
<a name="model-registry-deploy"></a>

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

Wenn Sie ein Projekt für Machine-Learning-Operationen (MLOps) erstellen und eine MLOps Projektvorlage auswählen, die die Modellbereitstellung beinhaltet, werden genehmigte Modellversionen in der Modellregistrierung automatisch für die Produktion bereitgestellt. Informationen zur Verwendung von SageMaker MLOps KI-Projekten finden Sie unter[MLOps Automatisierung mit SageMaker Projekten](sagemaker-projects.md).

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 Trainingsmodelle verantwortlich sein, und ein anderes Team ist für die Bereitstellung und Aktualisierung von Modellen verantwortlich.

**Topics**
+ [Stellen Sie ein Modell aus der Registrierung (SageMaker SDK) bereit](#model-registry-deploy-smsdk)
+ [Stellen Sie ein Modell aus der Registrierung bereit (Boto3)](#model-registry-deploy-api)
+ [Stellen Sie eine Modellversion von einem anderen Konto aus bereit](#model-registry-deploy-xaccount)

## Stellen Sie ein Modell aus der Registrierung (SageMaker SDK) bereit
<a name="model-registry-deploy-smsdk"></a>

Verwenden Sie den folgenden Codeausschnitt, um eine Modellversion mit dem [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable) 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)
<a name="model-registry-deploy-api"></a>

Gehen Sie wie folgt vor AWS SDK für Python (Boto3), um eine Modellversion mit dem bereitzustellen:

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

   Erstellen Sie ein Modellobjekt aus der Modellversion, indem Sie die [create\_model](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model)-API-Operation 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"]))
   ```

1. 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'}])
   ```

1. 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
<a name="model-registry-deploy-xaccount"></a>

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 Trainingsmodelle 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 unter [Bewertungslogik für kontenübergreifende Richtlinien](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html) im AWS Identity and Access Management Benutzerhandbuch. AWS*

**Anmerkung**  
Sie müssen während des Trainings für die Bereitstellung eines kontenübergreifenden Modells einen KMS-Schlüssel verwenden, um die Aktion zur [Konfiguration der Ausgabedaten](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OutputDataConfig.html) zu verschlüsseln.

Um die kontenübergreifende Modellbereitstellung in SageMaker KI zu ermöglichen, müssen Sie eine kontenü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 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 KI-Aktionen hat, z. B. eine Rolle mit der `AmazonSageMakerFullAccess` verwalteten Richtlinie. Informationen zu von SageMaker KI verwalteten Richtlinien finden Sie unter[AWS verwaltete Richtlinien für Amazon SageMaker AI](security-iam-awsmanpol.md).

Das folgende Beispiel erstellt kontenübergreifende Richtlinien für alle drei Ressourcen und wendet die Richtlinien auf die Ressourcen an. Das Beispiel geht auch davon aus, dass Sie zuvor die folgenden Variablen definiert haben:
+ `bucket` – Amazon-S3-Bucket, in dem die Modellversionen gespeichert sind.
+ `kms_key_id` – KMS-Schlüssel, der zum Verschlüsseln der Trainingsausgabe verwendet wird.
+ `sm_client`— Ein SageMaker KI-Boto3-Client.
+ `model_package_group_name` – Modellgruppe, für die 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.")
```