

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

# Compile o modelo.
<a name="neo-getting-started-edge-step1"></a>

Depois de satisfazer os [pré-requisitos](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-getting-started-edge.html#neo-getting-started-edge-step0), você pode compilar seu modelo com o Amazon AI Neo. SageMaker [Você pode compilar seu modelo usando o console ou o AWS CLI[SDK da Amazon Web Services para Python (Boto3). Consulte Use o Neo para](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) compilar um modelo.](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html) Neste exemplo, você compilará seu modelo com o Boto3.

Para compilar um modelo, SageMaker o Neo requer as seguintes informações:

1.  **O URI do bucket do Amazon S3 em que você armazenou o modelo treinado.** 

   Se você seguiu os pré-requisitos, o nome do seu bucket é armazenado em uma variável chamada `bucket`. O trecho de código a seguir mostra como listar todos os seus buckets usando o AWS CLI: 

   ```
   aws s3 ls
   ```

   Por exemplo: 

   ```
   $ aws s3 ls
   2020-11-02 17:08:50 bucket
   ```

1.  **O URI do bucket do Amazon S3 em que você deseja salvar o modelo compilado.** 

   O trecho de código abaixo concatena o URI do bucket do Amazon S3 com o nome de um diretório de saída chamado: `output` 

   ```
   s3_output_location = f's3://{bucket}/output'
   ```

1.  **A estrutura de machine learning que você usou para treinar seu modelo.** 

   Defina o framework que você usou para treinar seu modelo.

   ```
   framework = 'framework-name'
   ```

   Por exemplo, se você quiser compilar um modelo que foi treinado usando TensorFlow, você poderia usar `tflite` ou`tensorflow`. Use `tflite` se quiser usar uma versão mais leve TensorFlow que use menos memória de armazenamento. 

   ```
   framework = 'tflite'
   ```

   Para obter uma lista completa de estruturas e dispositivos de borda compatíveis, consulte [Estruturas, dispositivos, sistemas e arquiteturas compatíveis](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html). 

1.  **A forma da entrada do seu modelo.** 

    Neo requer o nome e a forma do seu tensor de entrada. O nome e a forma são passadas para pares de chave-valor. `value`é uma lista das dimensões inteiras de um tensor de entrada e `key` é o nome exato de um tensor de entrada no modelo. 

   ```
   data_shape = '{"name": [tensor-shape]}'
   ```

   Por exemplo:

   ```
   data_shape = '{"normalized_input_image_tensor":[1, 300, 300, 3]}'
   ```
**nota**  
Verifique se o modelo está formatado corretamente, dependendo da estrutura usada. Consulte [Quais formatos de dados de entrada o SageMaker Neo espera?](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html#neo-job-compilation-expected-inputs) A chave neste dicionário deve ser alterada para o nome do novo tensor de entrada.

1.  **O nome do dispositivo de destino para o qual compilar ou os detalhes gerais da plataforma de hardware** 

   ```
   target_device = 'target-device-name'
   ```

   Por exemplo, se quiser implantar em um Raspberry Pi 3, use: 

   ```
   target_device = 'rasp3b'
   ```

   Você pode encontrar a lista completa de dispositivos de borda compatíveis em [Estruturas, dispositivos, sistemas e arquiteturas compatíveis](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html).

 Agora que concluiu as etapas anteriores, você pode enviar um trabalho de compilação para o Neo. 

```
# Create a SageMaker client so you can submit a compilation job
sagemaker_client = boto3.client('sagemaker', region_name=AWS_REGION)

# Give your compilation job a name
compilation_job_name = 'getting-started-demo'
print(f'Compilation job for {compilation_job_name} started')

response = sagemaker_client.create_compilation_job(
    CompilationJobName=compilation_job_name,
    RoleArn=role_arn,
    InputConfig={
        'S3Uri': s3_input_location,
        'DataInputConfig': data_shape,
        'Framework': framework.upper()
    },
    OutputConfig={
        'S3OutputLocation': s3_output_location,
        'TargetDevice': target_device 
    },
    StoppingCondition={
        'MaxRuntimeInSeconds': 900
    }
)

# Optional - Poll every 30 sec to check completion status
import time

while True:
    response = sagemaker_client.describe_compilation_job(CompilationJobName=compilation_job_name)
    if response['CompilationJobStatus'] == 'COMPLETED':
        break
    elif response['CompilationJobStatus'] == 'FAILED':
        raise RuntimeError('Compilation failed')
    print('Compiling ...')
    time.sleep(30)
print('Done!')
```

Se quiser informações adicionais para depuração, inclua a seguinte instrução de impressão:

```
print(response)
```

Se o trabalho de compilação for bem-sucedido, seu modelo compilado será armazenado no bucket de saída do Amazon S3 que você especificou anteriormente (`s3_output_location`). Baixe seu modelo compilado localmente: 

```
object_path = f'output/{model}-{target_device}.tar.gz'
neo_compiled_model = f'compiled-{model}.tar.gz'
s3_client.download_file(bucket, object_path, neo_compiled_model)
```