

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

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

Una vez que haya satisfecho los [requisitos previos](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-getting-started-edge.html#neo-getting-started-edge-step0), podrá compilar el modelo con Amazon SageMaker AI Neo. Puede compilar su modelo mediante la AWS CLI consola o el [SDK de Amazon Web Services para Python (Boto3) (consulte [Use](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html) Neo to Compile a Model)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html). En este ejemplo, compilará su modelo con Boto3.

Para compilar un modelo, SageMaker Neo necesita la siguiente información:

1.  **El URI del bucket de Amazon S3 en el que guardó el modelo formado.** 

   Si ha seguido los requisitos previos, el nombre de su bucket se almacena en una variable denominada `bucket`. En el siguiente fragmento de código, se muestra cómo enumerar todos sus buckets mediante AWS CLI: 

   ```
   aws s3 ls
   ```

   Por ejemplo: 

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

1.  **El URI del bucket de Amazon S3 en el que desea guardar el modelo compilado.** 

   El siguiente fragmento de código concatena el URI del bucket de Amazon S3 con el nombre de un directorio de salida denominado `output`: 

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

1.  **El marco de machine learning que haya utilizado para formar a su modelo.** 

   Defina el marco que haya utilizado para formar a su modelo.

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

   Por ejemplo, si desea compilar un modelo que se haya entrenado con TensorFlow, puede usar `tflite` o`tensorflow`. `tflite`Úselo si desea utilizar una versión más ligera TensorFlow que utilice menos memoria de almacenamiento. 

   ```
   framework = 'tflite'
   ```

   Para obtener una lista completa de los marcos compatibles con Neo, consulte [Marcos, dispositivos, sistemas y arquitecturas compatibles](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html). 

1.  **La forma de la entrada de su modelo.** 

    Neo requiere el nombre y la forma del tensor de entrada. El nombre y la forma se pasan como pares de clave-valor. `value` es una lista de las dimensiones enteras de un tensor de entrada y `key` es el nombre exacto de un tensor de entrada en el modelo. 

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

   Por ejemplo:

   ```
   data_shape = '{"normalized_input_image_tensor":[1, 300, 300, 3]}'
   ```
**nota**  
Asegúrese de que el modelo tenga el formato correcto en función del marco que haya utilizado. Consulta [¿Qué formas de datos de entrada espera SageMaker Neo?](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html#neo-job-compilation-expected-inputs) La clave de este diccionario debe cambiarse por el nombre del nuevo tensor de entrada.

1.  **El nombre del dispositivo de destino para el que se va a compilar o los datos generales de la plataforma de hardware** 

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

   Por ejemplo, si desea realizar la implementación en una Raspberry Pi 3, utilice: 

   ```
   target_device = 'rasp3b'
   ```

   Puede encontrar la lista completa de dispositivos periféricos compatibles en [Marcos, dispositivos, sistemas y arquitecturas compatibles](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html).

 Ahora que ha completado los pasos anteriores, puede enviar un trabajo de compilación a 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!')
```

Si desea información adicional para la depuración, incluya la siguiente declaración de impresión:

```
print(response)
```

Si el trabajo de compilación se realiza correctamente, el modelo compilado se almacena en el bucket de Amazon S3 de salida que haya especificado anteriormente (`s3_output_location`). Descargue su 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)
```