

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Déploiement d’un modèle à partir du registre avec Python
<a name="model-registry-deploy"></a>

Après avoir enregistré une version du modèle et approuvé son déploiement, déployez-la sur un point de terminaison SageMaker AI pour une inférence en temps réel. Vous pouvez déployer votre modèle à l'aide du SDK SageMaker AI ou du AWS SDK pour Python (Boto3).

Lorsque vous créez un projet d'opérations d'apprentissage automatique (MLOps) et que vous choisissez un modèle de MLOps projet incluant le déploiement du modèle, les versions du modèle approuvées dans le registre des modèles sont automatiquement déployées en production. Pour plus d'informations sur l'utilisation de MLOps projets d' SageMaker IA, consultez[MLOps Automatisation avec des SageMaker projets](sagemaker-projects.md).

Vous pouvez également permettre à un AWS compte de déployer des versions de modèles créées dans un autre compte en ajoutant une politique de ressources entre comptes. Par exemple, une équipe de votre organisation peut être responsable des modèles d’entraînement et une équipe différente est responsable du déploiement et de la mise à jour des modèles.

**Topics**
+ [

## Déployer un modèle à partir du registre (SageMaker SDK)
](#model-registry-deploy-smsdk)
+ [

## Déploiement d'un modèle à partir du registre (Boto3)
](#model-registry-deploy-api)
+ [

## Déploiement d’une version de modèle à partir d’un compte différent
](#model-registry-deploy-xaccount)

## Déployer un modèle à partir du registre (SageMaker SDK)
<a name="model-registry-deploy-smsdk"></a>

Pour déployer une version de modèle à l'aide du [SDK Amazon SageMaker Python](https://sagemaker.readthedocs.io/en/stable), utilisez l'extrait de code suivant :

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

## Déploiement d'un modèle à partir du registre (Boto3)
<a name="model-registry-deploy-api"></a>

Pour déployer une version de modèle à l'aide du AWS SDK pour Python (Boto3), procédez comme suit :

1. L'extrait de code suivant suppose que vous avez déjà créé le client SageMaker AI Boto3 `sm_client` et une version du modèle dont l'ARN est stocké dans la variable. `model_version_arn`

   Créez un objet de modèle à partir de la version du modèle en appelant l’opération d’API [create\$1model](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model). Transmettez l’Amazon Resource Name (ARN) de la version du modèle dans le cadre des `Containers` de l’objet de modèle :

   ```
   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. Créez une configuration de point de terminaison en appelant `create_endpoint_config`. La configuration du point de terminaison spécifie le nombre et le type d'instances Amazon EC2 à utiliser pour le point de terminaison.

   ```
   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. Créez le point de terminaison en appelant `create_endpoint`.

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

## Déploiement d’une version de modèle à partir d’un compte différent
<a name="model-registry-deploy-xaccount"></a>

Vous pouvez autoriser un AWS compte à déployer des versions de modèles créées dans un autre compte en ajoutant une politique de ressources entre comptes. Par exemple, une équipe de votre organisation peut être responsable des modèles d’entraînement et une équipe différente est responsable du déploiement et de la mise à jour des modèles. Lorsque vous créez ces politiques de ressources, vous appliquez la politique à la ressource spécifique à laquelle vous voulez accorder l'accès. Pour plus d'informations sur les politiques de ressources entre comptes dans AWS, voir [Logique d'évaluation des politiques entre comptes](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html) dans le Guide de l'*Gestion des identités et des accès AWS utilisateur*.

**Note**  
Vous devez utiliser une clé KMS pour chiffrer l’action de [configuration des données de sortie](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OutputDataConfig.html) pendant l’entraînement pour le déploiement de modèle entre comptes.

Pour permettre le déploiement de modèles entre comptes dans SageMaker AI, vous devez fournir une politique de ressources entre comptes pour le groupe de modèles contenant les versions de modèles que vous souhaitez déployer, le référentiel Amazon ECR où réside l'image d'inférence du groupe de modèles et le compartiment Amazon S3 dans lequel les versions du modèle sont stockées.

Pour pouvoir déployer un modèle créé dans un autre compte, vous devez disposer d'un rôle ayant accès aux actions de l' SageMaker IA, tel qu'un rôle associé à la politique `AmazonSageMakerFullAccess` gérée. Pour plus d'informations sur les politiques gérées par l' SageMaker IA, consultez[AWS politiques gérées pour Amazon SageMaker AI](security-iam-awsmanpol.md).

L’exemple suivant crée des politiques inter-compte pour ces trois ressources et les applique aux ressources. L’exemple suppose également que vous avez préalablement défini les variables suivantes :
+ `bucket` : compartiment Amazon S3 où sont stockées les versions de modèle.
+ `kms_key_id` : clé KMS utilisée pour chiffrer la sortie d’entraînement.
+ `sm_client`— Un client SageMaker AI Boto3.
+ `model_package_group_name` : groupe de modèles auquel vous voulez accorder l’accès intercompte.
+ `model_package_group_arn` : l’ARN du groupe de modèles auquel vous voulez accorder l’accès intercompte.

```
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.")
```