

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á.

# Compilação de modelos com Neo
<a name="neo-job-compilation"></a>

Esta seção mostra como criar, descrever, interromper e listar trabalhos de compilação. As seguintes opções estão disponíveis no Amazon SageMaker Neo para gerenciar os trabalhos de compilação de modelos de aprendizado de máquina: o AWS Command Line Interface, o console Amazon SageMaker AI ou o Amazon SageMaker SDK. 

**Topics**
+ [Prepare o modelo para compilação](neo-compilation-preparing-model.md)
+ [Compilar um modelo (AWS Command Line Interface)](neo-job-compilation-cli.md)
+ [Compilar um modelo (Amazon SageMaker AI Console)](neo-job-compilation-console.md)
+ [Compilar um modelo (Amazon SageMaker AI SDK)](neo-job-compilation-sagemaker-sdk.md)

# Prepare o modelo para compilação
<a name="neo-compilation-preparing-model"></a>

SageMaker O Neo exige modelos de aprendizado de máquina para satisfazer formas específicas de dados de entrada. O formato de entrada necessário para a compilação depende da estrutura de aprendizado profundo que você usa. Depois que a forma de entrada do modelo estiver formatada corretamente, salve seu modelo de acordo com os requisitos abaixo. Depois de salvar um modelo, comprima os artefatos do modelo.

**Topics**
+ [Quais formatos de dados de entrada o SageMaker Neo espera?](#neo-job-compilation-expected-inputs)
+ [Salvando modelos para SageMaker Neo](#neo-job-compilation-how-to-save-model)

## Quais formatos de dados de entrada o SageMaker Neo espera?
<a name="neo-job-compilation-expected-inputs"></a>

Antes de compilar seu modelo, verifique se ele está formatado corretamente. O Neo espera o nome e a forma das entradas de dados esperadas para o seu modelo treinado com um formato JSON ou de lista. As entradas esperadas são específicas da estrutura. 

Abaixo estão as formas de entrada que SageMaker Neo espera:

### Keras
<a name="collapsible-section-1"></a>

Especifique o nome e a forma (formato NCHW) das entradas dos dados esperados usando um formato de dicionário para seu modelo treinado. Observe que, embora os artefatos do modelo Keras devam ser carregados no formato NHWC (último canal), DataInputConfig devem ser especificados no formato NCHW (primeiro canal). Os formatos de dicionário necessários são os seguintes: 
+ Para uma entrada: `{'input_1':[1,3,224,224]}`
+ Para duas entradas: `{'input_1': [1,3,224,224], 'input_2':[1,3,224,224]}`

### MXNet/ONNX
<a name="collapsible-section-2"></a>

Especifique o nome e a forma (formato NCHW) das entradas dos dados esperados usando um formato de dicionário para seu modelo treinado. Os formatos de dicionário necessários são os seguintes:
+ Para uma entrada: `{'data':[1,3,1024,1024]}`
+ Para duas entradas: `{'var1': [1,1,28,28], 'var2':[1,1,28,28]}`

### PyTorch
<a name="collapsible-section-3"></a>

Para um PyTorch modelo, você não precisa fornecer o nome e a forma das entradas de dados esperadas se atender às duas condições a seguir:
+ Você criou seu arquivo de definição de modelo usando PyTorch 2.0 ou posterior. Para obter mais informações sobre como criar o arquivo de definição, consulte a [PyTorch](#how-to-save-pytorch) seção *Salvando modelos para SageMaker o Neo*.
+ Você está compilando seu modelo para uma instância de nuvem. Para obter mais informações sobre os tipos de instância compatíveis com SageMaker o Neo, consulte[Tipos e estruturas de instância compatíveis](neo-supported-cloud.md).

Se você atender a essas condições, SageMaker o Neo obtém a configuração de entrada do arquivo de definição do modelo (.pt ou .pth) com o qual você cria. PyTorch

Caso contrário, você deverá fazer o seguinte:

Especifique o nome e a forma (formato NCHW) das entradas dos dados esperados usando um formato de dicionário para seu modelo treinado. Como alternativa, você pode especificar a forma usando um formato de lista. Os formatos de dicionário necessários são os seguintes:
+ Exemplos para uma entrada em formato de dicionário: `{'input0':[1,3,224,224]}`
+ Para uma entrada em formato de lista: `[[1,3,224,224]]`
+ Exemplos para duas entradas em formato de dicionário: `{'input0':[1,3,224,224], 'input1':[1,3,224,224]}`
+ Para duas entradas em formato de lista: `[[1,3,224,224], [1,3,224,224]]`

### TensorFlow
<a name="collapsible-section-4"></a>

Especifique o nome e a forma (formato NHWC) das entradas de dados esperadas usando um formato de dicionário para o seu modelo treinado. Os formatos de dicionário necessários são os seguintes:
+ Para uma entrada: `{'input':[1,1024,1024,3]}`
+ Para duas entradas: `{'data1': [1,28,28,1], 'data2':[1,28,28,1]}`

### TFLite
<a name="collapsible-section-5"></a>

Especifique o nome e a forma (formato NHWC) das entradas de dados esperadas usando um formato de dicionário para o seu modelo treinado. Os formatos de dicionário necessários são os seguintes:
+ Para uma entrada: `{'input':[1,224,224,3]}`

**nota**  
SageMaker O Neo suporta apenas o TensorFlow Lite para alvos de dispositivos periféricos. Para obter uma lista de alvos de dispositivos SageMaker Neo Edge compatíveis, consulte a [Dispositivos](neo-supported-devices-edge-devices.md#neo-supported-edge-devices) página SageMaker Neo. Para ver uma lista de destinos de instância de nuvem SageMaker Neo compatíveis, consulte a [Tipos e estruturas de instância compatíveis](neo-supported-cloud.md) página SageMaker Neo.

### XGBoost
<a name="collapsible-section-6"></a>

O nome e a forma de dados de entrada não são necessários.

## Salvando modelos para SageMaker Neo
<a name="neo-job-compilation-how-to-save-model"></a>

Os exemplos de código a seguir mostram como salvar o modelo para torná-lo compatível com o Neo. Os modelos devem ser empacotados como arquivos tar compactados (`*.tar.gz`).

### Keras
<a name="how-to-save-tf-keras"></a>

Os modelos Keras exigem um arquivo de definição de modelo (`.h5`).

Há duas opções para salvar seu modelo Keras para torná-lo compatível com SageMaker o Neo:

1. Exporte para o formato `.h5` com `model.save("<model-name>", save_format="h5")`.

1. Congele o `SavedModel` após a exportação.

Veja abaixo um exemplo de como exportar um `tf.keras` modelo como um gráfico congelado (opção dois):

```
import os
import tensorflow as tf
from tensorflow.keras.applications.resnet50 import ResNet50
from tensorflow.keras import backend

tf.keras.backend.set_learning_phase(0)
model = tf.keras.applications.ResNet50(weights='imagenet', include_top=False, input_shape=(224, 224, 3), pooling='avg')
model.summary()

# Save as a SavedModel
export_dir = 'saved_model/'
model.save(export_dir, save_format='tf')

# Freeze saved model
input_node_names = [inp.name.split(":")[0] for inp in model.inputs]
output_node_names = [output.name.split(":")[0] for output in model.outputs]
print("Input names: ", input_node_names)
with tf.Session() as sess:
    loaded = tf.saved_model.load(sess, export_dir=export_dir, tags=["serve"]) 
    frozen_graph = tf.graph_util.convert_variables_to_constants(sess,
                                                                sess.graph.as_graph_def(),
                                                                output_node_names)
    tf.io.write_graph(graph_or_graph_def=frozen_graph, logdir=".", name="frozen_graph.pb", as_text=False)

import tarfile
tar = tarfile.open("frozen_graph.tar.gz", "w:gz")
tar.add("frozen_graph.pb")
tar.close()
```

**Atenção**  
Não exporte seu modelo com a classe `SavedModel` usando `model.save(<path>, save_format='tf')`. Esse formato é adequado para treinamento, mas não é adequado para inferência.

### MXNet
<a name="how-to-save-mxnet"></a>

MXNet os modelos devem ser salvos como um único arquivo de símbolo `*-symbol.json` e um único parâmetro`*.params files`.

------
#### [ Gluon Models ]

Defina a rede neural usando a Classe `HybridSequential`. Isso executará o código no estilo de programação simbólica (em oposição à programação imperativa).

```
from mxnet import nd, sym
from mxnet.gluon import nn

def get_net():
    net = nn.HybridSequential()  # Here we use the class HybridSequential.
    net.add(nn.Dense(256, activation='relu'),
            nn.Dense(128, activation='relu'),
            nn.Dense(2))
    net.initialize()
    return net

# Define an input to compute a forward calculation. 
x = nd.random.normal(shape=(1, 512))
net = get_net()

# During the forward calculation, the neural network will automatically infer
# the shape of the weight parameters of all the layers based on the shape of
# the input.
net(x)
                        
# hybridize model
net.hybridize()
net(x)

# export model
net.export('<model_name>') # this will create model-symbol.json and model-0000.params files

import tarfile
tar = tarfile.open("<model_name>.tar.gz", "w:gz")
for name in ["<model_name>-0000.params", "<model_name>-symbol.json"]:
    tar.add(name)
tar.close()
```

Para obter mais informações sobre modelos de hibridização, consulte a documentação sobre [MXNet hibridização](https://mxnet.apache.org/versions/1.7.0/api/python/docs/tutorials/packages/gluon/blocks/hybridize.html).

------
#### [ Gluon Model Zoo (GluonCV) ]

Os modelos zoo do GluonCV vêm pré-hibridizados. Então, você pode simplesmente exportá-los.

```
import numpy as np
import mxnet as mx
import gluoncv as gcv
from gluoncv.utils import export_block
import tarfile

net = gcv.model_zoo.get_model('<model_name>', pretrained=True) # For example, choose <model_name> as resnet18_v1
export_block('<model_name>', net, preprocess=True, layout='HWC')

tar = tarfile.open("<model_name>.tar.gz", "w:gz")

for name in ["<model_name>-0000.params", "<model_name>-symbol.json"]:
    tar.add(name)
tar.close()
```

------
#### [ Non Gluon Models ]

Todos os modelos não-Gluon, quando salvos em disco, usam arquivos `*-symbol` e `*.params`. Portanto, eles já estão no formato correto para o Neo.

```
# Pass the following 3 parameters: sym, args, aux
mx.model.save_checkpoint('<model_name>',0,sym,args,aux) # this will create <model_name>-symbol.json and <model_name>-0000.params files

import tarfile
tar = tarfile.open("<model_name>.tar.gz", "w:gz")

for name in ["<model_name>-0000.params", "<model_name>-symbol.json"]:
    tar.add(name)
tar.close()
```

------

### PyTorch
<a name="how-to-save-pytorch"></a>

PyTorch os modelos devem ser salvos como um arquivo de definição (`.pt`ou`.pth`) com o tipo de dados de entrada de. `float32`

Para salvar seu modelo, use o método `torch.jit.trace` seguido pelo método `torch.save`. Esse processo salva um objeto em um arquivo de disco e, por padrão, usa python pickle (`pickle_module=pickle`) para salvar os objetos e alguns metadados. Em seguida, converta o modelo salvo em um arquivo tar compactado.

```
import torchvision
import torch

model = torchvision.models.resnet18(pretrained=True)
model.eval()
inp = torch.rand(1, 3, 224, 224)
model_trace = torch.jit.trace(model, inp)

# Save your model. The following code saves it with the .pth file extension
model_trace.save('model.pth')

# Save as a compressed tar file
import tarfile
with tarfile.open('model.tar.gz', 'w:gz') as f:
    f.add('model.pth')
f.close()
```

Se você salvar seu modelo com PyTorch 2.0 ou posterior, SageMaker o Neo deriva a configuração de entrada do modelo (o nome e a forma de sua entrada) do arquivo de definição. Nesse caso, você não precisa especificar a configuração de entrada de dados para a SageMaker IA ao compilar o modelo.

Se você quiser evitar que SageMaker o Neo obtenha a configuração de entrada, você pode definir o `_store_inputs` parâmetro de `torch.jit.trace` to. `False` Se você fizer isso, deverá especificar a configuração de entrada de dados para a SageMaker IA ao compilar o modelo.

Para obter mais informações sobre o `torch.jit.trace` método, consulte [TORCH.JIT.TRACE](https://pytorch.org/docs/stable/generated/torch.jit.trace.html#torch.jit.trace) na documentação. PyTorch 

### TensorFlow
<a name="how-to-save-tf"></a>

TensorFlow requer um `.pb` ou um `.pbtxt` arquivo e um diretório de variáveis que contenha variáveis. Para modelos congelados, apenas um arquivo `.pb` ou `.pbtxt` é necessário.

O exemplo de código a seguir mostra como usar o comando Linux tar para compactar o modelo. Execute o seguinte em seu terminal ou em um caderno Jupyter (se você usa um caderno Jupyter, insira o comando mágico `!` no início da instrução):

```
# Download SSD_Mobilenet trained model
!wget http://download.tensorflow.org/models/object_detection/ssd_mobilenet_v2_coco_2018_03_29.tar.gz

# unzip the compressed tar file
!tar xvf ssd_mobilenet_v2_coco_2018_03_29.tar.gz

# Compress the tar file and save it in a directory called 'model.tar.gz'
!tar czvf model.tar.gz ssd_mobilenet_v2_coco_2018_03_29/frozen_inference_graph.pb
```

Os sinalizadores de comando usados neste exemplo realizam o seguinte:
+ `c`: Criar um arquivamento
+ `z`: Comprimir o arquivo com gzip
+ `v`: Exibir o progresso do arquivamento
+ `f`: Especificar o nome do arquivo

### Estimadores integrados
<a name="how-to-save-built-in"></a>

Os estimadores integrados são feitos por contêineres específicos da estrutura ou contêineres específicos do algoritmo. Os objetos estimadores do algoritmo incorporado e do estimador específico da estrutura salvam o modelo no formato correto quando você treina o modelo usando o método incorporado `.fit`.

Por exemplo, você pode usar `sagemaker.TensorFlow` a para definir um TensorFlow estimador:

```
from sagemaker.tensorflow import TensorFlow

estimator = TensorFlow(entry_point='mnist.py',
                        role=role,  #param role can be arn of a sagemaker execution role
                        framework_version='1.15.3',
                        py_version='py3',
                        training_steps=1000, 
                        evaluation_steps=100,
                        instance_count=2,
                        instance_type='ml.c4.xlarge')
```

Em seguida, treine o modelo com o método `.fit` integrado:

```
estimator.fit(inputs)
```

Antes de finalmente compilar o modelo com o método `compile_model` integrado:

```
# Specify output path of the compiled model
output_path = '/'.join(estimator.output_path.split('/')[:-1])

# Compile model
optimized_estimator = estimator.compile_model(target_instance_family='ml_c5', 
                              input_shape={'data':[1, 784]},  # Batch size 1, 3 channels, 224x224 Images.
                              output_path=output_path,
                              framework='tensorflow', framework_version='1.15.3')
```

Você também pode usar a `sagemaker.estimator.Estimator` classe para inicializar um objeto estimador para treinar e compilar um algoritmo integrado com o método do SDK `compile_model` do Python: SageMaker 

```
import sagemaker
from sagemaker.image_uris import retrieve
sagemaker_session = sagemaker.Session()
aws_region = sagemaker_session.boto_region_name

# Specify built-in algorithm training image
training_image = retrieve(framework='image-classification', 
                          region=aws_region, image_scope='training')

training_image = retrieve(framework='image-classification', region=aws_region, image_scope='training')

# Create estimator object for training
estimator = sagemaker.estimator.Estimator(image_uri=training_image,
                                          role=role,  #param role can be arn of a sagemaker execution role
                                          instance_count=1,
                                          instance_type='ml.p3.8xlarge',
                                          volume_size = 50,
                                          max_run = 360000,
                                          input_mode= 'File',
                                          output_path=s3_training_output_location,
                                          base_job_name='image-classification-training'
                                          )
                                          
# Setup the input data_channels to be used later for training.                                          
train_data = sagemaker.inputs.TrainingInput(s3_training_data_location,
                                            content_type='application/x-recordio',
                                            s3_data_type='S3Prefix')
validation_data = sagemaker.inputs.TrainingInput(s3_validation_data_location,
                                                content_type='application/x-recordio',
                                                s3_data_type='S3Prefix')
data_channels = {'train': train_data, 'validation': validation_data}


# Train model
estimator.fit(inputs=data_channels, logs=True)

# Compile model with Neo                                                                                  
optimized_estimator = estimator.compile_model(target_instance_family='ml_c5',
                                          input_shape={'data':[1, 3, 224, 224], 'softmax_label':[1]},
                                          output_path=s3_compilation_output_location,
                                          framework='mxnet',
                                          framework_version='1.7')
```

Para obter mais informações sobre a compilação de modelos com o SDK do SageMaker Python, consulte. [Compilar um modelo (Amazon SageMaker AI SDK)](neo-job-compilation-sagemaker-sdk.md)

# Compilar um modelo (AWS Command Line Interface)
<a name="neo-job-compilation-cli"></a>

Esta seção mostra como gerenciar trabalhos de compilação do Amazon SageMaker Neo para modelos de aprendizado de máquina usando AWS Command Line Interface (CLI). Você pode criar, descrever, parar e listar os trabalhos de compilação. 

1. Crie um trabalho de compilação

   Com a operação da [CreateCompilationJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCompilationJob.html)API, você pode especificar o formato de entrada de dados, o bucket S3 no qual armazenar seu modelo, o bucket S3 no qual gravar o modelo compilado e o dispositivo ou plataforma de hardware de destino.

   A tabela a seguir demonstra como configurar a API `CreateCompilationJob` com base no fato de seu destino ser um dispositivo ou uma plataforma.

------
#### [ Device Example ]

   ```
   {
       "CompilationJobName": "neo-compilation-job-demo",
       "RoleArn": "arn:aws:iam::<your-account>:role/service-role/AmazonSageMaker-ExecutionRole-yyyymmddThhmmss",
       "InputConfig": {
           "S3Uri": "s3://<your-bucket>/sagemaker/neo-compilation-job-demo-data/train",
           "DataInputConfig":  "{'data': [1,3,1024,1024]}",
           "Framework": "MXNET"
       },
       "OutputConfig": {
           "S3OutputLocation": "s3://<your-bucket>/sagemaker/neo-compilation-job-demo-data/compile",
           # A target device specification example for a ml_c5 instance family
           "TargetDevice": "ml_c5"
       },
       "StoppingCondition": {
           "MaxRuntimeInSeconds": 300
       }
   }
   ```

   Opcionalmente, você pode especificar a versão da estrutura usada com o [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InputConfig.html#sagemaker-Type-InputConfig-FrameworkVersion](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InputConfig.html#sagemaker-Type-InputConfig-FrameworkVersion)campo se tiver usado a PyTorch estrutura para treinar seu modelo e seu dispositivo de destino for um `ml_* ` alvo.

   ```
   {
       "CompilationJobName": "neo-compilation-job-demo",
       "RoleArn": "arn:aws:iam::<your-account>:role/service-role/AmazonSageMaker-ExecutionRole-yyyymmddThhmmss",
       "InputConfig": {
           "S3Uri": "s3://<your-bucket>/sagemaker/neo-compilation-job-demo-data/train",
           "DataInputConfig":  "{'data': [1,3,1024,1024]}",
           "Framework": "PYTORCH",
           "FrameworkVersion": "1.6"
       },
       "OutputConfig": {
           "S3OutputLocation": "s3://<your-bucket>/sagemaker/neo-compilation-job-demo-data/compile",
           # A target device specification example for a ml_c5 instance family
           "TargetDevice": "ml_c5",
           # When compiling for ml_* instances using PyTorch framework, use the "CompilerOptions" field in 
           # OutputConfig to provide the correct data type ("dtype") of the model’s input. Default assumed is "float32"
           "CompilerOptions": "{'dtype': 'long'}"
       },
       "StoppingCondition": {
           "MaxRuntimeInSeconds": 300
       }
   }
   ```

**Observações:**  
Se você salvou seu modelo usando a PyTorch versão 2.0 ou posterior, o `DataInputConfig` campo é opcional. SageMaker O AI Neo obtém a configuração de entrada do arquivo de definição do modelo com o qual você cria PyTorch. Para obter mais informações sobre como criar o arquivo de definição, consulte a [PyTorch](neo-compilation-preparing-model.md#how-to-save-pytorch) seção *Salvando modelos para o SageMaker AI Neo*.
Esse campo de API só é compatível com PyTorch.

------
#### [ Platform Example ]

   ```
   {
       "CompilationJobName": "neo-test-compilation-job",
       "RoleArn": "arn:aws:iam::<your-account>:role/service-role/AmazonSageMaker-ExecutionRole-yyyymmddThhmmss",
       "InputConfig": {
           "S3Uri": "s3://<your-bucket>/sagemaker/neo-compilation-job-demo-data/train",
           "DataInputConfig":  "{'data': [1,3,1024,1024]}",
           "Framework": "MXNET"
       },
       "OutputConfig": {
           "S3OutputLocation": "s3://<your-bucket>/sagemaker/neo-compilation-job-demo-data/compile",
           # A target platform configuration example for a p3.2xlarge instance
           "TargetPlatform": {
               "Os": "LINUX",
               "Arch": "X86_64",
               "Accelerator": "NVIDIA"
           },
           "CompilerOptions": "{'cuda-ver': '10.0', 'trt-ver': '6.0.1', 'gpu-code': 'sm_70'}"
       },
       "StoppingCondition": {
           "MaxRuntimeInSeconds": 300
       }
   }
   ```

------
**nota**  
Para a operação da API `OutputConfig`, as operações de API `TargetDevice` e `TargetPlatform` são mutuamente exclusivas. Você precisa escolher uma das duas opções.

   Para encontrar exemplos de strings JSON de `DataInputConfig` dependência de estruturas, consulte [Quais são as formas de dados de entrada que o Neo espera](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting-compilation.html#neo-troubleshooting-errors-preventing).

   Para obter mais informações sobre como definir as configurações, consulte as operações [InputConfig[OutputConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OutputConfig.html)](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InputConfig.html), e [TargetPlatform](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TargetPlatform.html)da API na referência da SageMaker API.

1. Depois de configurar o arquivo JSON, execute o seguinte comando para criar a tarefa de compilação:

   ```
   aws sagemaker create-compilation-job \
   --cli-input-json file://job.json \
   --region us-west-2 
   
   # You should get CompilationJobArn
   ```

1. Descreva o trabalho de compilação executando o seguinte comando:

   ```
   aws sagemaker describe-compilation-job \
   --compilation-job-name $JOB_NM \
   --region us-west-2
   ```

1. Pare o trabalho de compilação executando o seguinte comando:

   ```
   aws sagemaker stop-compilation-job \
   --compilation-job-name $JOB_NM \
   --region us-west-2
   
   # There is no output for compilation-job operation
   ```

1. Liste o trabalho de compilação executando o seguinte comando:

   ```
   aws sagemaker list-compilation-jobs \
   --region us-west-2
   ```

# Compilar um modelo (Amazon SageMaker AI Console)
<a name="neo-job-compilation-console"></a>

Você pode criar um trabalho de compilação do Amazon SageMaker Neo no console do Amazon SageMaker AI.

1. No console do **Amazon SageMaker AI**, escolha **Trabalhos de compilação** e, em seguida, escolha **Criar trabalho de compilação.**  
![\[Crie um trabalho de compilação.\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/neo/8-create-compilation-job.png)

1. Na página **Criar trabalho de compilação**, em **Nome do trabalho**, digite um nome. Em seguida, selecione uma **perfil do IAM**.  
![\[Crie uma página de trabalho de compilação.\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/neo/9-create-compilation-job-config.png)

1. Se você não tem uma perfil do IAM, escolha **Criar uma nova função**.  
![\[Crie a localização do perfil do IAM.\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/neo/10a-create-iam-role.png)

1. Na página **Criar uma perfil do IAM**, escolha **Qualquer bucket do S3** e depois **Criar função**.  
![\[Crie um perfil do IAM.\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/neo/10-create-iam-role.png)

1. 

------
#### [ Non PyTorch Frameworks ]

   Na seção **Configuração de entrada**, insira o caminho completo do URI do bucket Amazon S3 que contém os artefatos do seu modelo no campo de entrada **Localização de artefatos de modelo**. Os artefatos do seu modelo devem estar em um formato de arquivo tarball compactado (`.tar.gz`). 

   No campo **Configuração de entrada de dados**, insira a string JSON que especifica a forma dos dados de entrada.

   Para **Estrutura de machine learning**, escolha a estrutura.

![\[Página de configuração de entrada.\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/neo/neo-create-compilation-job-input-config.png)


   Para encontrar exemplos de sequências JSON de formas de entrada de dados, dependendo das estruturas, consulte [Quais são as formas de dados de entrada que o Neo espera](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting.html#neo-troubleshooting-errors-preventing).

------
#### [ PyTorch Framework ]

   Instruções semelhantes se aplicam à compilação de PyTorch modelos. No entanto, se você treinou PyTorch e está tentando compilar o modelo para `ml_*` (exceto`ml_inf`) o target, você pode, opcionalmente, especificar a versão usada PyTorch .

![\[Exemplo da seção de Configuração de entrada mostrando onde escolher a versão do Framework.\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/neo/compile_console_pytorch.png)


   Para encontrar exemplos de sequências JSON de formas de entrada de dados, dependendo das estruturas, consulte [Quais são as formas de dados de entrada que o Neo espera](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting.html#neo-troubleshooting-errors-preventing).

**Observações**  
Se você salvou seu modelo usando a PyTorch versão 2.0 ou posterior, o **campo Configuração de entrada de dados** é opcional. SageMaker O Neo obtém a configuração de entrada do arquivo de definição do modelo com o qual você cria PyTorch. Para obter mais informações sobre como criar o arquivo de definição, consulte a [PyTorch](neo-compilation-preparing-model.md#how-to-save-pytorch) seção *Salvando modelos para o SageMaker AI Neo*.
Ao compilar para `ml_*` instâncias usando a PyTorch estrutura, use o campo de **opções do compilador** na **Configuração de saída** para fornecer o tipo de dados correto (`dtype`) da entrada do modelo. O padrão é definido como `"float32"`. 

![\[Exemplo da seção de Configuração de saída.\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/neo/neo_compilation_console_pytorch_compiler_options.png)


**Atenção**  
 Se você especificar um caminho de URI do bucket do Amazon S3 que leva ao arquivo `.pth`, você receberá o seguinte erro após iniciar a compilação: `ClientError: InputConfiguration: Unable to untar input model.Please confirm the model is a tar.gz file` 

------

1.  Vá para a seção **Configuração de saída**. Escolha onde você deseja implantar o modelo. Você pode implantar seu modelo em um **dispositivo de destino** ou em uma **plataforma de destino**. Os dispositivos de destino incluem dispositivos de nuvem e de borda. As plataformas de destino se referem a sistemas operacionais, arquiteturas e aceleradores específicos nos quais você deseja que seu modelo seja executado. 

    Em **Local de saída do S3**, insira o caminho para o bucket do S3 ou a pasta onde deseja armazenar o modelo. Opcionalmente, você pode adicionar opções do compilador no formato JSON na seção Opções do **compilador**.   
![\[Página de configuração da saída.\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/neo/neo-console-output-config.png)

1. Verifique o status do trabalho de compilação quando ele for iniciado. Esse status do trabalho pode ser encontrado na parte superior da página **Trabalho de compilação**, conforme mostrado na captura de tela a seguir. Você também pode conferir o status na coluna **Status**.  
![\[Status do trabalho de compilação.\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/neo/12-run-model-compilation.png)

1. Verifique o status do trabalho de compilação quando ele for concluído. Você pode verificar o status na coluna **Status**, conforme mostrado na captura de tela a seguir.  
![\[Status do trabalho de compilação.\]](http://docs.aws.amazon.com/pt_br/sagemaker/latest/dg/images/neo/12a-completed-model-compilation.png)

# Compilar um modelo (Amazon SageMaker AI SDK)
<a name="neo-job-compilation-sagemaker-sdk"></a>

 Você pode usar a [https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html?#sagemaker.estimator.Estimator.compile_model](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html?#sagemaker.estimator.Estimator.compile_model)API no [Amazon SageMaker AI SDK para Python para](https://sagemaker.readthedocs.io/en/stable/) compilar um modelo treinado e otimizá-lo para hardware de destino específico. A API deve ser invocada no objeto estimador usado durante o treinamento do modelo. 

**nota**  
Você deve definir a variável de `MMS_DEFAULT_RESPONSE_TIMEOUT` ambiente como `500` ao compilar o modelo com MXNet ou PyTorch. A variável de ambiente não é necessária para TensorFlow. 

 Veja a seguir um exemplo de como você pode compilar um modelo usando o objeto `trained_model_estimator`. 

```
# Replace the value of expected_trained_model_input below and
# specify the name & shape of the expected inputs for your trained model
# in json dictionary form
expected_trained_model_input = {'data':[1, 784]}

# Replace the example target_instance_family below to your preferred target_instance_family
compiled_model = trained_model_estimator.compile_model(target_instance_family='ml_c5',
        input_shape=expected_trained_model_input,
        output_path='insert s3 output path',
        env={'MMS_DEFAULT_RESPONSE_TIMEOUT': '500'})
```

O código compila o modelo, salva o modelo otimizado em `output_path` e cria um modelo de SageMaker IA que pode ser implantado em um endpoint. 