

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Compila il modello
<a name="neo-getting-started-edge-step1"></a>

Una volta soddisfatti i [prerequisiti](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-getting-started-edge.html#neo-getting-started-edge-step0), puoi compilare il tuo modello con Amazon SageMaker AI Neo. [Puoi compilare il tuo modello utilizzando AWS CLI, la console o l'[Amazon Web Services SDK for Python (Boto3), vedi Use Neo](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) to Compile a Model.](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html) In questo esempio, compilerai il tuo modello con Boto3.

Per compilare un modello, Neo richiede le seguenti informazioni: SageMaker 

1.  **L'URI del bucket Amazon S3 in cui è stato archiviato il modello addestrato.** 

   Se hai seguito i prerequisiti, il nome del bucket viene memorizzato in una variabile denominata `bucket`. Il seguente frammento di codice mostra come elencare tutti i bucket utilizzando: AWS CLI

   ```
   aws s3 ls
   ```

   Esempio: 

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

1.  **L'URI del bucket Amazon S3 in cui desideri salvare il modello compilato.** 

   Il frammento di codice riportato di seguito concatena l'URI del bucket Amazon S3 con il nome di una directory di output denominata `output`: 

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

1.  **Il framework di machine learning che hai usato per addestrare il tuo modello.** 

   Definisci il framework che hai usato per addestrare il tuo modello.

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

   Ad esempio, se si desidera compilare un modello che è stato addestrato a utilizzare TensorFlow, è possibile utilizzare `tflite` o. `tensorflow` `tflite`Utilizzalo se desideri utilizzare una versione più leggera TensorFlow che utilizza meno memoria di archiviazione. 

   ```
   framework = 'tflite'
   ```

   Per un elenco completo dei framework supportati da NEO, consulta [Framework, dispositivi, sistemi e architetture supportati](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html). 

1.  **La forma dell'input del modello.** 

    Neo richiede il nome e la forma del tensore di input. Il nome e la forma sono passati come coppie chiave-valore. `value` è un elenco delle dimensioni intere di un tensore di input e `key` è il nome esatto di un tensore di input nel modello. 

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

   Esempio:

   ```
   data_shape = '{"normalized_input_image_tensor":[1, 300, 300, 3]}'
   ```
**Nota**  
Assicurati che il modello sia formattato correttamente a seconda del framework che hai utilizzato. Vedi [Quali forme di dati di input si aspetta SageMaker Neo?](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html#neo-job-compilation-expected-inputs) La chiave in questo dizionario deve essere modificata con il nome del nuovo tensore di input.

1.  **Il nome del dispositivo di destinazione per cui compilare o i dettagli generali della piattaforma hardware** 

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

   Ad esempio, se desideri eseguire l’implementazione su un Raspberry Pi 3, usa: 

   ```
   target_device = 'rasp3b'
   ```

   Puoi trovare l'elenco completo dei dispositivi edge in [Framework, dispositivi, sistemi e architetture supportati](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html).

 Ora che hai completato i passaggi precedenti, puoi inviare un lavoro di compilazione 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!')
```

Se desideri ulteriori informazioni per il debug, includi la seguente dichiarazione di stampa:

```
print(response)
```

Se il processo di compilazione ha esito positivo, il modello compilato viene archiviato nel bucket di output Amazon S3 specificato in precedenza (`s3_output_location`). Scarica il modello compilato 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)
```