

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

# Implantar um modelo a partir do registro com Python
<a name="model-registry-deploy"></a>

Depois de registrar uma versão do modelo e aprová-la para implantação, implante-a em um endpoint de SageMaker IA para inferência em tempo real. Você pode implantar seu modelo usando o SageMaker AI SDK ou o. AWS SDK para Python (Boto3)

Quando você cria um projeto de operações de aprendizado de máquina (MLOps) e escolhe um modelo de MLOps projeto que inclui a implantação do modelo, as versões aprovadas do modelo no Registro de Modelos são automaticamente implantadas na produção. Para obter informações sobre o uso de MLOps projetos de SageMaker IA, consulte[MLOps Automação com SageMaker projetos](sagemaker-projects.md).

Você também pode habilitar uma AWS conta para implantar versões de modelo que foram criadas em uma conta diferente adicionando uma política de recursos entre contas. Por exemplo, uma equipe em sua organização pode ser responsável pelos modelos de treinamento e uma equipe diferente é responsável pela implantação e atualização dos modelos.

**Topics**
+ [Implantar um modelo a partir do registro (SageMaker SDK)](#model-registry-deploy-smsdk)
+ [Implantar um modelo a partir do Registro (Boto3)](#model-registry-deploy-api)
+ [Implantar uma versão do modelo de uma conta diferente](#model-registry-deploy-xaccount)

## Implantar um modelo a partir do registro (SageMaker SDK)
<a name="model-registry-deploy-smsdk"></a>

Para implantar uma versão do modelo usando o [Amazon SageMaker Python SDK](https://sagemaker.readthedocs.io/en/stable), use o seguinte trecho de código:

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

## Implantar um modelo a partir do Registro (Boto3)
<a name="model-registry-deploy-api"></a>

Para implantar uma versão do modelo usando o AWS SDK para Python (Boto3), conclua as seguintes etapas:

1. O trecho de código a seguir pressupõe que você já criou o cliente SageMaker AI Boto3 `sm_client` e uma versão do modelo cujo ARN está armazenado na variável. `model_version_arn`

   Crie um objeto de modelo a partir da versão do modelo chamando a operação de API [create\_model](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model). Passe o nome de recurso da Amazon (ARN) da versão do modelo como parte dos `Containers` para o objeto do modelo.

   ```
   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. Crie uma configuração de endpoint chamando a API `create_endpoint_config`. A configuração do endpoint especifica o número e o tipo de instâncias do Amazon EC2 a serem usadas para o endpoint.

   ```
   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. Crie o endpoint chamando `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'])
   ```

## Implantar uma versão do modelo de uma conta diferente
<a name="model-registry-deploy-xaccount"></a>

Você pode permitir que uma AWS conta implante versões de modelo que foram criadas em uma conta diferente adicionando uma política de recursos entre contas. Por exemplo, uma equipe em sua organização pode ser responsável pelos modelos de treinamento e uma equipe diferente é responsável pela implantação e atualização dos modelos. Ao criar essas políticas de recursos, você aplica a política ao recurso específico ao qual deseja conceder acesso. Para obter mais informações sobre políticas de recursos entre contas em AWS, consulte [Lógica de avaliação de políticas entre contas](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic-cross-account.html) no Guia do *AWS Identity and Access Management usuário*.

**nota**  
Você deve usar uma chave do KMS para criptografar a ação de [configurar dados de saída](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OutputDataConfig.html) durante o treinamento para implantação do modelo entre contas.

Para permitir a implantação do modelo entre contas na SageMaker IA, você precisa fornecer uma política de recursos entre contas para o grupo de modelos que contém as versões do modelo que você deseja implantar, o repositório do Amazon ECR onde reside a imagem de inferência do grupo de modelos e o bucket do Amazon S3 onde as versões do modelo são armazenadas.

Para poder implantar um modelo que foi criado em uma conta diferente, você deve ter uma função que tenha acesso às ações de SageMaker IA, como uma função com a política `AmazonSageMakerFullAccess` gerenciada. Para obter informações sobre políticas gerenciadas por SageMaker IA, consulte[AWS políticas gerenciadas para Amazon SageMaker AI](security-iam-awsmanpol.md).

O exemplo a seguir cria políticas entre contas para todos esses três recursos e aplica as políticas aos recursos. O exemplo também pressupõe que você tenha definido anteriormente as seguintes variáveis:
+ `bucket`: O bucket do Amazon S3 onde as versões do modelo são armazenadas.
+ `kms_key_id`: A chave do KMS usada para criptografar a saída do treinamento.
+ `sm_client`— Um cliente SageMaker AI Boto3.
+ `model_package_group_name`: O grupo de modelos ao qual você deseja conceder acesso entre contas.
+ `model_package_group_arn`: O ARN do grupo de modelos ao qual você deseja conceder acesso entre contas.

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