

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Optimisation des performances des modèles avec SageMaker Neo
<a name="neo"></a>

Neo est une fonctionnalité d’Amazon SageMaker AI qui permet aux modèles de machine learning de s’entraîner une fois, puis de s’exécuter n’importe où dans le cloud et en périphérie. 

Si vous utilisez SageMaker Neo pour la première fois, nous vous recommandons de consulter la section [Getting Started with Edge Devices (Démarrer avec les appareils en périphérie)](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-getting-started-edge.html) pour obtenir les instructions étape par étape de compilation et de déploiement sur un appareil en périphérie. 

## Qu’est-ce que SageMaker Neo ?
<a name="neo-what-it-is"></a>

Généralement, il est difficile d’optimiser des modèles de machine learning pour l’inférence sur plusieurs plateformes, car vous devez régler manuellement ces modèles en fonction de la configuration matérielle et logicielle de chaque plateforme. Si vous voulez obtenir des performances optimales pour une charge de travail donnée, vous devez connaître certains facteurs comme l’architecture matérielle, l’ensemble d’instructions, les modèles d’accès à la mémoire et les formes de données d’entrée. Pour le développement logiciel traditionnel, des outils tels que des compilateurs et des profileurs simplifient le processus. Pour le machine learning, la plupart des outils sont propres au framework ou au matériel. Cela vous oblige à adopter un processus manuel tâtonnant aussi peu fiable qu’inutile.

Neo optimise automatiquement les modèles Gluon, Keras, MXNet, PyTorch, TensorFlow, TensorFlow-Lite et ONNX pour l’inférence sur les machines Android, Linux et Windows basées sur des processeurs Ambarella, ARM, Intel, Nvidia, NXP, Qualcomm, Texas Instruments et Xilinx. Neo est testé avec des modèles de vision par ordinateur disponibles dans les model zoos des frameworks. SageMaker Neo prend en charge la compilation et le déploiement de deux plateformes principales : les instances cloud (y compris Inferentia) et les appareils en périphérie.

Pour plus d’informations sur les cadres pris en charge et les types d’instances cloud dans lesquels vous pouvez déployer, consultez [Cadres et types d’instance pris en charge](neo-supported-cloud.md) pour les instances cloud.

Pour plus d’informations sur les cadres pris en charge, les appareils en périphérie, les systèmes d’exploitation, les architectures de puces et les modèles de machine learning courants testés par SageMaker AI Neo pour les appareils en périphérie, consultez [Cadres, périphériques, systèmes et architectures pris en charge](neo-supported-devices-edge.md) pour les appareils en périphérie.

## Fonctionnement
<a name="neo-how-it-works"></a>

Neo est composé d’un compilateur et d’un environnement d’exécution. D’abord, l’API de compilateur Neo lit les modèles exportés depuis diverses infrastructures. Il convertit les fonctions et opérations spécifiques au cadre en une représentation intermédiaire agnostique de cadre. Ensuite, il effectue une série d’optimisations. Ensuite, il génère le code binaire pour les opérations optimisées, les écrit dans une bibliothèque d’objets partagés, et enregistre la définitions et les paramètres du modèle dans des fichiers séparés. Neo fournit également un environnement d’exécution pour chaque plateforme cible qui charge et exécute le modèle compilé.

![\[Comment fonctionne Neo dans SageMaker AI.\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/neo/neo_how_it_works.png)


Vous pouvez créer une tâche de compilation Neo à partir de la console SageMaker AI, la AWS Command Line Interface (AWS CLI), un bloc-notes Python ou le kit SDK SageMaker AI. Pour obtenir des informations sur la compilation d’un modèle, consultez [Compilation de modèles avec Neo](neo-job-compilation.md). Avec quelques commandes CLI, une invocation d’API ou quelques clics, vous pouvez convertir un modèle pour la plateforme de votre choix. Vous pouvez déployer le modèle sur un point de terminaison SageMaker AI ou un périphérique AWS IoT Greengrass rapidement.

Neo peut optimiser les modèles avec des paramètres en FP32 ou quantifiés à une largeur binaire INT8 ou FP16.

**Topics**
+ [Qu’est-ce que SageMaker Neo ?](#neo-what-it-is)
+ [Fonctionnement](#neo-how-it-works)
+ [Compilation de modèles avec Neo](neo-job-compilation.md)
+ [Instances cloud](neo-cloud-instances.md)
+ [Appareils en périphérie](neo-edge-devices.md)
+ [Dépannage des erreurs](neo-troubleshooting.md)

# Compilation de modèles avec Neo
<a name="neo-job-compilation"></a>

Cette section explique comment créer, décrire, arrêter et répertorier les tâches de compilation. Les options suivantes sont disponibles dans Amazon SageMaker Neo pour gérer les tâches de compilation pour les modèles d'apprentissage automatique : la AWS Command Line Interface console Amazon SageMaker AI ou le SageMaker SDK Amazon. 

**Topics**
+ [Préparation d'un modèle pour la compilation](neo-compilation-preparing-model.md)
+ [Compilation d'un modèle (AWS Command Line Interface)](neo-job-compilation-cli.md)
+ [Compiler un modèle (Amazon SageMaker AI Console)](neo-job-compilation-console.md)
+ [Compiler un modèle (SDK Amazon SageMaker AI)](neo-job-compilation-sagemaker-sdk.md)

# Préparation d'un modèle pour la compilation
<a name="neo-compilation-preparing-model"></a>

SageMaker Neo a besoin de modèles d'apprentissage automatique pour satisfaire des formes de données d'entrée spécifiques. La forme d'entrée requise pour la compilation dépend du cadre de deep learning que vous utilisez. Une fois votre modèle formaté à la forme d'entrée correcte, enregistrez-le conformément aux exigences ci-dessous. Lorsque vous disposez d'un modèle enregistré, compressez les artefacts du modèle.

**Topics**
+ [Quelles sont les formes de données d'entrée attendues par SageMaker Neo ?](#neo-job-compilation-expected-inputs)
+ [Modèles d'épargne pour SageMaker Neo](#neo-job-compilation-how-to-save-model)

## Quelles sont les formes de données d'entrée attendues par SageMaker Neo ?
<a name="neo-job-compilation-expected-inputs"></a>

Avant de compiler votre modèle, assurez-vous qu'il est correctement formaté. Pour Neo, le nom et la forme des entrées de données pour votre modèle entraîné doivent être au format JSON ou au format liste. Les entrées attendues sont spécifiques au cadre. 

Vous trouverez ci-dessous les formes d'entrée attendues par SageMaker Neo :

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

Spécifiez le nom et la forme (format NHWC) des entrées de données attendues en utilisant un format dictionnaire pour le modèle entraîné. Notez que si les artefacts du modèle Keras doivent être téléchargés au format NHWC (channel-last), ils DataInputConfig doivent être spécifiés au format NCHW (channel-first). Voici quels sont les formats de dictionnaire requis : 
+ Pour une entrée : `{'input_1':[1,3,224,224]}`
+ Pour deux entrées : `{'input_1': [1,3,224,224], 'input_2':[1,3,224,224]}`

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

Spécifiez le nom et la forme (format NHWC) des entrées de données attendues en utilisant un format dictionnaire pour le modèle entraîné. Voici quels sont les formats de dictionnaire requis :
+ Pour une entrée : `{'data':[1,3,1024,1024]}`
+ Pour deux entrées : `{'var1': [1,1,28,28], 'var2':[1,1,28,28]}`

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

Pour un PyTorch modèle, il n'est pas nécessaire de fournir le nom et la forme des entrées de données attendues si vous remplissez les deux conditions suivantes :
+ Vous avez créé votre fichier de définition de modèle à l'aide de la PyTorch version 2.0 ou ultérieure. Pour plus d'informations sur la création du fichier de définition, consultez la [PyTorch](#how-to-save-pytorch) section intitulée *Enregistrer des modèles pour SageMaker Neo*.
+ Vous compilez votre modèle pour une instance cloud. Pour plus d'informations sur les types d'instances pris en charge par SageMaker Neo, consultez[Cadres et types d’instance pris en charge](neo-supported-cloud.md).

Si vous remplissez ces conditions, SageMaker Neo obtient la configuration d'entrée à partir du fichier de définition du modèle (.pt ou .pth) que vous créez avec. PyTorch

Sinon, vous devez exécuter les actions suivantes :

Spécifiez le nom et la forme (format NHWC) des entrées de données attendues en utilisant un format dictionnaire pour le modèle entraîné. Vous pouvez aussi spécifier la forme en utilisant uniquement un format liste. Voici quels sont les formats de dictionnaire requis :
+ Pour une entrée au format dictionnaire : `{'input0':[1,3,224,224]}`
+ Pour une entrée au format liste : `[[1,3,224,224]]`
+ Pour deux entrées au format dictionnaire : `{'input0':[1,3,224,224], 'input1':[1,3,224,224]}`
+ Pour deux entrées au format liste : `[[1,3,224,224], [1,3,224,224]]`

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

Spécifiez le nom et la forme (format NHWC) des entrées de données attendues en utilisant un format dictionnaire pour votre modèle entraîné. Voici quels sont les formats de dictionnaire requis :
+ Pour une entrée : `{'input':[1,1024,1024,3]}`
+ Pour deux entrées : `{'data1': [1,28,28,1], 'data2':[1,28,28,1]}`

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

Spécifiez le nom et la forme (format NHWC) des entrées de données attendues en utilisant un format dictionnaire pour votre modèle entraîné. Voici quels sont les formats de dictionnaire requis :
+ Pour une entrée : `{'input':[1,224,224,3]}`

**Note**  
SageMaker Neo prend uniquement en charge la version TensorFlow Lite pour les cibles périphériques. Pour obtenir la liste des appareils cibles SageMaker Neo Edge compatibles, consultez la [Appareils](neo-supported-devices-edge-devices.md#neo-supported-edge-devices) page SageMaker Neo. Pour obtenir la liste des cibles d'instances cloud SageMaker Neo prises en charge, consultez la [Cadres et types d’instance pris en charge](neo-supported-cloud.md) page SageMaker Neo.

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

Le nom et la forme des données d'entrée ne sont pas nécessaires.

## Modèles d'épargne pour SageMaker Neo
<a name="neo-job-compilation-how-to-save-model"></a>

Les exemples de code suivants montrent comment enregistrer votre modèle pour le rendre compatible avec Neo. Les modèles doivent être packagés sous forme de fichiers tar compressés (`*.tar.gz`).

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

Les modèles Keras ont besoin d'un fichier de définition de modèle (`.h5`).

Il existe deux options pour enregistrer votre modèle Keras afin de le rendre compatible avec SageMaker Neo :

1. Exporter au format `.h5` avec `model.save("<model-name>", save_format="h5")`.

1. Figer le `SavedModel` après l'exportation.

Voici un exemple d'exportation d'un modèle `tf.keras` sous forme de graphique figé (option deux) :

```
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()
```

**Avertissement**  
N'exportez pas votre modèle avec la classe `SavedModel` en utilisant `model.save(<path>, save_format='tf')`. Ce format convient à l'entraînement, mais pas à l'inférence.

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

MXNet les modèles doivent être enregistrés sous la forme d'un fichier de symboles unique `*-symbol.json` et d'un seul paramètre`*.params files`.

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

Définissez le réseau neuronal à l'aide de la classe `HybridSequential`. Le code s'exécutera dans le style d'une programmation symbolique (par opposition à une programmation impérative).

```
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()
```

Pour plus d'informations sur les modèles d'hybridation, consultez la documentation d'[MXNet hybridation](https://mxnet.apache.org/versions/1.7.0/api/python/docs/tutorials/packages/gluon/blocks/hybridize.html).

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

Les modèles de zoo GluonCV sont pré-hybridés. Vous pouvez donc simplement les exporter.

```
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 ]

Lorsque les modèles sans gluon sont enregistrés sur disque, ils utilisent tous des fichiers `*-symbol` et `*.params`fichiers. Ils sont donc déjà au bon format pour 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 les modèles doivent être enregistrés sous forme de fichier de définition (`.pt`ou`.pth`) avec le type de données d'entrée de. `float32`

Pour enregistrer votre modèle, utilisez la méthode `torch.jit.trace` suivie de la méthode `torch.save`. Ce processus enregistre un objet dans un fichier disque et utilise par défaut le module pickle (`pickle_module=pickle`) Python pour enregistrer les objets et certaines métadonnées. Ensuite, convertissez le modèle enregistré en un fichier tar compressé.

```
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()
```

Si vous enregistrez votre modèle avec la PyTorch version 2.0 ou une version ultérieure, SageMaker Neo déduit la configuration d'entrée du modèle (le nom et la forme de son entrée) à partir du fichier de définition. Dans ce cas, il n'est pas nécessaire de spécifier la configuration d'entrée de données à l' SageMaker IA lorsque vous compilez le modèle.

Si vous souhaitez empêcher SageMaker Neo de dériver la configuration d'entrée, vous pouvez définir le `_store_inputs` paramètre `torch.jit.trace` to`False`. Dans ce cas, vous devez spécifier la configuration d'entrée de données à l' SageMaker IA lorsque vous compilez le modèle.

Pour plus d'informations sur la `torch.jit.trace` méthode, consultez [TORCH.JIT.TRACE](https://pytorch.org/docs/stable/generated/torch.jit.trace.html#torch.jit.trace) dans la documentation. PyTorch 

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

TensorFlow nécessite un `.pb` ou un `.pbtxt` fichier et un répertoire de variables contenant des variables. Pour les modèles figés, un seul fichier `.pb` ou `.pbtxt` est nécessaire.

L'exemple de code suivant montre comment compresser votre modèle à l'aide de la commande tar Linux. Exécutez les opérations suivantes sur votre terminal ou dans un bloc-notes Jupyter (si vous utilisez un bloc-notes Jupyter, insérez la commande magique `!`au début de l'énoncé) :

```
# 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
```

Les indicateurs de commande utilisés dans cet exemple accomplissent les tâches suivantes :
+ `c` : création d'une archive
+ `z` : compression de l'archive avec gzip
+ `v` : affichage de la progression de l'archive
+ `f` : spécification du nom de fichier de l'archive

### Estimateurs intégrés
<a name="how-to-save-built-in"></a>

Les estimateurs intégrés sont réalisés par des conteneurs spécifiques au cadre ou des conteneurs spécifiques à l'algorithme. Les objets d'estimateurs intégrés spécifiques à l'algorithme et au cadre enregistrent le modèle au format correct pour vous lorsque vous entraînez le modèle à l'aide de la méthode intégrée `.fit`.

Par exemple, vous pouvez utiliser a `sagemaker.TensorFlow` pour définir un TensorFlow estimateur :

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

Ensuite, entraînez le modèle avec la méthode intégrée `.fit` :

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

Avant de terminer la compilation du modèle avec la méthode intégrée `compile_model` :

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

Vous pouvez également utiliser la `sagemaker.estimator.Estimator` classe pour initialiser un objet estimateur afin d'entraîner et de compiler un algorithme intégré avec la méthode `compile_model` du SDK 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')
```

Pour plus d'informations sur la compilation de modèles avec le SDK SageMaker Python, consultez. [Compiler un modèle (SDK Amazon SageMaker AI)](neo-job-compilation-sagemaker-sdk.md)

# Compilation d'un modèle (AWS Command Line Interface)
<a name="neo-job-compilation-cli"></a>

Cette section explique comment gérer les tâches de compilation Amazon SageMaker Neo pour les modèles d'apprentissage automatique à l'aide de AWS Command Line Interface (CLI). Vous pouvez créer, décrire, arrêter et répertorier les tâches de compilation. 

1. Créez une tâche de compilation

   Grâce à l'opération [CreateCompilationJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCompilationJob.html)API, vous pouvez spécifier le format d'entrée des données, le compartiment S3 dans lequel stocker votre modèle, le compartiment S3 dans lequel écrire le modèle compilé et le périphérique ou la plate-forme matérielle cible.

   Le tableau suivant montre comment configurer l'API `CreateCompilationJob` selon que votre cible est un périphérique ou une plateforme.

------
#### [ 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
       }
   }
   ```

   Vous pouvez éventuellement spécifier la version du framework que vous avez utilisée avec le [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)champ si vous avez utilisé le PyTorch framework pour entraîner votre modèle et que votre équipement cible est une `ml_* ` cible.

   ```
   {
       "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
       }
   }
   ```

**Remarques :**  
Si vous avez enregistré votre modèle à l'aide de PyTorch la version 2.0 ou ultérieure, le `DataInputConfig` champ est facultatif. SageMaker AI Neo obtient la configuration d'entrée à partir du fichier de définition du modèle que vous créez avec PyTorch. Pour plus d'informations sur la création du fichier de définition, consultez la [PyTorch](neo-compilation-preparing-model.md#how-to-save-pytorch) section intitulée *Enregistrer des modèles pour SageMaker AI Neo*.
Ce champ d'API n'est pris en charge que pour 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
       }
   }
   ```

------
**Note**  
Pour l'opération d'API `OutputConfig`, les opérations d'API `TargetDevice` et `TargetPlatform` s'excluent mutuellement. Vous devez choisir l'une de ces deux options.

   Pour trouver les exemples de chaînes JSON de `DataInputConfig` en fonction des cadres, consultez [De quelles formes de données d’entrée Neo a-t-il besoin ?](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting-compilation.html#neo-troubleshooting-errors-preventing).

   Pour plus d'informations sur la configuration des configurations, consultez les opérations [InputConfig[OutputConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OutputConfig.html)](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InputConfig.html), et [TargetPlatform](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_TargetPlatform.html)d'API dans la référence des SageMaker API.

1. Après avoir configuré le fichier JSON, exécutez la commande suivante pour créer la tâche de compilation :

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

1. Décrivez la tâche de compilation en exécutant la commande suivante :

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

1. Arrêtez la tâche de compilation en exécutant la commande suivante :

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

1. Répertoriez la tâche de compilation en exécutant la commande suivante :

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

# Compiler un modèle (Amazon SageMaker AI Console)
<a name="neo-job-compilation-console"></a>

Vous pouvez créer une tâche de compilation Amazon SageMaker Neo dans la console Amazon SageMaker AI.

1. Dans la console **Amazon SageMaker AI**, choisissez **Compilation jobs**, puis **Create compilation job**.  
![\[Crée une tâche de compilation.\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/neo/8-create-compilation-job.png)

1. Sur la page **Create compilation job (Créer une tâche de compilation)**, pour **Job name (Nom de la tâche)**, saisissez un nom. Ensuite, sélectionnez un **rôle IAM**.  
![\[Page Créer une tâche de compilation.\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/neo/9-create-compilation-job-config.png)

1. Si vous ne disposez pas de rôle IAM, choisissez **Créer un rôle**.  
![\[Créez un emplacement de rôle IAM.\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/neo/10a-create-iam-role.png)

1. Sur la page **Créer un rôle IAM**, choisissez **Tout compartiment S3**, puis **Créer un rôle**.  
![\[Page Créer un rôle IAM.\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/neo/10-create-iam-role.png)

1. 

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

   Dans la section **Input configuration (Configuration d'entrée)**, saisissez le chemin d'accès complet de l'URI du compartiment Amazon S3 contenant vos artefacts de modèle, dans le champ d'entrée **Location of model artifacts (Emplacement des artefacts de modèle)**. Vos artefacts de modèle doivent être au format de fichier tarball compressé (`.tar.gz`). 

   Dans le champ **Data input configuration (Configuration d'entrée de données)**, saisissez la chaîne JSON qui spécifie la forme des données d'entrée.

   Pour **Machine learning framework (Cadre de machine learning)**, choisissez le cadre qui vous convient.

![\[Page Configuration d’entrée.\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/neo/neo-create-compilation-job-input-config.png)


   Pour trouver les exemples de chaînes JSON de formes de données d’entrée spécifiques aux cadres, consultez [De quelles formes de données d’entrée Neo a-t-il besoin ?](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting.html#neo-troubleshooting-errors-preventing).

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

   Des instructions similaires s'appliquent à la compilation des PyTorch modèles. Toutefois, si vous vous êtes entraîné avec le modèle cible PyTorch et que vous essayez de le compiler pour `ml_*` (sauf`ml_inf`), vous pouvez éventuellement spécifier la version PyTorch que vous avez utilisée.

![\[Exemple illustrant la section Configuration d’entrée indiquant où choisir la version du cadre.\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/neo/compile_console_pytorch.png)


   Pour trouver les exemples de chaînes JSON de formes de données d’entrée spécifiques aux cadres, consultez [De quelles formes de données d’entrée Neo a-t-il besoin ?](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting.html#neo-troubleshooting-errors-preventing).

**Remarques**  
Si vous avez enregistré votre modèle à l'aide de PyTorch la version 2.0 ou ultérieure, le **champ Configuration de la saisie des données** est facultatif. SageMaker Neo obtient la configuration d'entrée à partir du fichier de définition du modèle que vous créez avec PyTorch. Pour plus d'informations sur la création du fichier de définition, consultez la [PyTorch](neo-compilation-preparing-model.md#how-to-save-pytorch) section intitulée *Enregistrer des modèles pour SageMaker AI Neo*.
Lors de la compilation pour des `ml_*` instances à l'aide du PyTorch framework, utilisez le champ **d'options du compilateur** dans la **configuration de sortie** pour fournir le type de données correct (`dtype`) de l'entrée du modèle. La valeur par défaut est définie sur `"float32"`. 

![\[Exemple illustrant la section Configuration de sortie.\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/neo/neo_compilation_console_pytorch_compiler_options.png)


**Avertissement**  
 Si vous spécifiez un chemin d'URI de compartiment Amazon S3 menant à un fichier `.pth`, l'erreur suivante s'affichera après que la compilation aura démarré : `ClientError: InputConfiguration: Unable to untar input model.Please confirm the model is a tar.gz file` 

------

1.  Accédez à la section **Output configuration (Configuration de la sortie)**. Choisissez l'emplacement de déploiement de votre modèle. Vous pouvez déployer votre modèle sur un **périphérique cible** ou une **plateforme cible**. Les périphériques cibles comprennent les périphériques cloud et en périphérie. Les plateformes cibles font référence au système d'exploitation, à l'architecture et aux accélérateurs spécifiques sur lesquels votre modèle doit s'exécuter. 

    Pour **S3 Output location (Emplacement de sortie S3)**, saisissez le chemin d'accès au compartiment S3 où vous voulez stocker le modèle compilé. Vous pouvez éventuellement ajouter des options de compilateur au format JSON dans la section **Compiler options (Options de compilateur)**.   
![\[Page Configuration de sortie.\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/neo/neo-console-output-config.png)

1. Vérifiez le statut de la tâche de compilation au démarrage. Le statut de la tâche se trouve en haut de la page **Compilation Job (Tâche de compilation)** comme le montre la capture d'écran ci-après. Vous pouvez également vérifier le statut de la tâche dans la colonne **Status (Statut)**.  
![\[Statut de la tâche de compilation.\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/neo/12-run-model-compilation.png)

1. Vérifiez le statut de la tâche de compilation lorsque terminée. Vous pouvez vérifier le statut dans la colonne **Status (Statut)** comme le montre la capture d'écran ci-après.  
![\[Statut de la tâche de compilation.\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/neo/12a-completed-model-compilation.png)

# Compiler un modèle (SDK Amazon SageMaker AI)
<a name="neo-job-compilation-sagemaker-sdk"></a>

 Vous pouvez utiliser l'[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 du [SDK Amazon SageMaker AI pour Python](https://sagemaker.readthedocs.io/en/stable/) afin de compiler un modèle entraîné et de l'optimiser pour un matériel cible spécifique. L'API doit être appelée sur l'objet estimateur utilisé pendant l'entraînement du modèle. 

**Note**  
Vous devez définir la variable d'`MMS_DEFAULT_RESPONSE_TIMEOUT`environnement sur `500` lorsque vous compilez le modèle avec MXNet ou PyTorch. La variable d'environnement n'est pas nécessaire pour TensorFlow. 

 Voici un exemple de la façon dont vous pouvez compiler un modèle à l'aide de l'objet `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'})
```

Le code compile le modèle, enregistre le modèle optimisé dans et crée un modèle d' SageMaker IA qui peut être déployé sur un point de terminaison. `output_path` 

# Instances cloud
<a name="neo-cloud-instances"></a>

Amazon SageMaker Neo prend en charge la compilation pour les cadres de machine learning les plus courants, tels que TensorFlow, PyTorch, MXNet, etc. Vous pouvez déployer votre modèle compilé sur des instances cloud et des AWS Inferentia. Pour obtenir la liste complète des cadres et types d’instance pris en charge, consultez [Cadres et types d’instances pris en charge](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-cloud.html). 

Vous pouvez compiler votre modèle de l’une des trois façons suivantes : via l’AWS CLI, la console SageMaker AI ou le kit SDK SageMaker AI pour Python. Pour plus d’informations, consultez [Utiliser Neo pour compiler un modèle](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html). Une fois vos artefacts de modèle compilés, ils sont stockés dans l'URI du compartiment Amazon S3 que vous avez spécifié lors de la tâche de compilation. Vous pouvez déployer votre modèle compilé sur des instances cloud et AWS Inferentia à l’aide du kit SDK SageMaker pour Python, du kit AWS SDK pour Python (Boto3), de l’AWS CLI ou de la console AWS. 

Si vous déployez votre modèle à l'aide de la AWS CLI, la console ou Boto3, vous devez sélectionner un URI Amazon ECR d'image Docker pour votre conteneur principal. Consultez [Images de conteneur d’inférence Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-deployment-hosting-services-container-images.html) pour obtenir la liste des URI Amazon ECR.

**Topics**
+ [Cadres et types d’instance pris en charge](neo-supported-cloud.md)
+ [Déploiement d'un modèle](neo-deployment-hosting-services.md)
+ [Demandes d’inférence avec un service déployé](neo-requests.md)
+ [Images de conteneur d'inférence](neo-deployment-hosting-services-container-images.md)

# Cadres et types d’instance pris en charge
<a name="neo-supported-cloud"></a>

Amazon SageMaker Neo prend en charge les cadres de deep learning les plus courants pour la compilation et le déploiement. Vous pouvez déployer votre modèle sur des instances cloud ou des types d’instances AWS Inferentia.

La section suivante décrit les cadres pris en charge par SageMaker Neo et les instances cloud cible sur lesquelles vous pouvez compiler et déployer. Pour obtenir des informations sur le déploiement de votre modèle compilé sur une instance cloud ou Inferentia, consultez [Déploiement d’un modèle avec des instances cloud](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-deployment-hosting-services.html).

## Instances cloud
<a name="neo-supported-cloud-instances"></a>

SageMaker Neo prend en charge les cadres de deep learning suivants pour les instances cloud CPU et GPU : 


| Cadre | Version du cadre | Version de modèle | Modèles | Formats de modèle (packagés dans \$1.tar.gz) | Boîtes à outils | 
| --- | --- | --- | --- | --- | --- | 
| MXNet | 1.8.0 | Prend en charge la version 1.8.0 ou antérieure | classification d’images, détection d’objets, segmentation sémantique, estimation de pose, reconnaissance d’activités | Un fichier de symboles (.json) et un fichier de paramètres (.params) | GluonCV v0.8.0 | 
| ONNX | 1.7.0 | Prend en charge la version 1.7.0 ou antérieure | Classification d’images, SVM | Un fichier de modèle (.onnx) |  | 
| Keras | 2.2.4 | Prend en charge la version 2.2.4 ou antérieure | Classification d’images | Un fichier de définition de modèle (.h5) |  | 
| PyTorch | 1.4, 1.5, 1.6, 1.7, 1.8, 1.12, 1.13 ou 2.0 | Prend en charge 1.4, 1.5, 1.6, 1.7, 1.8, 1.12, 1.13 et 2.0 |  Classification d’images Les versions 1.13 et 2.0 prennent en charge la détection d’objets, le transformeur de vision et HuggingFace  | Un fichier de définition de modèle (.pt ou .pth) avec dtype d’entrée float32 |  | 
| TensorFlow | 1.15.3 ou 2.9 | Prend en charge 1.15.3 et 2.9 | Classification d’images | Pour les modèles enregistrés, Neo attend un fichier .pb ou .pbtxt, ainsi qu’un répertoire de variables contenant des variables Pour les modèles figés, Neo attend uniquement un fichier .pb ou .pbtxt |  | 
| XGBoost | 1.3.3 | Prend en charge la version 1.3.3 ou antérieure | Arbres de décision | Un fichier de modèles XGBoost (.model) dans lequel le nombre de nœuds d’une arborescence est inférieur à 2^31 |  | 

**Note**  
« Model Version » est la version du cadre utilisé pour entraîner et exporter le modèle. 

## Types d’instances
<a name="neo-supported-cloud-instances-types"></a>

 Vous pouvez déployer votre modèle compilé SageMaker AI sur l’une des instances cloud ci-dessous : 


| Instance | Type de calcul | 
| --- | --- | 
| `ml_c4` | Standard | 
| `ml_c5` | Standard | 
| `ml_m4` | Standard | 
| `ml_m5` | Standard | 
| `ml_p2` | Calcul accéléré | 
| `ml_p3` | Calcul accéléré | 
| `ml_g4dn` | Calcul accéléré | 

 Pour obtenir des informations sur le vCPU disponible, la mémoire et le prix à l’heure pour chaque type d’instance, consultez [Tarification Amazon SageMaker](https://aws.amazon.com/sagemaker/pricing/). 

**Note**  
Lors de la compilation d’instances `ml_*` avec un cadre PyTorch, dans le champ **Options de compilateur** de **Configuration de la sortie**, fournissez le type de données correct (`dtype`) de l’entrée du modèle.  
La valeur par défaut est définie sur `"float32"`.

## AWS Inferentia
<a name="neo-supported-inferentia"></a>

 SageMaker Neo prend en charge les frameworks de deep learning suivants pour Inf1 : 


| Cadre | Version du cadre | Version de modèle | Modèles | Formats de modèle (packagés dans \$1.tar.gz) | Boîtes à outils | 
| --- | --- | --- | --- | --- | --- | 
| MXNet | 1.5 ou 1.8  | Prend en charge les versions 1.8, 1.5 et antérieures | classification d’images, détection d’objets, segmentation sémantique, estimation de pose, reconnaissance d’activités | Un fichier de symboles (.json) et un fichier de paramètres (.params) | GluonCV v0.8.0 | 
| PyTorch | 1.7, 1.8 ou 1.9 | Prend en charge les versions 1.9 et antérieures | Classification d’images | Un fichier de définition de modèle (.pt ou .pth) avec dtype d’entrée float32 |  | 
| TensorFlow | 1.15 ou 2.5 | Prend en charge les versions 2.5, 1.15 et antérieures | Classification d’images | Pour les modèles enregistrés, Neo attend un fichier .pb ou .pbtxt, ainsi qu’un répertoire de variables contenant des variables Pour les modèles figés, Neo attend uniquement un fichier .pb ou .pbtxt |  | 

**Note**  
« Model Version » est la version du cadre utilisé pour entraîner et exporter le modèle.

Vous pouvez déployer votre modèle SageMaker Neo-compilé sur des instances Amazon EC2 Inf1 basées sur AWS Inferentia. AWS Inferentia est la première puce de silicium personnalisée d’Amazon conçue pour accélérer le deep learning. Actuellement, vous pouvez utiliser l’instance `ml_inf1` pour déployer vos modèles compilés.

### AWS Inferentia2 et AWS Trainium
<a name="neo-supported-inferentia-trainium"></a>

À l’heure actuelle, vous pouvez déployer votre modèle compilé par SageMaker Neo sur des instances Amazon EC2 Inf2 AWS basées sur Inferentia2 (dans la région USA Est (Ohio)) et sur des instances Amazon EC2 Trn1 AWS basées sur Trainium (dans la région USA Est (Virginie du Nord)). Pour plus d’informations sur les modèles pris en charge sur ces instances, consultez [Directives d’ajustement de l’architecture des modèles](https://awsdocs-neuron.readthedocs-hosted.com/en/latest/general/arch/model-architecture-fit.html) dans la documentation AWS Neuron et les exemples dans le [référentiel Neuron Github](https://github.com/aws-neuron/aws-neuron-sagemaker-samples).

# Déploiement d'un modèle
<a name="neo-deployment-hosting-services"></a>

Pour déployer un modèle SageMaker compilé par Amazon Neo sur un point de terminaison HTTPS, vous devez configurer et créer le point de terminaison du modèle à l'aide des services d'hébergement Amazon SageMaker AI. Actuellement, les développeurs peuvent utiliser Amazon SageMaker APIs pour déployer des modules sur des instances ml.c5, ml.c4, ml.m5, ml.m4, ml.p3, ml.p2 et ml.inf1. 

Pour les instances [Inferentia](https://aws.amazon.com/machine-learning/inferentia/) et [Trainium](https://aws.amazon.com/machine-learning/trainium/), les modèles doivent être compilés spécifiquement pour ces instances. Les modèles compilés pour d'autres types d'instance peuvent ne pas fonctionner avec les instances Inferentia ou Trainium.

Lorsque vous déployez un modèle compilé, vous devez utiliser la même instance pour la cible que celle utilisée pour la compilation. Cela crée un point de terminaison d' SageMaker IA que vous pouvez utiliser pour effectuer des inférences. [Vous pouvez déployer un modèle compilé Neo à l'aide de l'un des outils suivants : le [SDK Amazon SageMaker AI pour Python](https://sagemaker.readthedocs.io/en/stable/), le [SDK pour Python [AWS Command Line Interface](https://docs.aws.amazon.com/cli/latest/reference/)(Boto3)](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) et la console AI. SageMaker ](https://console.aws.amazon.com/sagemaker)

**Note**  
Pour déployer un modèle à l'aide AWS CLI de la console ou de Boto3, consultez [Neo Inference Container Images](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-deployment-hosting-services-container-images.html) pour sélectionner l'URI de l'image d'inférence pour votre conteneur principal. 

**Topics**
+ [Conditions préalables](neo-deployment-hosting-services-prerequisites.md)
+ [Déployer un modèle compilé à l'aide du SageMaker SDK](neo-deployment-hosting-services-sdk.md)
+ [Déploiement d'un modèle compilé à l'aide de Boto3](neo-deployment-hosting-services-boto3.md)
+ [Déployez un modèle compilé à l'aide du AWS CLI](neo-deployment-hosting-services-cli.md)
+ [Déploiement d'un modèle compilé à l'aide de la console](neo-deployment-hosting-services-console.md)

# Conditions préalables
<a name="neo-deployment-hosting-services-prerequisites"></a>

**Note**  
Suivez les instructions de cette section si vous avez compilé votre modèle à l'aide de AWS SDK pour Python (Boto3) AWS CLI, ou de la console SageMaker AI. 

Pour créer un modèle SageMaker compilé au format NEO, vous avez besoin des éléments suivants :

1. Un URI Amazon ECR d'image Docker. Vous pouvez en sélectionner un répondant à vos besoins dans [cette liste](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-deployment-hosting-services-container-images.html). 

1. Un fichier de script de point d'entrée :

   1. **Pour PyTorch et MXNet modèles :**

      *Si vous avez entraîné votre modèle à l'aide de l' SageMaker IA*, le script d'entraînement doit implémenter les fonctions décrites ci-dessous. Le script d'entraînement sert de script de point d'entrée pendant l'inférence. Dans l'exemple détaillé dans [Formation, compilation et déploiement MNIST avec MXNet Module et SageMaker Neo](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker_neo_compilation_jobs/mxnet_mnist/mxnet_mnist_neo.html), le script d'entraînement (`mnist.py`) implémente les fonctions requises.

      *Si vous n'avez pas entraîné votre modèle à l'aide de l' SageMaker IA*, vous devez fournir un fichier de script de point d'entrée (`inference.py`) qui peut être utilisé au moment de l'inférence. En fonction du framework MXNet ou du script d'inférence PyTorch, l'emplacement du script d'inférence doit être conforme à la structure de [répertoire de modèles du SDK SageMaker Python pour MxNet ou à la structure](https://sagemaker.readthedocs.io/en/stable/frameworks/mxnet/using_mxnet.html#model-directory-structure) de [répertoire de modèles](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/using_pytorch.html#model-directory-structure) pour. PyTorch 

      Lorsque vous utilisez des images Neo Inference Optimized Container avec **PyTorch**et **MXNet**sur des types d'instances de CPU et de GPU, le script d'inférence doit implémenter les fonctions suivantes : 
      + `model_fn` : charge le modèle. (Facultatif)
      + `input_fn` : convertit la charge utile de demande entrante en un tableau numpy.
      + `predict_fn` : réalise la prédiction.
      + `output_fn` : convertit la sortie de la prédiction en charge utile de réponse.
      + En variante, vous pouvez définir `transform_fn` de sorte à combiner `input_fn`, `predict_fn` et `output_fn`.

      Vous trouverez ci-dessous des exemples de `inference.py` script dans un répertoire nommé `code` (`code/inference.py`) for **PyTorch et MXNet (Gluon and Module).** Les exemples chargent d'abord le modèle, puis le servent sur des données d'image sur un GPU : 

------
#### [ MXNet Module ]

      ```
      import numpy as np
      import json
      import mxnet as mx
      import neomx  # noqa: F401
      from collections import namedtuple
      
      Batch = namedtuple('Batch', ['data'])
      
      # Change the context to mx.cpu() if deploying to a CPU endpoint
      ctx = mx.gpu()
      
      def model_fn(model_dir):
          # The compiled model artifacts are saved with the prefix 'compiled'
          sym, arg_params, aux_params = mx.model.load_checkpoint('compiled', 0)
          mod = mx.mod.Module(symbol=sym, context=ctx, label_names=None)
          exe = mod.bind(for_training=False,
                         data_shapes=[('data', (1,3,224,224))],
                         label_shapes=mod._label_shapes)
          mod.set_params(arg_params, aux_params, allow_missing=True)
          
          # Run warm-up inference on empty data during model load (required for GPU)
          data = mx.nd.empty((1,3,224,224), ctx=ctx)
          mod.forward(Batch([data]))
          return mod
      
      
      def transform_fn(mod, image, input_content_type, output_content_type):
          # pre-processing
          decoded = mx.image.imdecode(image)
          resized = mx.image.resize_short(decoded, 224)
          cropped, crop_info = mx.image.center_crop(resized, (224, 224))
          normalized = mx.image.color_normalize(cropped.astype(np.float32) / 255,
                                        mean=mx.nd.array([0.485, 0.456, 0.406]),
                                        std=mx.nd.array([0.229, 0.224, 0.225]))
          transposed = normalized.transpose((2, 0, 1))
          batchified = transposed.expand_dims(axis=0)
          casted = batchified.astype(dtype='float32')
          processed_input = casted.as_in_context(ctx)
      
          # prediction/inference
          mod.forward(Batch([processed_input]))
      
          # post-processing
          prob = mod.get_outputs()[0].asnumpy().tolist()
          prob_json = json.dumps(prob)
          return prob_json, output_content_type
      ```

------
#### [ MXNet Gluon ]

      ```
      import numpy as np
      import json
      import mxnet as mx
      import neomx  # noqa: F401
      
      # Change the context to mx.cpu() if deploying to a CPU endpoint
      ctx = mx.gpu()
      
      def model_fn(model_dir):
          # The compiled model artifacts are saved with the prefix 'compiled'
          block = mx.gluon.nn.SymbolBlock.imports('compiled-symbol.json',['data'],'compiled-0000.params', ctx=ctx)
          
          # Hybridize the model & pass required options for Neo: static_alloc=True & static_shape=True
          block.hybridize(static_alloc=True, static_shape=True)
          
          # Run warm-up inference on empty data during model load (required for GPU)
          data = mx.nd.empty((1,3,224,224), ctx=ctx)
          warm_up = block(data)
          return block
      
      
      def input_fn(image, input_content_type):
          # pre-processing
          decoded = mx.image.imdecode(image)
          resized = mx.image.resize_short(decoded, 224)
          cropped, crop_info = mx.image.center_crop(resized, (224, 224))
          normalized = mx.image.color_normalize(cropped.astype(np.float32) / 255,
                                        mean=mx.nd.array([0.485, 0.456, 0.406]),
                                        std=mx.nd.array([0.229, 0.224, 0.225]))
          transposed = normalized.transpose((2, 0, 1))
          batchified = transposed.expand_dims(axis=0)
          casted = batchified.astype(dtype='float32')
          processed_input = casted.as_in_context(ctx)
          return processed_input
      
      
      def predict_fn(processed_input_data, block):
          # prediction/inference
          prediction = block(processed_input_data)
          return prediction
      
      def output_fn(prediction, output_content_type):
          # post-processing
          prob = prediction.asnumpy().tolist()
          prob_json = json.dumps(prob)
          return prob_json, output_content_type
      ```

------
#### [ PyTorch 1.4 and Older ]

      ```
      import os
      import torch
      import torch.nn.parallel
      import torch.optim
      import torch.utils.data
      import torch.utils.data.distributed
      import torchvision.transforms as transforms
      from PIL import Image
      import io
      import json
      import pickle
      
      
      def model_fn(model_dir):
          """Load the model and return it.
          Providing this function is optional.
          There is a default model_fn available which will load the model
          compiled using SageMaker Neo. You can override it here.
      
          Keyword arguments:
          model_dir -- the directory path where the model artifacts are present
          """
      
          # The compiled model is saved as "compiled.pt"
          model_path = os.path.join(model_dir, 'compiled.pt')
          with torch.neo.config(model_dir=model_dir, neo_runtime=True):
              model = torch.jit.load(model_path)
              device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
              model = model.to(device)
      
          # We recommend that you run warm-up inference during model load
          sample_input_path = os.path.join(model_dir, 'sample_input.pkl')
          with open(sample_input_path, 'rb') as input_file:
              model_input = pickle.load(input_file)
          if torch.is_tensor(model_input):
              model_input = model_input.to(device)
              model(model_input)
          elif isinstance(model_input, tuple):
              model_input = (inp.to(device) for inp in model_input if torch.is_tensor(inp))
              model(*model_input)
          else:
              print("Only supports a torch tensor or a tuple of torch tensors")
              return model
      
      
      def transform_fn(model, request_body, request_content_type,
                       response_content_type):
          """Run prediction and return the output.
          The function
          1. Pre-processes the input request
          2. Runs prediction
          3. Post-processes the prediction output.
          """
          # preprocess
          decoded = Image.open(io.BytesIO(request_body))
          preprocess = transforms.Compose([
              transforms.Resize(256),
              transforms.CenterCrop(224),
              transforms.ToTensor(),
              transforms.Normalize(
                  mean=[
                      0.485, 0.456, 0.406], std=[
                      0.229, 0.224, 0.225]),
          ])
          normalized = preprocess(decoded)
          batchified = normalized.unsqueeze(0)
          # predict
          device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
          batchified = batchified.to(device)
          output = model.forward(batchified)
      
          return json.dumps(output.cpu().numpy().tolist()), response_content_type
      ```

------
#### [ PyTorch 1.5 and Newer ]

      ```
      import os
      import torch
      import torch.nn.parallel
      import torch.optim
      import torch.utils.data
      import torch.utils.data.distributed
      import torchvision.transforms as transforms
      from PIL import Image
      import io
      import json
      import pickle
      
      
      def model_fn(model_dir):
          """Load the model and return it.
          Providing this function is optional.
          There is a default_model_fn available, which will load the model
          compiled using SageMaker Neo. You can override the default here.
          The model_fn only needs to be defined if your model needs extra
          steps to load, and can otherwise be left undefined.
      
          Keyword arguments:
          model_dir -- the directory path where the model artifacts are present
          """
      
          # The compiled model is saved as "model.pt"
          model_path = os.path.join(model_dir, 'model.pt')
          device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
          model = torch.jit.load(model_path, map_location=device)
          model = model.to(device)
      
          return model
      
      
      def transform_fn(model, request_body, request_content_type,
                          response_content_type):
          """Run prediction and return the output.
          The function
          1. Pre-processes the input request
          2. Runs prediction
          3. Post-processes the prediction output.
          """
          # preprocess
          decoded = Image.open(io.BytesIO(request_body))
          preprocess = transforms.Compose([
                                      transforms.Resize(256),
                                      transforms.CenterCrop(224),
                                      transforms.ToTensor(),
                                      transforms.Normalize(
                                          mean=[
                                              0.485, 0.456, 0.406], std=[
                                              0.229, 0.224, 0.225]),
                                          ])
          normalized = preprocess(decoded)
          batchified = normalized.unsqueeze(0)
          
          # predict
          device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
          batchified = batchified.to(device)
          output = model.forward(batchified)
          return json.dumps(output.cpu().numpy().tolist()), response_content_type
      ```

------

   1.  **Pour les instances inf1 ou les images de conteneur onnx, xgboost, keras** 

      Pour toutes les autres images de conteneur optimisées pour l'inférence Neo, ou les types d'instances Inferentia, le script de point d'entrée doit mettre en œuvre les fonctions suivantes pour le Runtime Deep Learning Neo : 
      + `neo_preprocess` : convertit la charge utile de demande entrante en un tableau numpy.
      + `neo_postprocess` : convertit la sortie de la prédiction du Runtime Deep Learning Neo dans le corps de la réponse.
**Note**  
Les deux fonctions précédentes n'utilisent aucune des fonctionnalités de MXNet PyTorch, ou TensorFlow.

      Pour obtenir des exemples d’utilisation de ces fonctions, consultez [Exemples de blocs-notes de compilation de modèles Neo](https://docs.aws.amazon.com//sagemaker/latest/dg/neo.html#neo-sample-notebooks). 

   1. **Pour les TensorFlow modèles**

      Si votre modèle nécessite une logique de pré- et de post-traitement personnalisée avant l'envoi des données au modèle, vous devez spécifier un fichier script de point d'entrée `inference.py` utilisable au moment de l'inférence. Le script doit mettre en œuvre une paire de fonctions `input_handler` et `output_handler` ou une seule fonction de gestionnaire. 
**Note**  
Veuillez noter que si la fonction de gestionnaire est mise en œuvre, `input_handler` et `output_handler` sont ignorées. 

      Voici un exemple de code de script `inference.py` que vous pouvez assembler avec le modèle de compilation pour effectuer un pré- et un post-traitement personnalisé sur un modèle de classification d'image. Le client SageMaker AI envoie le fichier image en tant que type de `application/x-image` contenu à la `input_handler` fonction, où il est converti en JSON. Le fichier image converti est ensuite envoyé au [serveur de modèles Tensorflow (TFX)](https://www.tensorflow.org/tfx/serving/api_rest) à l'aide de l'API REST. 

      ```
      import json
      import numpy as np
      import json
      import io
      from PIL import Image
      
      def input_handler(data, context):
          """ Pre-process request input before it is sent to TensorFlow Serving REST API
          
          Args:
          data (obj): the request data, in format of dict or string
          context (Context): an object containing request and configuration details
          
          Returns:
          (dict): a JSON-serializable dict that contains request body and headers
          """
          f = data.read()
          f = io.BytesIO(f)
          image = Image.open(f).convert('RGB')
          batch_size = 1
          image = np.asarray(image.resize((512, 512)))
          image = np.concatenate([image[np.newaxis, :, :]] * batch_size)
          body = json.dumps({"signature_name": "serving_default", "instances": image.tolist()})
          return body
      
      def output_handler(data, context):
          """Post-process TensorFlow Serving output before it is returned to the client.
          
          Args:
          data (obj): the TensorFlow serving response
          context (Context): an object containing request and configuration details
          
          Returns:
          (bytes, string): data to return to client, response content type
          """
          if data.status_code != 200:
              raise ValueError(data.content.decode('utf-8'))
      
          response_content_type = context.accept_header
          prediction = data.content
          return prediction, response_content_type
      ```

      S'il n'y a pas de prétraitement ou de post-traitement personnalisé, le client SageMaker AI convertit l'image du fichier en JSON de la même manière avant de l'envoyer au point de terminaison SageMaker AI. 

      Pour plus d'informations, consultez la section [Déploiement vers TensorFlow des points de terminaison du SDK SageMaker Python](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/deploying_tensorflow_serving.html#providing-python-scripts-for-pre-pos-processing). 

1. L'URI du compartiment Amazon S3 qui contient les artefacts du modèle compilé. 

# Déployer un modèle compilé à l'aide du SageMaker SDK
<a name="neo-deployment-hosting-services-sdk"></a>

Vous devez satisfaire à la section [des prérequis](https://docs.aws.amazon.com//sagemaker/latest/dg/neo-deployment-hosting-services-prerequisites) si le modèle a été compilé à l'aide de AWS SDK pour Python (Boto3) AWS CLI, ou de la console Amazon SageMaker AI. Suivez l'un des cas d'utilisation suivants pour déployer un modèle compilé avec SageMaker Neo en fonction de la façon dont vous avez compilé votre modèle.

**Topics**
+ [Si vous avez compilé votre modèle à l'aide du SageMaker SDK](#neo-deployment-hosting-services-sdk-deploy-sm-sdk)
+ [Si vous avez compilé votre modèle en utilisant MXNet ou PyTorch](#neo-deployment-hosting-services-sdk-deploy-sm-boto3)
+ [Si vous avez compilé votre modèle à l'aide de Boto3, de SageMaker la console ou de la CLI pour TensorFlow](#neo-deployment-hosting-services-sdk-deploy-sm-boto3-tensorflow)

## Si vous avez compilé votre modèle à l'aide du SageMaker SDK
<a name="neo-deployment-hosting-services-sdk-deploy-sm-sdk"></a>

Le gestionnaire d'objet [sagemaker.Model](https://sagemaker.readthedocs.io/en/stable/api/inference/model.html?highlight=sagemaker.Model) pour le modèle compilé fournit la fonction [deploy()](https://sagemaker.readthedocs.io/en/stable/api/inference/model.html?highlight=sagemaker.Model#sagemaker.model.Model.deploy) pour vous aider à créer un point de terminaison pour servir des demandes d'inférence. La fonctionnalité vous permet de définir le nombre et le type d'instances utilisés pour le point de terminaison. Vous devez choisir une instance pour laquelle vous avez compilé votre modèle. Par exemple, dans le travail compilé dans la section [Compile a Model (Amazon SageMaker SDK)](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation-sagemaker-sdk.html), c'est`ml_c5`. 

```
predictor = compiled_model.deploy(initial_instance_count = 1, instance_type = 'ml.c5.4xlarge')

# Print the name of newly created endpoint
print(predictor.endpoint_name)
```

## Si vous avez compilé votre modèle en utilisant MXNet ou PyTorch
<a name="neo-deployment-hosting-services-sdk-deploy-sm-boto3"></a>

Créez le modèle d' SageMaker IA et déployez-le à l'aide de l'API deploy () dans le cadre du modèle spécifique au framework. APIs Car MXNet c'est le [MXNetmodèle](https://sagemaker.readthedocs.io/en/stable/frameworks/mxnet/sagemaker.mxnet.html?highlight=MXNetModel#mxnet-model) et pour PyTorch, c'est le cas [ PyTorchModel](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/sagemaker.pytorch.html?highlight=PyTorchModel#sagemaker.pytorch.model.PyTorchModel). Lorsque vous créez et déployez un modèle d' SageMaker IA, vous devez définir la variable d'`MMS_DEFAULT_RESPONSE_TIMEOUT`environnement sur `500` et spécifier le `entry_point` paramètre en tant que script d'inférence (`inference.py`) et le `source_dir` paramètre en tant qu'emplacement du répertoire (`code`) du script d'inférence. Pour préparer le script d'inférence (`inference.py`) suivez l'étape Prérequis. 

L'exemple suivant montre comment utiliser ces fonctions pour déployer un modèle compilé à l'aide du SDK SageMaker AI pour Python : 

------
#### [ MXNet ]

```
from sagemaker.mxnet import MXNetModel

# Create SageMaker model and deploy an endpoint
sm_mxnet_compiled_model = MXNetModel(
    model_data='insert S3 path of compiled MXNet model archive',
    role='AmazonSageMaker-ExecutionRole',
    entry_point='inference.py',
    source_dir='code',
    framework_version='1.8.0',
    py_version='py3',
    image_uri='insert appropriate ECR Image URI for MXNet',
    env={'MMS_DEFAULT_RESPONSE_TIMEOUT': '500'},
)

# Replace the example instance_type below to your preferred instance_type
predictor = sm_mxnet_compiled_model.deploy(initial_instance_count = 1, instance_type = 'ml.p3.2xlarge')

# Print the name of newly created endpoint
print(predictor.endpoint_name)
```

------
#### [ PyTorch 1.4 and Older ]

```
from sagemaker.pytorch import PyTorchModel

# Create SageMaker model and deploy an endpoint
sm_pytorch_compiled_model = PyTorchModel(
    model_data='insert S3 path of compiled PyTorch model archive',
    role='AmazonSageMaker-ExecutionRole',
    entry_point='inference.py',
    source_dir='code',
    framework_version='1.4.0',
    py_version='py3',
    image_uri='insert appropriate ECR Image URI for PyTorch',
    env={'MMS_DEFAULT_RESPONSE_TIMEOUT': '500'},
)

# Replace the example instance_type below to your preferred instance_type
predictor = sm_pytorch_compiled_model.deploy(initial_instance_count = 1, instance_type = 'ml.p3.2xlarge')

# Print the name of newly created endpoint
print(predictor.endpoint_name)
```

------
#### [ PyTorch 1.5 and Newer ]

```
from sagemaker.pytorch import PyTorchModel

# Create SageMaker model and deploy an endpoint
sm_pytorch_compiled_model = PyTorchModel(
    model_data='insert S3 path of compiled PyTorch model archive',
    role='AmazonSageMaker-ExecutionRole',
    entry_point='inference.py',
    source_dir='code',
    framework_version='1.5',
    py_version='py3',
    image_uri='insert appropriate ECR Image URI for PyTorch',
)

# Replace the example instance_type below to your preferred instance_type
predictor = sm_pytorch_compiled_model.deploy(initial_instance_count = 1, instance_type = 'ml.p3.2xlarge')

# Print the name of newly created endpoint
print(predictor.endpoint_name)
```

------

**Note**  
Les politiques `AmazonSageMakerFullAccess` et `AmazonS3ReadOnlyAccess` doivent être attachées au rôle IAM `AmazonSageMaker-ExecutionRole`. 

## Si vous avez compilé votre modèle à l'aide de Boto3, de SageMaker la console ou de la CLI pour TensorFlow
<a name="neo-deployment-hosting-services-sdk-deploy-sm-boto3-tensorflow"></a>

Créez un objet `TensorFlowModel`, puis appelez la fonction deploy : 

```
role='AmazonSageMaker-ExecutionRole'
model_path='S3 path for model file'
framework_image='inference container arn'
tf_model = TensorFlowModel(model_data=model_path,
                framework_version='1.15.3',
                role=role, 
                image_uri=framework_image)
instance_type='ml.c5.xlarge'
predictor = tf_model.deploy(instance_type=instance_type,
                    initial_instance_count=1)
```

Pour plus d’informations, consultez [Déploiement direct à partir d’artefacts du modèle](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/deploying_tensorflow_serving.html#deploying-directly-from-model-artifacts). 

Vous pouvez sélectionner un URI Amazon ECR d'image Docker répondant à vos besoins dans [cette liste](https://docs.aws.amazon.com//sagemaker/latest/dg/neo-deployment-hosting-services-container-images.html). 

Pour plus d'informations sur la création d'un `TensorFlowModel` objet, consultez le [SageMaker SDK.](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/sagemaker.tensorflow.html#tensorflow-serving-model) 

**Note**  
La latence de votre première demande d'inférence peut être élevée si vous déployez votre modèle sur un GPU. Cela vient du fait qu'un noyau de calcul optimisé est créé sur la première demande d'inférence. Nous vous recommandons de créer un fichier de préparation des demandes d'inférence, que vous stockerez à côté de votre fichier de modèle avant de l'envoyer à un TFX. C'est ce que l'on appelle « préparer » le modèle. 

L'extrait de code suivant montre comment produire le fichier de préparation pour l'exemple de classification d'image dans la section [Prérequis](https://docs.aws.amazon.com//sagemaker/latest/dg/neo-deployment-hosting-services-prerequisites) : 

```
import tensorflow as tf
from tensorflow_serving.apis import classification_pb2
from tensorflow_serving.apis import inference_pb2
from tensorflow_serving.apis import model_pb2
from tensorflow_serving.apis import predict_pb2
from tensorflow_serving.apis import prediction_log_pb2
from tensorflow_serving.apis import regression_pb2
import numpy as np

with tf.python_io.TFRecordWriter("tf_serving_warmup_requests") as writer:       
    img = np.random.uniform(0, 1, size=[224, 224, 3]).astype(np.float32)
    img = np.expand_dims(img, axis=0)
    test_data = np.repeat(img, 1, axis=0)
    request = predict_pb2.PredictRequest()
    request.model_spec.name = 'compiled_models'
    request.model_spec.signature_name = 'serving_default'
    request.inputs['Placeholder:0'].CopyFrom(tf.compat.v1.make_tensor_proto(test_data, shape=test_data.shape, dtype=tf.float32))
    log = prediction_log_pb2.PredictionLog(
    predict_log=prediction_log_pb2.PredictLog(request=request))
    writer.write(log.SerializeToString())
```

Pour plus d'informations sur la façon de « réchauffer » votre modèle, consultez la [page TensorFlow TFX](https://www.tensorflow.org/tfx/serving/saved_model_warmup).

# Déploiement d'un modèle compilé à l'aide de Boto3
<a name="neo-deployment-hosting-services-boto3"></a>

Vous devez satisfaire à la section [des prérequis](https://docs.aws.amazon.com//sagemaker/latest/dg/neo-deployment-hosting-services-prerequisites) si le modèle a été compilé à l'aide de AWS SDK pour Python (Boto3) AWS CLI, ou de la console Amazon SageMaker AI. Suivez les étapes ci-dessous pour créer et déployer un modèle SageMaker compilé au format Neo à l'aide du [SDK Amazon Web Services pour Python (](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html)Boto3). 

**Topics**
+ [Déploiement du modèle](#neo-deployment-hosting-services-boto3-steps)

## Déploiement du modèle
<a name="neo-deployment-hosting-services-boto3-steps"></a>

Une fois que vous avez satisfait aux [conditions requises](https://docs.aws.amazon.com//sagemaker/latest/dg/neo-deployment-hosting-services-prerequisites), utilisez le `create_model``create_enpoint_config`, et `create_endpoint` APIs. 

L'exemple suivant montre comment les utiliser APIs pour déployer un modèle compilé avec Neo : 

```
import boto3
client = boto3.client('sagemaker')

# create sagemaker model
create_model_api_response = client.create_model(
                                    ModelName='my-sagemaker-model',
                                    PrimaryContainer={
                                        'Image': <insert the ECR Image URI>,
                                        'ModelDataUrl': 's3://path/to/model/artifact/model.tar.gz',
                                        'Environment': {}
                                    },
                                    ExecutionRoleArn='ARN for AmazonSageMaker-ExecutionRole'
                            )

print ("create_model API response", create_model_api_response)

# create sagemaker endpoint config
create_endpoint_config_api_response = client.create_endpoint_config(
                                            EndpointConfigName='sagemaker-neomxnet-endpoint-configuration',
                                            ProductionVariants=[
                                                {
                                                    'VariantName': <provide your variant name>,
                                                    'ModelName': 'my-sagemaker-model',
                                                    'InitialInstanceCount': 1,
                                                    'InstanceType': <provide your instance type here>
                                                },
                                            ]
                                       )

print ("create_endpoint_config API response", create_endpoint_config_api_response)

# create sagemaker endpoint
create_endpoint_api_response = client.create_endpoint(
                                    EndpointName='provide your endpoint name',
                                    EndpointConfigName=<insert your endpoint config name>,
                                )

print ("create_endpoint API response", create_endpoint_api_response)
```

**Note**  
Les politiques `AmazonSageMakerFullAccess` et `AmazonS3ReadOnlyAccess` doivent être attachées au rôle IAM `AmazonSageMaker-ExecutionRole`. 

Pour la syntaxe complète de `create_model``create_endpoint_config`, `create_endpoint` APIs, et [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_model), voir [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint_config](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint_config), et [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker.html#SageMaker.Client.create_endpoint), respectivement. 

Si vous n'avez pas entraîné votre modèle à l'aide de l' SageMaker IA, spécifiez les variables d'environnement suivantes : 

------
#### [ MXNet and PyTorch ]

```
"Environment": {
    "SAGEMAKER_PROGRAM": "inference.py",
    "SAGEMAKER_SUBMIT_DIRECTORY": "/opt/ml/model/code",
    "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
    "SAGEMAKER_REGION": "insert your region",
    "MMS_DEFAULT_RESPONSE_TIMEOUT": "500"
}
```

------
#### [ TensorFlow ]

```
"Environment": {
    "SAGEMAKER_PROGRAM": "inference.py",
    "SAGEMAKER_SUBMIT_DIRECTORY": "/opt/ml/model/code",
    "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
    "SAGEMAKER_REGION": "insert your region"
}
```

------

 Si vous avez entraîné votre modèle à l'aide de l' SageMaker IA, spécifiez la variable d'environnement `SAGEMAKER_SUBMIT_DIRECTORY` sous la forme de l'URI complet du compartiment Amazon S3 qui contient le script d'entraînement. 

# Déployez un modèle compilé à l'aide du AWS CLI
<a name="neo-deployment-hosting-services-cli"></a>

Vous devez satisfaire à la section [des prérequis](https://docs.aws.amazon.com//sagemaker/latest/dg/neo-deployment-hosting-services-prerequisites) si le modèle a été compilé à l'aide de AWS SDK pour Python (Boto3) AWS CLI, ou de la console Amazon SageMaker AI. Suivez les étapes ci-dessous pour créer et déployer un modèle SageMaker compilé au format NEO à l'aide du [AWS CLI](https://docs.aws.amazon.com/cli/latest/reference/). 

**Topics**
+ [Déploiement du modèle](#neo-deploy-cli)

## Déploiement du modèle
<a name="neo-deploy-cli"></a>

Une fois que vous avez satisfait aux [conditions requises](https://docs.aws.amazon.com//sagemaker/latest/dg/neo-deployment-hosting-services-prerequisites), utilisez les `create-endpoint` AWS CLI commandes `create-model``create-enpoint-config`, et. Les étapes suivantes expliquent comment utiliser ces commandes pour déployer un modèle compilé avec Neo : 



### Création d'un modèle
<a name="neo-deployment-hosting-services-cli-create-model"></a>

[Dans Neo Inference Container Images](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-deployment-hosting-services-container-images.html), sélectionnez l'URI de l'image d'inférence, puis utilisez l'`create-model`API pour créer un modèle d' SageMaker IA. Vous pouvez effectuer cette opération en deux étapes : 

1. Créez un fichier `create_model.json`. Dans le fichier, spécifiez le nom du modèle, l'URI de l'image, le chemin d'accès au `model.tar.gz` fichier dans votre compartiment Amazon S3 et votre rôle d'exécution SageMaker AI : 

   ```
   {
       "ModelName": "insert model name",
       "PrimaryContainer": {
           "Image": "insert the ECR Image URI",
           "ModelDataUrl": "insert S3 archive URL",
           "Environment": {"See details below"}
       },
       "ExecutionRoleArn": "ARN for AmazonSageMaker-ExecutionRole"
   }
   ```

   Si vous avez entraîné votre modèle à l'aide de l' SageMaker IA, spécifiez la variable d'environnement suivante : 

   ```
   "Environment": {
       "SAGEMAKER_SUBMIT_DIRECTORY" : "[Full S3 path for *.tar.gz file containing the training script]"
   }
   ```

   Si vous n'avez pas entraîné votre modèle à l'aide de l' SageMaker IA, spécifiez les variables d'environnement suivantes : 

------
#### [ MXNet and PyTorch ]

   ```
   "Environment": {
       "SAGEMAKER_PROGRAM": "inference.py",
       "SAGEMAKER_SUBMIT_DIRECTORY": "/opt/ml/model/code",
       "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
       "SAGEMAKER_REGION": "insert your region",
       "MMS_DEFAULT_RESPONSE_TIMEOUT": "500"
   }
   ```

------
#### [ TensorFlow ]

   ```
   "Environment": {
       "SAGEMAKER_PROGRAM": "inference.py",
       "SAGEMAKER_SUBMIT_DIRECTORY": "/opt/ml/model/code",
       "SAGEMAKER_CONTAINER_LOG_LEVEL": "20",
       "SAGEMAKER_REGION": "insert your region"
   }
   ```

------
**Note**  
Les politiques `AmazonSageMakerFullAccess` et `AmazonS3ReadOnlyAccess` doivent être attachées au rôle IAM `AmazonSageMaker-ExecutionRole`. 

1. Exécutez la commande suivante :

   ```
   aws sagemaker create-model --cli-input-json file://create_model.json
   ```

   Pour obtenir la syntaxe complète de l'API `create-model`, consultez [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-model.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-model.html). 

### Création d'une configuration de point de terminaison
<a name="neo-deployment-hosting-services-cli-create-endpoint-config"></a>

Après avoir créé un modèle d' SageMaker IA, créez la configuration du point de terminaison à l'aide de l'`create-endpoint-config`API. Pour ce faire, créez un fichier JSON avec les spécifications de votre configuration de point de terminaison. Par exemple, vous pouvez utiliser le modèle de code suivant et l'enregistrer comme `create_config.json` : 

```
{
    "EndpointConfigName": "<provide your endpoint config name>",
    "ProductionVariants": [
        {
            "VariantName": "<provide your variant name>",
            "ModelName": "my-sagemaker-model",
            "InitialInstanceCount": 1,
            "InstanceType": "<provide your instance type here>",
            "InitialVariantWeight": 1.0
        }
    ]
}
```

Exécutez maintenant la AWS CLI commande suivante pour créer la configuration de votre point de terminaison : 

```
aws sagemaker create-endpoint-config --cli-input-json file://create_config.json
```

Pour obtenir la syntaxe complète de l'API `create-endpoint-config`, consultez [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint-config.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint-config.html). 

### Création d’un point de terminaison
<a name="neo-deployment-hosting-services-cli-create-endpoint"></a>

Après avoir créé votre configuration de point de terminaison, créez un point de terminaison à l'aide de l'API `create-endpoint` : 

```
aws sagemaker create-endpoint --endpoint-name '<provide your endpoint name>' --endpoint-config-name '<insert your endpoint config name>'
```

Pour obtenir la syntaxe complète de l'API `create-endpoint`, consultez [https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker/create-endpoint.html). 

# Déploiement d'un modèle compilé à l'aide de la console
<a name="neo-deployment-hosting-services-console"></a>

Vous devez satisfaire à la section des [prérequis](https://docs.aws.amazon.com//sagemaker/latest/dg/neo-deployment-hosting-services-prerequisites) si le modèle a été compilé à l'aide AWS SDK pour Python (Boto3) de la AWS CLI console Amazon AI ou de la console Amazon SageMaker AI. Suivez les étapes ci-dessous pour créer et déployer un modèle compilé SageMaker AI Neo à l'aide de la console SageMaker AI [https://console.aws.amazon.com SageMaker /AI](https://console.aws.amazon.com/sagemaker/).

**Topics**
+ [Déploiement du modèle](#deploy-the-model-console-steps)

## Déploiement du modèle
<a name="deploy-the-model-console-steps"></a>

 Une fois les [prérequis](https://docs.aws.amazon.com//sagemaker/latest/dg/neo-deployment-hosting-services-prerequisites) satisfaits, procédez comme suit pour déployer un modèle compilé avec Neo : 

1. Choisissez **Modèles**, puis **Créer des modèles** depuis le groupe **Déduction**. Sur la page **Create model** (Créer un modèle), renseignez les champs **Model name** (Nom du modèle), **IAM role** (Rôle IAM) et **VPC**, si nécessaire.  
![\[Création d'un modèle Neo pour l'inférence\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/create-pipeline-model.png)

1. Pour ajouter des informations sur le conteneur utilisé pour déployer votre modèle, choisissez **Add container (Ajouter un conteneur)**, puis **Next (Suivant)**. Renseignez les champs **Container input options** (Options d'entrée du conteneur), **Location of inference code image** (Emplacement de l'image du code d'inférence), **Location of model artifacts** (Emplacement des artefacts du modèle), ainsi que **Container host name** (Nom d'hôte du conteneur) et **Environmental variables** (Variables d'environnement) éventuellement.  
![\[Création d'un modèle Neo pour l'inférence\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/neo-deploy-console-container-definition.png)

1. Pour déployer des modèles compilés par Neo, choisissez l'une des options suivantes :
   + **Container input options (Options d'entrée du conteneur)** : **fournissez des artefacts du modèle et une image d'inférence**.
   + **Location of inference code image (Emplacement de l'image du code d'inférence)** : choisissez l'URI de l'image d'inférence dans [Neo Inference Container Images (Images du conteneur d'inférence Neo)](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-deployment-hosting-services-container-images.html) en fonction de la région AWS et du type d'application. 
   + **Location of model artifacts (Emplacement des artefacts du modèle)** : saisissez l'URI du compartiment Amazon S3 de l'artefact du modèle compilé généré par l'API de compilation Neo.
   + **Variables d'environnement** :
     + Laissez ce champ vide pour **SageMaker XGBoost**.
     + Si vous avez entraîné votre modèle à l'aide de l' SageMaker IA, spécifiez la variable d'environnement `SAGEMAKER_SUBMIT_DIRECTORY` sous la forme de l'URI du compartiment Amazon S3 qui contient le script d'entraînement. 
     + Si vous n'avez pas entraîné votre modèle à l'aide de l' SageMaker IA, spécifiez les variables d'environnement suivantes :     
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/neo-deployment-hosting-services-console.html)

1. Confirmez l'exactitude des informations des conteneurs, puis choisissez **Create model (Créer un modèle)**. Sur la **Create model landing page (page d'accueil Créer un modèle)**, choisissez **Create endpoint (Créer un point de terminaison)**.   
![\[Page d'accueil Créer un modèle\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/neo-deploy-console-create-model-land-page.png)

1. Sur le schéma, **Créer et configurer un point de terminaison**, spécifiez le **Nom du point de terminaison**. Pour **Attach endpoint configuration (Attacher une configuration de point de terminaison)** choisissez **Create a new endpoint configuration (Créer une nouvelle configuration de point de terminaison)**.  
![\[Interface utilisateur Créer et configurer un point de terminaison de la console Neo.\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/neo-deploy-console-config-endpoint.png)

1. Sur la page **Nouvelle configuration du point de terminaison**, spécifiez le **Nom de configuration du point de terminaison**.   
![\[Interface utilisateur Nouvelle configuration de point de terminaison de la console Neo.\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/neo-deploy-console-new-endpoint-config.png)

1. Choisissez **Edit (Modifier)** en regard du nom du modèle et spécifiez le **Type d'instance** correct sur la page **Edit Production Variant (Modifier la variante de production)**. Il est impératif que la valeur **Type d'instance** corresponde à celle spécifiée dans votre tâche de compilation.  
![\[Interface utilisateur Nouvelle configuration de point de terminaison de la console Neo.\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/neo-deploy-console-edit-production-variant.png)

1. Choisissez **Enregistrer**.

1. Sur la page **New endpoint configuration (Nouvelle configuration de point de terminaison)**, choisissez **Create endpoint configuration (Créer une configuration de point de terminaison)**, puis choisissez **Create endpoint (Créer un point de terminaison)**. 

# Demandes d’inférence avec un service déployé
<a name="neo-requests"></a>

Si vous avez suivi les instructions[Déploiement d'un modèle](neo-deployment-hosting-services.md), vous devriez avoir un point de terminaison SageMaker AI configuré et en cours d'exécution. Indépendamment de la façon dont vous avez déployé votre modèle néo-compilé, vous pouvez envoyer des demandes d'inférence de trois façons différentes : 

**Topics**
+ [Demander des inférences à partir d'un service déployé (Amazon SageMaker SDK)](neo-requests-sdk.md)
+ [Demande d'inférences à partir d'un service déployé (Boto3)](neo-requests-boto3.md)
+ [Demander des inférences à partir d'un service déployé (AWS CLI)](neo-requests-cli.md)

# Demander des inférences à partir d'un service déployé (Amazon SageMaker SDK)
<a name="neo-requests-sdk"></a>

Utilisez les exemples de code suivants pour demander des inférences à partir de votre service déployé en fonction du cadre que vous avez utilisé pour entraîner votre modèle. Les exemples de code sont similaires pour les différents cadres. La principale différence est que le type de contenu est TensorFlow requis`application/json`. 

 

## PyTorch et MXNet
<a name="neo-requests-sdk-py-mxnet"></a>

 Si vous utilisez la version **PyTorch 1.4 ou une version ultérieure ou** la **MXNet version 1.7.0 ou une version ultérieure** et que vous disposez d'un point de terminaison Amazon SageMaker AI`InService`, vous pouvez effectuer des demandes d'inférence à l'aide `predictor` du package du SDK SageMaker AI pour Python. 

**Note**  
L'API varie en fonction de la version du SDK SageMaker AI pour Python :  
Pour la version 1.x, utilisez le [https://sagemaker.readthedocs.io/en/v1.72.0/api/inference/predictors.html#sagemaker.predictor.RealTimePredictor](https://sagemaker.readthedocs.io/en/v1.72.0/api/inference/predictors.html#sagemaker.predictor.RealTimePredictor) et l'API [https://sagemaker.readthedocs.io/en/v1.72.0/api/inference/predictors.html#sagemaker.predictor.RealTimePredictor.predict](https://sagemaker.readthedocs.io/en/v1.72.0/api/inference/predictors.html#sagemaker.predictor.RealTimePredictor.predict).
Pour la version 2.x, utilisez le [https://sagemaker.readthedocs.io/en/stable/api/inference/predictors.html#sagemaker.predictor.Predictor](https://sagemaker.readthedocs.io/en/stable/api/inference/predictors.html#sagemaker.predictor.Predictor) et l'API [https://sagemaker.readthedocs.io/en/stable/api/inference/predictors.html#sagemaker.predictor.Predictor.predict](https://sagemaker.readthedocs.io/en/stable/api/inference/predictors.html#sagemaker.predictor.Predictor.predict).

L'exemple de code suivant montre comment les utiliser pour envoyer une image APIs à des fins d'inférence : 

------
#### [ SageMaker Python SDK v1.x ]

```
from sagemaker.predictor import RealTimePredictor

endpoint = 'insert name of your endpoint here'

# Read image into memory
payload = None
with open("image.jpg", 'rb') as f:
    payload = f.read()

predictor = RealTimePredictor(endpoint=endpoint, content_type='application/x-image')
inference_response = predictor.predict(data=payload)
print (inference_response)
```

------
#### [ SageMaker Python SDK v2.x ]

```
from sagemaker.predictor import Predictor

endpoint = 'insert name of your endpoint here'

# Read image into memory
payload = None
with open("image.jpg", 'rb') as f:
    payload = f.read()
    
predictor = Predictor(endpoint)
inference_response = predictor.predict(data=payload)
print (inference_response)
```

------

## TensorFlow
<a name="neo-requests-sdk-py-tf"></a>

L'exemple de code suivant montre comment utiliser l'API du SDK SageMaker Python pour envoyer une image à des fins d'inférence : 

```
from sagemaker.predictor import Predictor
from PIL import Image
import numpy as np
import json

endpoint = 'insert the name of your endpoint here'

# Read image into memory
image = Image.open(input_file)
batch_size = 1
image = np.asarray(image.resize((224, 224)))
image = image / 128 - 1
image = np.concatenate([image[np.newaxis, :, :]] * batch_size)
body = json.dumps({"instances": image.tolist()})
    
predictor = Predictor(endpoint)
inference_response = predictor.predict(data=body)
print(inference_response)
```

# Demande d'inférences à partir d'un service déployé (Boto3)
<a name="neo-requests-boto3"></a>

 Vous pouvez soumettre des demandes d'inférence à l'aide du [https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime.html#SageMakerRuntime.Client.invoke_endpoint](https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/sagemaker-runtime.html#SageMakerRuntime.Client.invoke_endpoint)client et de l'API SageMaker AI SDK for Python (Boto3) une fois que vous disposez d'un point de terminaison AI. SageMaker `InService` L'exemple de code suivant montre comment envoyer une image pour inférence : 

------
#### [ PyTorch and MXNet ]

```
import boto3

import json
 
endpoint = 'insert name of your endpoint here'
 
runtime = boto3.Session().client('sagemaker-runtime')
 
# Read image into memory
with open(image, 'rb') as f:
    payload = f.read()
# Send image via InvokeEndpoint API
response = runtime.invoke_endpoint(EndpointName=endpoint, ContentType='application/x-image', Body=payload)

# Unpack response
result = json.loads(response['Body'].read().decode())
```

------
#### [ TensorFlow ]

Pour TensorFlow soumettre une entrée avec `application/json` pour le type de contenu. 

```
from PIL import Image
import numpy as np
import json
import boto3

client = boto3.client('sagemaker-runtime') 
input_file = 'path/to/image'
image = Image.open(input_file)
batch_size = 1
image = np.asarray(image.resize((224, 224)))
image = image / 128 - 1
image = np.concatenate([image[np.newaxis, :, :]] * batch_size)
body = json.dumps({"instances": image.tolist()})
ioc_predictor_endpoint_name = 'insert name of your endpoint here'
content_type = 'application/json'   
ioc_response = client.invoke_endpoint(
    EndpointName=ioc_predictor_endpoint_name,
    Body=body,
    ContentType=content_type
 )
```

------
#### [ XGBoost ]

 Pour une XGBoost candidature, vous devez plutôt envoyer un texte CSV : 

```
import boto3
import json
 
endpoint = 'insert your endpoint name here'
 
runtime = boto3.Session().client('sagemaker-runtime')
 
csv_text = '1,-1.0,1.0,1.5,2.6'
# Send CSV text via InvokeEndpoint API
response = runtime.invoke_endpoint(EndpointName=endpoint, ContentType='text/csv', Body=csv_text)
# Unpack response
result = json.loads(response['Body'].read().decode())
```

------

 Notez que BYOM autorise un type de contenu personnalisé. Pour de plus amples informations, veuillez consulter [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_runtime_InvokeEndpoint.html). 

# Demander des inférences à partir d'un service déployé (AWS CLI)
<a name="neo-requests-cli"></a>

Les demandes d'inférence peuvent être effectuées une [https://docs.aws.amazon.com/cli/latest/reference/sagemaker-runtime/invoke-endpoint.html](https://docs.aws.amazon.com/cli/latest/reference/sagemaker-runtime/invoke-endpoint.html)fois que vous avez un point de terminaison `InService` Amazon SageMaker AI. Vous pouvez faire des demandes d'inférence avec la AWS Command Line Interface (AWS CLI). L'exemple de code suivant montre comment envoyer une image pour inférence : 

```
aws sagemaker-runtime invoke-endpoint --endpoint-name 'insert name of your endpoint here' --body fileb://image.jpg --content-type=application/x-image output_file.txt
```

Un `output_file.txt` contenant des informations sur vos demandes d'inférence est créé si l'inférence a réussi. 

 Pour TensorFlow soumettre une entrée avec `application/json` comme type de contenu. 

```
aws sagemaker-runtime invoke-endpoint --endpoint-name 'insert name of your endpoint here' --body fileb://input.json --content-type=application/json output_file.txt
```

# Images de conteneur d'inférence
<a name="neo-deployment-hosting-services-container-images"></a>

SageMaker Neo fournit désormais des informations d'URI sur les images d'inférence pour les `ml_*` cibles. Pour de plus amples informations, veuillez consulter [DescribeCompilationJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DescribeCompilationJob.html#sagemaker-DescribeCompilationJob-response-InferenceImage).

Selon votre cas d'utilisation, remplacez la partie en surbrillance dans le modèle d'URI d'image d'inférence fourni ci-dessous par les valeurs qui conviennent. 

## Amazon SageMaker AI XGBoost
<a name="inference-container-collapse-xgboost"></a>

```
aws_account_id.dkr.ecr.aws_region.amazonaws.com/xgboost-neo:latest
```

Remplacez *aws\$1account\$1id* dans le tableau à la fin de cette page en fonction de celui *aws\$1region* que vous avez utilisé.

## Keras
<a name="inference-container-collapse-keras"></a>

```
aws_account_id.dkr.ecr.aws_region.amazonaws.com/sagemaker-neo-keras:fx_version-instance_type-py3
```

Remplacez *aws\$1account\$1id* dans le tableau à la fin de cette page en fonction de celui *aws\$1region* que vous avez utilisé.

Remplacez *fx\$1version* par `2.2.4`.

Remplacez *instance\$1type* par l'un `cpu` ou l'autre`gpu`.

## MXNet
<a name="inference-container-collapse-mxnet"></a>

------
#### [ CPU or GPU instance types ]

```
aws_account_id.dkr.ecr.aws_region.amazonaws.com/sagemaker-inference-mxnet:fx_version-instance_type-py3
```

Remplacez *aws\$1account\$1id* dans le tableau à la fin de cette page en fonction de celui *aws\$1region* que vous avez utilisé. 

Remplacez *fx\$1version* par `1.8.0`. 

Remplacez *instance\$1type* par l'un `cpu` ou l'autre`gpu`. 

------
#### [ Inferentia1 ]

```
aws_account_id.dkr.ecr.aws_region.amazonaws.com/sagemaker-neo-mxnet:fx_version-instance_type-py3
```

Remplacez *aws\$1region* par l'un `us-east-1` ou l'autre`us-west-2`. 

Remplacez *aws\$1account\$1id* dans le tableau à la fin de cette page en fonction de celui *aws\$1region* que vous avez utilisé. 

Remplacez *fx\$1version* par `1.5.1`. 

Remplacez *`instance_type`* par `inf`.

------

## ONNX
<a name="inference-container-collapse-onnx"></a>

```
aws_account_id.dkr.ecr.aws_region.amazonaws.com/sagemaker-neo-onnx:fx_version-instance_type-py3
```

Remplacez *aws\$1account\$1id* dans le tableau à la fin de cette page en fonction de celui *aws\$1region* que vous avez utilisé.

Remplacez *fx\$1version* par `1.5.0`.

Remplacez *instance\$1type* par l'un `cpu` ou l'autre`gpu`.

## PyTorch
<a name="inference-container-collapse-pytorch"></a>

------
#### [ CPU or GPU instance types ]

```
aws_account_id.dkr.ecr.aws_region.amazonaws.com/sagemaker-inference-pytorch:fx_version-instance_type-py3
```

Remplacez *aws\$1account\$1id* dans le tableau à la fin de cette page en fonction de celui *aws\$1region* que vous avez utilisé. 

Remplacez *fx\$1version* par `1.4``1.5`,`1.6`,`1.7`,`1.8`,`1.12`,`1.13`, ou`2.0`.

Remplacez *instance\$1type* par l'un `cpu` ou l'autre`gpu`. 

------
#### [ Inferentia1 ]

```
aws_account_id.dkr.ecr.aws_region.amazonaws.com/sagemaker-neo-pytorch:fx_version-instance_type-py3
```

Remplacez *aws\$1region* par l'un `us-east-1` ou l'autre`us-west-2`. 

Remplacez *aws\$1account\$1id* dans le tableau à la fin de cette page en fonction de celui *aws\$1region* que vous avez utilisé. 

Remplacez *fx\$1version* par `1.5.1`. 

Remplacez *`instance_type`* par `inf`.

------
#### [ Inferentia2 and Trainium1 ]

```
763104351884.dkr.ecr.aws_region.amazonaws.com/pytorch-inference-neuronx:1.13.1-neuronx-py38-sdk2.10.0-ubuntu20.04
```

Remplacez *aws\$1region* par `us-east-2` pour Inferentia2 et `us-east-1` pour Trainium1.

------

## TensorFlow
<a name="inference-container-collapse-tf"></a>

------
#### [ CPU or GPU instance types ]

```
aws_account_id.dkr.ecr.aws_region.amazonaws.com/sagemaker-inference-tensorflow:fx_version-instance_type-py3
```

Remplacez *aws\$1account\$1id* dans le tableau à la fin de cette page en fonction de celui *aws\$1region* que vous avez utilisé. 

Remplacez *fx\$1version* par `1.15.3` ou `2.9`. 

Remplacez *instance\$1type* par l'un `cpu` ou l'autre`gpu`. 

------
#### [ Inferentia1 ]

```
aws_account_id.dkr.ecr.aws_region.amazonaws.com/sagemaker-neo-tensorflow:fx_version-instance_type-py3
```

Remplacez *aws\$1account\$1id* dans le tableau à la fin de cette page en fonction de celui *aws\$1region* que vous avez utilisé. Veuillez noter que, pour type d’instance `inf`, seuls `us-east-1` et `us-west-2` sont pris en charge.

Remplacez *fx\$1version* par `1.15.0`.

Remplacez *instance\$1type* par `inf`.

------
#### [ Inferentia2 and Trainium1 ]

```
763104351884.dkr.ecr.aws_region.amazonaws.com/tensorflow-inference-neuronx:2.10.1-neuronx-py38-sdk2.10.0-ubuntu20.04
```

Remplacez *aws\$1region* par `us-east-2` pour Inferentia2 et `us-east-1` pour Trainium1.

------

Le tableau suivant correspond *aws\$1account\$1id* à*aws\$1region*. Utilisez ce tableau pour trouver l'URI d'image d'inférence correcte dont vous avez besoin pour votre application. 


| aws\$1account\$1id | aws\$1region | 
| --- | --- | 
| 785573368785 | us-east-1 | 
| 007439368137 | us-east-2 | 
| 710691900526 | us-west-1 | 
| 301217895009 | us-west-2 | 
| 802834080501 | eu-west-1 | 
| 205493899709 | eu-west-2 | 
| 254080097072 | eu-west-3 | 
| 601324751636 | eu-north-1 | 
| 966458181534 | eu-south-1 | 
| 746233611703 | eu-central-1 | 
| 110948597952 | ap-east-1 | 
| 763008648453 | ap-south-1 | 
| 941853720454 | ap-northeast-1 | 
| 151534178276 | ap-northeast-2 | 
| 925152966179 | ap-northeast-3 | 
| 324986816169 | ap-southeast-1 | 
| 355873309152 | ap-southeast-2 | 
| 474822919863 | cn-northwest-1 | 
| 472730292857 | cn-north-1 | 
| 756306329178 | sa-east-1 | 
| 464438896020 | ca-central-1 | 
| 836785723513 | me-south-1 | 
| 774647643957 | af-south-1 | 
| 275950707576 | il-central-1 | 

# Appareils en périphérie
<a name="neo-edge-devices"></a>

Amazon SageMaker Neo prend en charge la compilation des cadres de machine learning les plus courants. Vous pouvez déployer vos appareils en périphérie néo-compilés, tels que le Raspberry Pi 3, le Sitara de Texas Instruments, le Jetson TX1, etc. Pour obtenir la liste complète des cadres et des appareils en périphérie pris en charge, consultez [Cadres, appareils, systèmes et architectures pris en charge](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html). 

Vous devez configurer votre appareil en périphérie de sorte qu'il puisse utiliser AWS. Pour ce faire, vous pouvez installer DLR et Boto3 sur votre périphérique. Pour ce faire, vous devez configurer les informations d’identification d’authentification. Pour plus d’informations, consultez [Configuration AWS Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#configuration). Une fois votre modèle compilé et votre appareil en périphérie configuré, vous pouvez télécharger le modèle d'Amazon S3 sur votre appareil en périphérie. À partir de là, vous pouvez utiliser le [Deep Learning Runtime (DLR) (Runtime deep learning)](https://neo-ai-dlr.readthedocs.io/en/latest/index.html) pour lire le modèle compilé et faire des inférences. 

Nous recommandons aux utilisateurs débutants de consulter le guide de [Démarrer](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-getting-started-edge.html). Ce guide vous explique comment configurer vos informations d'identification, compiler un modèle, le déployer sur un Raspberry Pi 3 et faire des inférences sur les images. 

**Topics**
+ [Cadres, périphériques, systèmes et architectures pris en charge](neo-supported-devices-edge.md)
+ [Déployez des modèles](neo-deployment-edge.md)
+ [Configuration de Neo sur des appareils en périphérie](neo-getting-started-edge.md)

# Cadres, périphériques, systèmes et architectures pris en charge
<a name="neo-supported-devices-edge"></a>

Amazon SageMaker Neo prend en charge les cadres de machine learning, les appareils en périphérie, les systèmes d’exploitation et les architectures de puces les plus courants. Découvrez si Neo prend en charge votre cadre, votre appareil en périphérie, votre système d’exploitation et votre architecture de puce en sélectionnant l’une des rubriques ci-dessous.

Vous trouverez une liste des modèles testés par l’équipe Amazon SageMaker Neo dans la section [Modèles testés](neo-supported-edge-tested-models.md).

**Note**  
Pour les périphériques Ambarella, des fichiers supplémentaires doivent être inclus dans le fichier TAR compressé avant de l’envoyer pour compilation. Pour plus d’informations, consultez [Résolution des erreurs Ambarella](neo-troubleshooting-target-devices-ambarella.md).
TIM-VX (libtim-vx.so) est requis pour i.MX 8M Plus. Pour plus d’informations sur la création de TIM-VX, consultez le [référentiel GitHub TIM-VX](https://github.com/VeriSilicon/TIM-VX).

**Topics**
+ [Cadres pris en charge](neo-supported-devices-edge-frameworks.md)
+ [Périphériques, architectures de puces et systèmes pris en charge](neo-supported-devices-edge-devices.md)
+ [Modèles testés](neo-supported-edge-tested-models.md)

# Cadres pris en charge
<a name="neo-supported-devices-edge-frameworks"></a>

Amazon SageMaker Neo prend en charge les cadres suivants. 


| Cadre | Version du cadre | Version de modèle | Modèles | Formats de modèle (packagés dans \$1.tar.gz) | Boîtes à outils | 
| --- | --- | --- | --- | --- | --- | 
| MXNet | 1.8 | Prend en charge la version 1.8 ou antérieure | classification d’images, détection d’objets, segmentation sémantique, estimation de pose, reconnaissance d’activités | Un fichier de symboles (.json) et un fichier de paramètres (.params) | GluonCV v0.8.0 | 
| ONNX | 1.7 | Prend en charge la version 1.7 ou antérieure | Classification d’images, SVM | Un fichier de modèle (.onnx) |  | 
| Keras | 2.2 | Prend en charge la version 2.2 ou antérieure | Classification d’images | Un fichier de définition de modèle (.h5) |  | 
| PyTorch | 1.7, 1.8 | Prend en charge la version 1.7, 1.8 ou antérieure | Classification d’images, détection d’objets | Un fichier de définition de modèle (.pth) |  | 
| TensorFlow | 1.15, 2.4, 2.5 (uniquement pour les instances ml.inf1.\$1) | Prend en charge les versions 1.15, 2.4, 2.5 (uniquement pour les instances ml.inf1.\$1) ou antérieures | Classification d’images, détection d’objets | \$1Pour les modèles enregistrés, un fichier .pb ou .pbtxt et un répertoire de variables contenant des variables \$1Pour les modèles figés, un seul fichier .pb ou .pbtxt |  | 
| TensorFlow-Lite | 1.15 | Prend en charge la version 1.15 ou antérieure | Classification d’images, détection d’objets | Un fichier de tampon plat de définition de modèle (.tflite) |  | 
| XGBoost | 1.3 | Prend en charge la version 1.3 ou antérieure | Arbres de décision | Un fichier de modèles XGBoost (.model) dans lequel le nombre de nœuds d’une arborescence est inférieur à 2^31 |  | 
| DARKNET |  |  | Classification des images, détection d’objets (le modèle Yolo n’est pas pris en charge) | Un fichier de configuration (.cfg) et un fichier de poids (.weights) |  | 

# Périphériques, architectures de puces et systèmes pris en charge
<a name="neo-supported-devices-edge-devices"></a>

Amazon SageMaker Neo prend en charge les périphériques, les architectures de puces et les systèmes d’exploitation suivants.

## Appareils
<a name="neo-supported-edge-devices"></a>

Vous pouvez sélectionner un périphérique dans la liste déroulante de la [console Amazon SageMaker AI](https://console.aws.amazon.com/sagemaker) ou en spécifiant le paramètre `TargetDevice` dans la configuration de sortie de l’API [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCompilationJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateCompilationJob.html).

Vous pouvez choisir parmi l’un des appareils en périphérie suivants : 


| Liste des périphériques | Système sur puce (SoC) | Système d’exploitation | Architecture | Accélérateur | Exemple d’options de compilateur | 
| --- | --- | --- | --- | --- | --- | 
| aisage | Aucun | Linux | ARM64 | Mali | Aucun | 
| amba\$1cv2 | CV2 | Arch Linux | ARM64 | cvflow | Aucun | 
| amba\$1cv22 | CV22 | Arch Linux | ARM64 | cvflow | Aucun | 
| amba\$1cv25 | CV25 | Arch Linux | ARM64 | cvflow | Aucun | 
| coreml | Aucun | macOS IVS | Aucun | Aucun | \$1"class\$1labels": "imagenet\$1labels\$11000.txt"\$1 | 
| imx8qm | NXP imx8 | Linux | ARM64 | Aucun | Aucun | 
| imx8mplus | i.MX 8M Plus | Linux | ARM64 | NPU | Aucun | 
| jacinto\$1tda4vm | TDA4VM | Linux | ARM | TDA4VM | Aucun | 
| jetson\$1nano | Aucun | Linux | ARM64 | NVIDIA | \$1'gpu-code': 'sm\$153', 'trt-ver': '5.0.6', 'cuda-ver': '10.0'\$1Pour `TensorFlow2`, `{'JETPACK_VERSION': '4.6', 'gpu_code': 'sm_72'}` | 
| jetson\$1tx1 | Aucun | Linux | ARM64 | NVIDIA | \$1'gpu-code': 'sm\$153', 'trt-ver': '6.0.1', 'cuda-ver': '10.0'\$1 | 
| jetson\$1tx2 | Aucun | Linux | ARM64 | NVIDIA | \$1'gpu-code': 'sm\$162', 'trt-ver': '6.0.1', 'cuda-ver': '10.0'\$1 | 
| jetson\$1xavier | Aucun | Linux | ARM64 | NVIDIA | \$1'gpu-code': 'sm\$172', 'trt-ver': '5.1.6', 'cuda-ver': '10.0'\$1 | 
| qcs605 | Aucun | Android | ARM64 | Mali | \$1'ANDROID\$1PLATFORM': 27\$1 | 
| qcs603 | Aucun | Android | ARM64 | Mali | \$1'ANDROID\$1PLATFORM': 27\$1 | 
| rasp3b | ARM A56 | Linux | ARM\$1EABIHF | Aucun | \$1'mattr': ['\$1neon']\$1 | 
| rasp4b | ARM A72 | Aucun | Aucun | Aucun | Aucun | 
| rk3288 | Aucun | Linux | ARM\$1EABIHF | Mali | Aucun | 
| rk3399 | Aucun | Linux | ARM64 | Mali | Aucun | 
| sbe\$1c | Aucun | Linux | x86\$164 | Aucun | \$1'mcpu': 'core-avx2'\$1 | 
| sitara\$1am57x | AM57X | Linux | ARM64 | EVE et/ou DSP C66x | Aucun | 
| x86\$1win32 | Aucun | Windows 10 | X86\$132 | Aucun | Aucun | 
| x86\$1win64 | Aucun | Windows 10 | X86\$132 | Aucun | Aucun | 

Pour plus d’informations sur les options du compilateur de valeur clé JSON pour chaque périphérique cible, consultez le champ `CompilerOptions` dans le type de données [d’API `OutputConfig`](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_OutputConfig.html).

## Systèmes et architectures de puces
<a name="neo-supported-edge-granular"></a>

Les tables de consultation suivantes fournissent des informations sur les systèmes d’exploitation et les architectures disponibles pour les tâches de compilation de modèles Neo. 

------
#### [ Linux ]


| Accélérateur | X86\$164 | X86 | ARM64 | ARM\$1EABIHF | ARM\$1EABI | 
| --- | --- | --- | --- | --- | --- | 
| Pas d’accélérateur (CPU) | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/success_icon.svg) Oui | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/negative_icon.svg) Non | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/success_icon.svg) Oui | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/success_icon.svg) Oui | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/success_icon.svg) Oui | 
| GPU Nvidia | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/success_icon.svg) Oui | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/negative_icon.svg) Non | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/success_icon.svg) Oui | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/negative_icon.svg) Non | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/negative_icon.svg) Non | 
| Intel\$1Graphics | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/success_icon.svg) Oui | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/negative_icon.svg) Non | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/negative_icon.svg) Non | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/negative_icon.svg) Non | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/negative_icon.svg) Non | 
| ARM Mali | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/negative_icon.svg) Non | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/negative_icon.svg) Non | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/success_icon.svg) Oui | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/success_icon.svg) Oui | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/success_icon.svg) Oui | 

------
#### [ Android ]


| Accélérateur | X86\$164 | X86 | ARM64 | ARM\$1EABIHF | ARM\$1EABI | 
| --- | --- | --- | --- | --- | --- | 
| Pas d’accélérateur (CPU) | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/success_icon.svg) Oui | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/success_icon.svg) Oui | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/success_icon.svg) Oui | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/negative_icon.svg) Non | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/success_icon.svg) Oui | 
| GPU Nvidia | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/negative_icon.svg) Non | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/negative_icon.svg) Non | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/negative_icon.svg) Non | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/negative_icon.svg) Non | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/negative_icon.svg) Non | 
| Intel\$1Graphics | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/success_icon.svg) Oui | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/success_icon.svg) Oui | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/negative_icon.svg) Non | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/negative_icon.svg) Non | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/negative_icon.svg) Non | 
| ARM Mali | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/negative_icon.svg) Non | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/negative_icon.svg) Non | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/success_icon.svg) Oui | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/negative_icon.svg) Non | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/success_icon.svg) Oui | 

------
#### [ Windows ]


| Accélérateur | X86\$164 | X86 | ARM64 | ARM\$1EABIHF | ARM\$1EABI | 
| --- | --- | --- | --- | --- | --- | 
| Pas d’accélérateur (CPU) | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/success_icon.svg) Oui | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/success_icon.svg) Oui | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/negative_icon.svg) Non | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/negative_icon.svg) Non | ![\[alt text not found\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/images/negative_icon.svg) Non | 

------

# Modèles testés
<a name="neo-supported-edge-tested-models"></a>

Les sections réductibles suivantes fournissent des informations sur les modèles de machine learning qui ont été testés par l’équipe Amazon SageMaker Neo. Développez la section réductible en fonction de votre cadre pour vérifier si un modèle a été testé.

**Note**  
Ceci n’est pas une liste complète de modèles qui peuvent être compilés avec Neo.

Consultez [Cadres pris en charge](neo-supported-devices-edge-frameworks.md) et [Opérateurs pris en charge par SageMaker AI Neo](https://aws.amazon.com/releasenotes/sagemaker-neo-supported-frameworks-and-operators/) pour savoir si vous pouvez compiler votre modèle avec SageMaker Neo.

## DarkNet
<a name="collapsible-section-01"></a>


| Modèles | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| AlexNet |  |  |  |  |  |  |  |  |  | 
| Resnet50 | X | X |  | X | X | X |  | X | X | 
| YOLOv2 |  |  |  | X | X | X |  | X | X | 
| YOLOv2\$1tiny | X | X |  | X | X | X |  | X | X | 
| YOLOv3\$1416 |  |  |  | X | X | X |  | X | X | 
| YOLOv3\$1tiny | X | X |  | X | X | X |  | X | X | 

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


| Modèles | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| AlexNet |  |  | X |  |  |  |  |  |  | 
| Densenet121 |  |  | X |  |  |  |  |  |  | 
| DenseNet201 | X | X | X | X | X | X |  | X | X | 
| GoogleNet | X | X |  | X | X | X |  | X | X | 
| Inceptionv3 |  |  |  | X | X | X |  | X | X | 
| MobileNet0.75 | X | X |  | X | X | X |  |  | X | 
| MobileNet1.0 | X | X | X | X | X | X |  |  | X | 
| MobileNetV2\$10.5 | X | X |  | X | X | X |  |  | X | 
| MobileNetV2\$11.0 | X | X | X | X | X | X | X | X | X | 
| MobileNetV3\$1Large | X | X | X | X | X | X | X | X | X | 
| MobileNetV3\$1Small | X | X | X | X | X | X | X | X | X | 
| ResNeSt50 |  |  |  | X | X |  |  | X | X | 
| ResNet18\$1v1 | X | X | X | X | X | X |  |  | X | 
| ResNet18\$1v2 | X | X |  | X | X | X |  |  | X | 
| ResNet50\$1v1 | X | X | X | X | X | X |  | X | X | 
| ResNet50\$1v2 | X | X | X | X | X | X |  | X | X | 
| ResNext101\$132x4d |  |  |  |  |  |  |  |  |  | 
| ResNext50\$132x4d | X |  | X | X | X |  |  | X | X | 
| SENet\$1154 |  |  |  | X | X | X |  | X | X | 
| SE\$1ResNext50\$132x4d | X | X |  | X | X | X |  | X | X | 
| SqueezeNet1.0 | X | X | X | X | X | X |  |  | X | 
| SqueezeNet1.1 | X | X | X | X | X | X |  | X | X | 
| VGG11 | X | X | X | X | X |  |  | X | X | 
| Xception | X | X | X | X | X | X |  | X | X | 
| darknet53 | X | X |  | X | X | X |  | X | X | 
| resnet18\$1v1b\$10.89 | X | X |  | X | X | X |  |  | X | 
| resnet50\$1v1d\$10.11 | X | X |  | X | X | X |  |  | X | 
| resnet50\$1v1d\$10.86 | X | X | X | X | X | X |  | X | X | 
| ssd\$1512\$1mobilenet1.0\$1coco | X |  | X | X | X | X |  | X | X | 
| ssd\$1512\$1mobilenet1.0\$1voc | X |  | X | X | X | X |  | X | X | 
| ssd\$1resnet50\$1v1 | X |  | X | X | X |  |  | X | X | 
| yolo3\$1darknet53\$1coco | X |  |  | X | X |  |  | X | X | 
| yolo3\$1mobilenet1.0\$1coco | X | X |  | X | X | X |  | X | X | 
| deeplab\$1resnet50 |  |  | X |  |  |  |  |  |  | 

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


| Modèles | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| denseet121 | X | X | X | X | X | X |  | X | X | 
| densenet201 | X | X | X | X | X | X |  |  | X | 
| inception\$1v3 | X | X |  | X | X | X |  | X | X | 
| mobilenet\$1v1 | X | X | X | X | X | X |  | X | X | 
| mobilenet\$1v2 | X | X | X | X | X | X |  | X | X | 
| resnet152\$1v1 |  |  |  | X | X |  |  |  | X | 
| resnet152\$1v2 |  |  |  | X | X |  |  |  | X | 
| resnet50\$1v1 | X | X | X | X | X |  |  | X | X | 
| resnet50\$1v2 | X | X | X | X | X | X |  | X | X | 
| vgg16 |  |  | X | X | X |  |  | X | X | 

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


| Modèles | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| AlexNet |  |  | X |  |  |  |  |  |  | 
| mobilenetv2-1.0 | X | X | X | X | X | X |  | X | X | 
| resnet18v1 | X |  |  | X | X |  |  |  | X | 
| resnet18v2 | X |  |  | X | X |  |  |  | X | 
| resnet50v1 | X |  | X | X | X |  |  | X | X | 
| resnet50v2 | X |  | X | X | X |  |  | X | X | 
| resnet152v1 |  |  |  | X | X | X |  |  | X | 
| resnet152v2 |  |  |  | X | X | X |  |  | X | 
| squeezenet1.1 | X |  | X | X | X | X |  | X | X | 
| vgg19 |  |  | X |  |  |  |  |  | X | 

## PyTorch (FP32)
<a name="collapsible-section-05"></a>


| Modèles | ARM V8 | ARM Mali | Ambarella CV22 | Ambarella CV25 | Nvidia | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| denseet121 | X | X | X | X | X | X | X |  | X | X | 
| inception\$1v3 |  | X |  |  | X | X | X |  | X | X | 
| resnet152 |  |  |  |  | X | X | X |  |  | X | 
| resnet18 | X | X |  |  | X | X | X |  |  | X | 
| resnet50 | X | X | X | X | X | X |  |  | X | X | 
| squeezenet1.0 | X | X |  |  | X | X | X |  |  | X | 
| squeezenet1.1 | X | X | X | X | X | X | X |  | X | X | 
| yolov4 |  |  |  |  | X | X |  |  |  |  | 
| yolov5 |  |  |  | X | X | X |  |  |  |  | 
| fasterrcnn\$1resnet50\$1fpn |  |  |  |  | X | X |  |  |  |  | 
| maskrcnn\$1resnet50\$1fpn |  |  |  |  | X | X |  |  |  |  | 

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

------
#### [ TensorFlow ]


| Modèles | ARM V8 | ARM Mali | Ambarella CV22 | Ambarella CV25 | Nvidia | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| densenet201 | X | X | X | X | X | X | X |  | X | X | 
| inception\$1v3 | X | X | X |  | X | X | X |  | X | X | 
| mobilenet100\$1v1 | X | X | X |  | X | X | X |  |  | X | 
| mobilenet100\$1v2.0 | X | X | X |  | X | X | X |  | X | X | 
| mobilenet130\$1v2 | X | X |  |  | X | X | X |  |  | X | 
| mobilenet140\$1v2 | X | X | X |  | X | X | X |  | X | X | 
| resnet50\$1v1.5 | X | X |  |  | X | X | X |  | X | X | 
| resnet50\$1v2 | X | X | X | X | X | X | X |  | X | X | 
| squeezenet | X | X | X | X | X | X | X |  | X | X | 
| mask\$1rcnn\$1inception\$1resnet\$1v2 |  |  |  |  | X |  |  |  |  |  | 
| ssd\$1mobilenet\$1v2 |  |  |  |  | X | X |  |  |  |  | 
| faster\$1rcnn\$1resnet50\$1lowproposals |  |  |  |  | X |  |  |  |  |  | 
| rfcn\$1resnet101 |  |  |  |  | X |  |  |  |  |  | 

------
#### [ TensorFlow.Keras ]


| Modèles | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| DenseNet121  | X | X |  | X | X | X |  | X | X | 
| DenseNet201 | X | X |  | X | X | X |  |  | X | 
| Inceptionv3 | X | X |  | X | X | X |  | X | X | 
| MobileNet | X | X |  | X | X | X |  | X | X | 
| MobileNetV2 | X | X |  | X | X | X |  | X | X | 
| NASNetLarge |  |  |  | X | X |  |  | X | X | 
| NASNetMobile | X | X |  | X | X | X |  | X | X | 
| ResNet101 |  |  |  | X | X | X |  |  | X | 
| ResNet101v2 |  |  |  | X | X | X |  |  | X | 
| ResNet152 |  |  |  | X | X |  |  |  | X | 
| ResNet152v2 |  |  |  | X | X |  |  |  | X | 
| ResNet50 | X | X |  | X | X |  |  | X | X | 
| ResNet50v2 | X | X |  | X | X | X |  | X | X | 
| VGG16 |  |  |  | X | X |  |  | X | X | 
| Xception | X | X |  | X | X | X |  | X | X | 

------

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

------
#### [ TensorFlow-Lite (FP32) ]


| Modèles | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | i.MX 8M Plus | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| densenet\$12018\$104\$127 | X |  |  | X | X | X |  |  | X |  | 
| inception\$1resnet\$1v2\$12018\$104\$127 |  |  |  | X | X | X |  |  | X |  | 
| inception\$1v3\$12018\$104\$127 |  |  |  | X | X | X |  |  | X | X | 
| inception\$1v4\$12018\$104\$127 |  |  |  | X | X | X |  |  | X | X | 
| mnasnet\$10.5\$1224\$109\$107\$12018 | X |  |  | X | X | X |  |  | X |  | 
| mnasnet\$11.0\$1224\$109\$107\$12018 | X |  |  | X | X | X |  |  | X |  | 
| mnasnet\$11.3\$1224\$109\$107\$12018 | X |  |  | X | X | X |  |  | X |  | 
| mobilenet\$1v1\$10.25\$1128 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$10.25\$1224 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$10.5\$1128 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$10.5\$1224 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$10.75\$1128 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$10.75\$1224 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$11.0\$1128 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v1\$11.0\$1192 | X |  |  | X | X | X |  |  | X | X | 
| mobilenet\$1v2\$11.0\$1224 | X |  |  | X | X | X |  |  | X | X | 
| resnet\$1v2\$1101 |  |  |  | X | X | X |  |  | X |  | 
| squeezenet\$12018\$104\$127 | X |  |  | X | X | X |  |  | X |  | 

------
#### [ TensorFlow-Lite (INT8) ]


| Modèles | ARM V8 | ARM Mali | Ambarella CV22 | Nvidia | Panorama | TI TDA4VM | Qualcomm QCS603 | X86\$1Linux | X86\$1Windows | i.MX 8M Plus | 
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | 
| inception\$1v1 |  |  |  |  |  |  | X |  |  | X | 
| inception\$1v2 |  |  |  |  |  |  | X |  |  | X | 
| inception\$1v3 | X |  |  |  |  | X | X |  | X | X | 
| inception\$1v4\$1299 | X |  |  |  |  | X | X |  | X | X | 
| mobilenet\$1v1\$10.25\$1128 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$10.25\$1224 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$10.5\$1128 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$10.5\$1224 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$10.75\$1128 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$10.75\$1224 | X |  |  |  |  | X | X |  | X | X | 
| mobilenet\$1v1\$11.0\$1128 | X |  |  |  |  | X |  |  | X | X | 
| mobilenet\$1v1\$11.0\$1224 | X |  |  |  |  | X | X |  | X | X | 
| mobilenet\$1v2\$11.0\$1224 | X |  |  |  |  | X | X |  | X | X | 
| deeplab-v3\$1513 |  |  |  |  |  |  | X |  |  |  | 

------

# Déployez des modèles
<a name="neo-deployment-edge"></a>

Vous pouvez déployer le module de calcul sur des appareils en périphérie à ressources limitées en téléchargeant le modèle compilé depuis Amazon S3 sur votre périphérique, et en utilisant [DLR](https://github.com/neo-ai/neo-ai-dlr) ou [AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/latest/developerguide/what-is-gg.html).

Avant de poursuivre, assurez-vous que votre appareil Edge doit être compatible avec SageMaker Neo. Veuillez consulter [Supported Frameworks, Devices, Systems, and Architectures (Cadres, périphériques, systèmes et architectures pris en charge)](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html) pour connaître les appareils en périphérie pris en charge. Assurez-vous d'avoir spécifié votre appareil en périphérie cible lors de l'envoi de la tâche de compilation. Veuillez consulter [Use Neo to Compile a Model (Utiliser Neo pour compiler un modèle)](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html).

## Déploiement d'un modèle compilé (DLR)
<a name="neo-deployment-dlr"></a>

[DLR](https://github.com/neo-ai/neo-ai-dlr) est un environnement d'exécution courant compact, pour les modèles de deep learning et d'arbres de décision. DLR utilise le runtime [TVM](https://github.com/neo-ai/tvm), le runtime [Treelite](https://treelite.readthedocs.io/en/latest/install.html), et NVIDIA TensorRT™, et peut inclure d'autres runtimes spécifiques au matériel. Le DLR fournit un langage Python/C\$1\$1 unifié APIs pour le chargement et l'exécution de modèles compilés sur différents appareils.

Vous pouvez installer la dernière version du package DLR à l'aide de la commande pip suivante :

```
pip install dlr
```

Pour installer DLR sur des cibles GPU ou des appareils en périphérie non x86, veuillez consulter [Releases (Versions)](https://github.com/neo-ai/neo-ai-dlr/releases) pour les binaires préconçus, ou [Installing DLR (Installation de DLR)](https://neo-ai-dlr.readthedocs.io/en/latest/install.html) pour créer DLR à partir d'une source. Par exemple, pour installer un DLR pour Raspberry Pi 3, vous pouvez utiliser : 

```
pip install https://neo-ai-dlr-release.s3-us-west-2.amazonaws.com/v1.3.0/pi-armv7l-raspbian4.14.71-glibc2_24-libstdcpp3_4/dlr-1.3.0-py3-none-any.whl
```

## Déployer un modèle (AWS IoT Greengrass)
<a name="neo-deployment-greengrass"></a>

[AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/latest/developerguide/what-is-gg.html) étend les fonctionnalités du cloud aux appareils locaux. Il permet aux appareils de collecter et d'analyser les données plus près de la source des informations, de réagir de manière autonome aux événements locaux et de communiquer en toute sécurité sur les réseaux locaux. Avec AWS IoT Greengrass, vous pouvez effectuer des inférences d'apprentissage automatique à la périphérie sur des données générées localement à l'aide de modèles conçus dans le cloud. Actuellement, vous pouvez déployer des modèles sur tous les appareils AWS IoT Greengrass basés sur les processeurs ARM Cortex-A, Intel Atom et Nvidia Jetson. Pour plus d'informations sur le déploiement d'une application d'inférence Lambda pour effectuer des inférences d'apprentissage automatique avec AWS IoT Greengrass, [consultez Comment configurer une inférence d'apprentissage automatique optimisée à](https://docs.aws.amazon.com/greengrass/latest/developerguide/ml-dlc-console.html) l'aide de la console de gestion. AWS 

# Configuration de Neo sur des appareils en périphérie
<a name="neo-getting-started-edge"></a>

Ce guide de prise en main d'Amazon SageMaker Neo explique comment compiler un modèle, configurer votre appareil et tirer des conclusions sur celui-ci. La plupart des exemples de code utilisent Boto3. Nous fournissons des commandes, le cas AWS CLI échéant, ainsi que des instructions sur la manière de satisfaire aux prérequis pour Neo. 

**Note**  
Vous pouvez exécuter les extraits de code suivants sur votre machine locale, dans un SageMaker bloc-notes, dans Amazon SageMaker Studio ou (selon votre appareil Edge) sur votre appareil Edge. La configuration est similaire ; toutefois, il existe deux exceptions principales si vous exécutez ce guide dans une instance de SageMaker bloc-notes ou une session SageMaker Studio :   
Vous n'avez pas besoin d'installer Boto3.
Vous n'avez pas besoin d'ajouter la politique IAM `‘AmazonSageMakerFullAccess’`

 Ce guide suppose que vous exécutez les instructions suivantes sur votre appareil en périphérie. 

# Conditions préalables
<a name="neo-getting-started-edge-step0"></a>

SageMaker Neo est une fonctionnalité qui vous permet de former des modèles d'apprentissage automatique une seule fois et de les exécuter n'importe où dans le cloud et à la périphérie. Avant de pouvoir compiler et optimiser vos modèles avec Neo, vous devez configurer quelques prérequis. Vous devez installer les bibliothèques Python nécessaires, configurer vos AWS informations d'identification, créer un rôle IAM avec les autorisations requises et configurer un compartiment S3 pour stocker les artefacts du modèle. Vous devez également disposer d’un modèle de machine learning entraîné. Vous trouverez ci-après les étapes de configuration :

1. **Installation de Boto3**

   Si vous exécutez ces commandes sur votre appareil en périphérie, vous devez installer le kit AWS SDK pour Python (Boto3). Dans un environnement Python (de préférence un environnement virtuel), exécutez les opérations suivantes localement sur le terminal de votre appareil en périphérie ou dans une instance de bloc-notes Jupyter : 

------
#### [ Terminal ]

   ```
   pip install boto3
   ```

------
#### [ Jupyter Notebook ]

   ```
   !pip install boto3
   ```

------

1.  **Configurer les AWS informations d'identification** 

   Vous devez configurer les informations d'identification Amazon Web Services sur votre périphérique afin d'exécuter le SDK for Python (Boto3). Par défaut, les AWS informations d'identification doivent être stockées dans le fichier `~/.aws/credentials` sur votre appareil Edge. Dans le fichier d'informations d'identification, vous devez voir deux variables d'environnement :`aws_access_key_id` et `aws_secret_access_key`. 

   Dans votre terminal, exécutez : 

   ```
   $ more ~/.aws/credentials
   
   [default]
   aws_access_key_id = YOUR_ACCESS_KEY
   aws_secret_access_key = YOUR_SECRET_KEY
   ```

   Le [Guide de référence générale AWS](https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-secret-access-keys) contient des instructions sur la façon d'obtenir les `aws_access_key_id` et `aws_secret_access_key` nécessaires. Pour plus d’informations sur la configuration des informations d’identification sur votre périphérique, consultez la documentation [Boto3](https://boto3.amazonaws.com/v1/documentation/api/latest/guide/quickstart.html#configuration). 

1.  **Configurez un rôle IAM et attachez-lui des politiques.** 

   Neo doit accéder à l'URI de votre compartiment S3. Créez un rôle IAM capable d'exécuter l' SageMaker IA et autorisé à accéder à l'URI S3. Vous pouvez créer un rôle IAM à l'aide du SDK for Python (Boto3), de la console ou de la AWS CLI. L'exemple suivant illustre la création d'un rôle IAM à l'aide du SDK for Python (Boto3) : 

   ```
   import boto3
   
   AWS_REGION = 'aws-region'
   
   # Create an IAM client to interact with IAM
   iam_client = boto3.client('iam', region_name=AWS_REGION)
   role_name = 'role-name'
   ```

   Pour plus d'informations sur la création d'un rôle IAM avec la console ou via l' AWS API AWS CLI, consultez la section [Création d'un utilisateur IAM dans votre AWS compte](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_users_create.html#id_users_create_api).

    Créez un dictionnaire décrivant la politique IAM que vous attachez. Cette politique sert à créer un nouveau rôle IAM. 

   ```
   policy = {
       'Statement': [
           {
               'Action': 'sts:AssumeRole',
               'Effect': 'Allow',
               'Principal': {'Service': 'sagemaker.amazonaws.com'},
           }],  
        'Version': '2012-10-17		 	 	 '
   }
   ```

   Créez un nouveau rôle IAM à l'aide de la politique que vous avez définie ci-dessus :

   ```
   import json 
   
   new_role = iam_client.create_role(
       AssumeRolePolicyDocument=json.dumps(policy),
       Path='/',
       RoleName=role_name
   )
   ```

   Vous devez connaître votre Amazon Resource Name (ARN) lorsque vous créez une tâche de compilation à une étape ultérieure. Veillez donc à le stocker dans une variable. 

   ```
   role_arn = new_role['Role']['Arn']
   ```

    Maintenant que vous avez créé un nouveau rôle, associez les autorisations dont il a besoin pour interagir avec Amazon SageMaker AI et Amazon S3 : 

   ```
   iam_client.attach_role_policy(
       RoleName=role_name,
       PolicyArn='arn:aws:iam::aws:policy/AmazonSageMakerFullAccess'
   )
   
   iam_client.attach_role_policy(
       RoleName=role_name,
       PolicyArn='arn:aws:iam::aws:policy/AmazonS3FullAccess'
   );
   ```

1. **Création d'un compartiment Amazon S3 pour stocker vos artefacts de modèle**

   SageMaker Neo accèdera aux artefacts de votre modèle depuis Amazon S3

------
#### [ Boto3 ]

   ```
   # Create an S3 client
   s3_client = boto3.client('s3', region_name=AWS_REGION)
   
   # Name buckets
   bucket='name-of-your-bucket'
   
   # Check if bucket exists
   if boto3.resource('s3').Bucket(bucket) not in boto3.resource('s3').buckets.all():
       s3_client.create_bucket(
           Bucket=bucket,
           CreateBucketConfiguration={
               'LocationConstraint': AWS_REGION
           }
       )
   else:
       print(f'Bucket {bucket} already exists. No action needed.')
   ```

------
#### [ CLI ]

   ```
   aws s3 mb s3://'name-of-your-bucket' --region specify-your-region 
   
   # Check your bucket exists
   aws s3 ls s3://'name-of-your-bucket'/
   ```

------

1. **Entraînement d'un modèle de machine learning**

   Consultez [Entraîner un modèle avec Amazon SageMaker AI](https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-training.html) pour plus d'informations sur la façon de former un modèle d'apprentissage automatique à l'aide d'Amazon SageMaker AI. En variante, vous pouvez télécharger le modèle que vous avez entraîné localement, directement dans un compartiment d'URI Amazon S3. 
**Note**  
 Assurez-vous que le modèle est correctement formaté en fonction du cadre que vous avez utilisé. Voir [Quelles sont les formes de données d'entrée attendues par SageMaker Neo ?](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html#neo-job-compilation-expected-inputs) 

   Si vous n'avez pas encore de modèle, utilisez la `curl` commande pour obtenir une copie locale du `coco_ssd_mobilenet` modèle sur le site Web TensorFlow du fabricant. Le modèle que vous venez de copier est un modèle de détection d'objets entraîné à partir du [jeu de données COCO](https://cocodataset.org/#home). Saisissez ce qui suit dans votre bloc-notes Jupyter :

   ```
   model_zip_filename = './coco_ssd_mobilenet_v1_1.0.zip'
   !curl http://storage.googleapis.com/download.tensorflow.org/models/tflite/coco_ssd_mobilenet_v1_1.0_quant_2018_06_29.zip \
       --output {model_zip_filename}
   ```

   Veuillez noter que cet exemple particulier a été packagé dans un fichier .zip. Décompressez ce fichier et repackagez-le en tant que fichier tarfile compressé (`.tar.gz`) avant de l'utiliser dans les étapes ultérieures. Saisissez ce qui suit dans votre bloc-notes Jupyter : 

   ```
   # Extract model from zip file
   !unzip -u {model_zip_filename}
   
   model_filename = 'detect.tflite'
   model_name = model_filename.split('.')[0]
   
   # Compress model into .tar.gz so SageMaker Neo can use it
   model_tar = model_name + '.tar.gz'
   !tar -czf {model_tar} {model_filename}
   ```

1. **Chargement d'un modèle entraîné dans un compartiment S3**

   Une fois votre modèle de machine learning entraîné, stockez-le dans un compartiment S3. 

------
#### [ Boto3 ]

   ```
   # Upload model        
   s3_client.upload_file(Filename=model_filename, Bucket=bucket, Key=model_filename)
   ```

------
#### [ CLI ]

   Remplacez `your-model-filename` et `amzn-s3-demo-bucket` par le nom de votre compartiment S3. 

   ```
   aws s3 cp your-model-filename s3://amzn-s3-demo-bucket
   ```

------

# Compilation du modèle.
<a name="neo-getting-started-edge-step1"></a>

Une fois que vous avez satisfait aux [prérequis](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-getting-started-edge.html#neo-getting-started-edge-step0), vous pouvez compiler votre modèle avec Amazon SageMaker AI Neo. Vous pouvez compiler votre modèle à l' AWS CLI aide de la console ou du [SDK Amazon Web Services pour Python (Boto3)[,](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html) voir Utiliser Neo pour](https://boto3.amazonaws.com/v1/documentation/api/latest/index.html) compiler un modèle. Dans cet exemple, vous allez compiler votre modèle avec Boto3.

Pour compiler un modèle, SageMaker Neo a besoin des informations suivantes :

1.  **L'URI du compartiment Amazon S3 où vous avez stocké le modèle entraîné.** 

   Si vous avez satisfait les prérequis, le nom de votre compartiment est stocké dans une variable nommée `bucket`. L'extrait de code suivant vous montre comment répertorier l'ensemble de vos compartiments à l'aide de la AWS CLI : 

   ```
   aws s3 ls
   ```

   Par exemple : 

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

1.  **L'URI du compartiment Amazon S3 dans lequel vous voulez enregistrer le modèle compilé.** 

   L'extrait de code ci-dessous concatène l'URI de votre compartiment Amazon S3 avec le nom d'un répertoire de sortie appelé `output` : 

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

1.  **Le cadre de machine learning que vous avez utilisé pour entraîner votre modèle.** 

   Définissez le cadre que vous avez utilisé pour entraîner votre modèle.

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

   Par exemple, si vous souhaitez compiler un modèle entraîné à l'aide de TensorFlow, vous pouvez utiliser `tflite` ou`tensorflow`. À utiliser `tflite` si vous souhaitez utiliser une version allégée TensorFlow qui utilise moins de mémoire de stockage. 

   ```
   framework = 'tflite'
   ```

   Pour obtenir la liste complète des cadres pris en charge par Neo, consultez [Cadres, appareils, systèmes et architectures pris en charge](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html). 

1.  **La forme de l'entrée de votre modèle.** 

    Neo a besoin du nom et de la forme de votre tenseur d'entrée. Le nom et la forme sont envoyés en tant que paires clé-valeur.`value` est une liste des dimensions entières d'un tenseur en entrée et `key` est le nom exact d'un tenseur d'entrée dans le modèle. 

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

   Par exemple :

   ```
   data_shape = '{"normalized_input_image_tensor":[1, 300, 300, 3]}'
   ```
**Note**  
Assurez-vous que le modèle est correctement formaté en fonction du cadre que vous avez utilisé. Voir [Quelles sont les formes de données d'entrée attendues par SageMaker Neo ?](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html#neo-job-compilation-expected-inputs) La clé dans ce dictionnaire doit être remplacée par le nouveau nom du tenseur d'entrée.

1.  **Il s'agit, soit du nom du périphérique cible pour lequel compiler, soit les détails généraux de la plateforme matérielle** 

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

   Par exemple, si vous voulez déployer sur un Raspberry Pi 3, utilisez : 

   ```
   target_device = 'rasp3b'
   ```

   Vous pouvez trouver la liste complète des appareils en périphérie pris en charge dans [Supported Frameworks, Devices, Systems, and Architectures (Cadres, périphériques, systèmes et architectures pris en charge)](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html).

 Après avoir accompli les étapes précédentes, vous pouvez envoyer une tâche de compilation à 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!')
```

Pour obtenir des informations supplémentaires pour le débogage, incluez l’instruction print suivante :

```
print(response)
```

Si la tâche de compilation a réussi, votre modèle compilé est stocké dans le compartiment Amazon S3 de sortie que vous avez spécifié au préalable (`s3_output_location`). Téléchargez votre modèle compilé localement : 

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

# Configuration de votre appareil
<a name="neo-getting-started-edge-step2"></a>

Vous devrez installer des packages sur votre appareil en périphérie pour qu'il puisse faire des inférences. Vous devrez également installer [AWS IoT Greengrass](https://docs.aws.amazon.com/greengrass/latest/developerguide/what-is-gg.html) ou [Deep Learning Runtime (DLR)](https://github.com/neo-ai/neo-ai-dlr). Dans cet exemple, vous allez installer les packages requis pour faire des inférences pour l'algorithme de détection d'objet `coco_ssd_mobilenet` et vous utiliserez DLR.

1. **Installation de packages supplémentaires**

   En plus de Boto3, vous devez installer certaines bibliothèques sur votre appareil en périphérie. Les bibliothèques que vous installez dépendent de votre cas d'utilisation. 

   Par exemple, pour l'algorithme de détection d'`coco_ssd_mobilenet`objets que vous avez téléchargé précédemment, vous devez l'installer [NumPy](https://numpy.org/)pour la manipulation des données et les statistiques, [PIL](https://pillow.readthedocs.io/en/stable/) pour charger les images et [Matplotlib](https://matplotlib.org/) pour générer des tracés. Vous avez également besoin d'une copie de TensorFlow si vous souhaitez évaluer l'impact de la compilation avec Neo par rapport à une base de référence. 

   ```
   !pip3 install numpy pillow tensorflow matplotlib 
   ```

1. **Installation du moteur d'inférence sur votre périphérique**

   Pour exécuter votre modèle néo-compilé, installez le [Deep Learning Runtime (DLR)](https://github.com/neo-ai/neo-ai-dlr) sur votre périphérique. DLR est un environnement d'exécution courant compact, pour les modèles de deep learning et d'arbres de décision. Sur les CPU cibles x86\$164 exécutant Linux, vous pouvez installer la dernière version du package DLR à l'aide de la commande `pip` :

   ```
   !pip install dlr
   ```

   Pour l’installation de DLR sur des GPU cibles ou des appareils en périphérie non x86, consultez [Versions](https://github.com/neo-ai/neo-ai-dlr/releases) pour les binaires préconçus, ou [Installation de DLR](https://neo-ai-dlr.readthedocs.io/en/latest/install.html) pour créer un DLR à partir d’une source. Par exemple, pour installer un DLR pour Raspberry Pi 3, vous pouvez utiliser : 

   ```
   !pip install https://neo-ai-dlr-release.s3-us-west-2.amazonaws.com/v1.3.0/pi-armv7l-raspbian4.14.71-glibc2_24-libstdcpp3_4/dlr-1.3.0-py3-none-any.whl
   ```

# Effectuer des inférences sur votre périphérique
<a name="neo-getting-started-edge-step3"></a>

Dans cet exemple, vous allez utiliser Boto3 pour télécharger la sortie de votre tâche de compilation sur votre appareil en périphérie. Vous allez ensuite importer le DLR, télécharger un exemple d'images à partir du jeu de données, redimensionner cette image pour qu'elle corresponde à l'entrée d'origine du modèle, puis faire une prédiction.

1. **Téléchargez votre modèle compilé depuis Amazon S3 sur votre périphérique et extrayez-le du fichier tarfile compressé.** 

   ```
   # Download compiled model locally to edge device
   object_path = f'output/{model_name}-{target_device}.tar.gz'
   neo_compiled_model = f'compiled-{model_name}.tar.gz'
   s3_client.download_file(bucket_name, object_path, neo_compiled_model)
   
   # Extract model from .tar.gz so DLR can use it
   !mkdir ./dlr_model # make a directory to store your model (optional)
   !tar -xzvf ./compiled-detect.tar.gz --directory ./dlr_model
   ```

1. **Importez le DLR et un objet `DLRModel` initialisé.**

   ```
   import dlr
   
   device = 'cpu'
   model = dlr.DLRModel('./dlr_model', device)
   ```

1. **Téléchargez une image pour l'inférence et formatez-la en fonction de la façon dont votre modèle a été entraîné**.

   Pour l'exemple `coco_ssd_mobilenet`, vous pouvez télécharger une image depuis le [jeu de données COCO](https://cocodataset.org/#home), puis réformer l'image à `300x300` : 

   ```
   from PIL import Image
   
   # Download an image for model to make a prediction
   input_image_filename = './input_image.jpg'
   !curl https://farm9.staticflickr.com/8325/8077197378_79efb4805e_z.jpg --output {input_image_filename}
   
   # Format image so model can make predictions
   resized_image = image.resize((300, 300))
   
   # Model is quantized, so convert the image to uint8
   x = np.array(resized_image).astype('uint8')
   ```

1. **Utilisez le DLR pour effectuer des inférences**.

   Pour terminer, vous pouvez utiliser le DLR pour réaliser une prédiction sur l'image que vous venez de télécharger : 

   ```
   out = model.run(x)
   ```

[Pour d'autres exemples d'utilisation du DLR pour faire des déductions à partir d'un modèle compilé par Neo sur un périphérique périphérique, consultez le neo-ai-dlr référentiel Github.](https://github.com/neo-ai/neo-ai-dlr) 

# Dépannage des erreurs
<a name="neo-troubleshooting"></a>

Cette section contient des informations sur la façon de comprendre et d’éviter les erreurs courantes, les messages d’erreur qu’elles génèrent, ainsi que des conseils sur la manière de résoudre ces erreurs. Avant d’aller plus loin, posez-vous les questions suivantes :

 **Avez-vous rencontré une erreur avant de déployer votre modèle ?** Si oui, consultez [Résolution des erreurs de compilation Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting-compilation.html). 

 **Avez-vous rencontré une erreur après avoir compilé votre modèle ?** Si oui, consultez [Résolution des erreurs d’inférence Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting-inference.html). 

**Avez-vous rencontré une erreur lors de la compilation de votre modèle pour des périphériques Ambarella ?** Si oui, consultez [Résolution des erreurs Ambarella](neo-troubleshooting-target-devices-ambarella.md).

## Classification des types d’erreurs
<a name="neo-error-messages"></a>

Cette liste classifie à les *erreurs de l’utilisateur* que vous pouvez recevoir de Neo. Elles incluent les erreurs d’accès et d’autorisation ainsi que les erreurs de chargement pour chacune des infrastructures prises en charge. Toutes les autres erreurs sont des *erreurs de système*.

### Erreur d’autorisation client
<a name="neo-error-client-permission"></a>

 Neo transmet les erreurs directement depuis le service dépendant. 
+ *Accès refusé* lors de l'appel de sets : AssumeRole
+ *Toute erreur 400* lors de l’appel d’Amazon S3 pour télécharger un modèle client vers l’amont ou l’aval
+ *PassRole*Erreur 

### Erreur de chargement
<a name="collapsible-section-2"></a>

En supposant que le compilateur Neo a chargé .tar.gz avec succès depuis Amazon S3, vérifiez que le tarball contient les fichiers nécessaires pour la compilation. Le critère de vérification est propre à l’infrastructure : 
+ **TensorFlow**: attend uniquement le fichier protobuf (\$1.pb ou \$1.pbtxt). Pour les modèles enregistrés, attend un dossier de variables. 
+ **Pytorch** : Attend uniquement un fichier pytorch (\$1.pth).
+ **MXNET** : Attend uniquement un fichier de symboles (\$1.json) et un fichier de paramètres (\$1.params).
+ **XGBoost**: attendez-vous à un seul fichier XGBoost modèle (\$1.model). Le modèle d’entrée dispose d’une limite de taille.

### Erreur de compilation
<a name="neo-error-compilation"></a>

En supposant que le compilateur Neo a chargé .tar.gz avec succès depuis Amazon S3, et que le tarball contient les fichiers nécessaires pour la compilation. Le critère de vérification est : 
+ **OperatorNotImplemented**: aucun opérateur n'a été implémenté.
+ **OperatorAttributeNotImplemented**: L'attribut de l'opérateur spécifié n'a pas été implémenté. 
+ **OperatorAttributeRequired**: un attribut est requis pour un graphe de symboles interne, mais il n'est pas répertorié dans le graphe du modèle saisi par l'utilisateur. 
+ **OperatorAttributeValueNotValid**: La valeur de l'attribut dans l'opérateur spécifique n'est pas valide. 

**Topics**
+ [Classification des types d’erreurs](#neo-error-messages)
+ [Résolution des erreurs de compilation Neo](neo-troubleshooting-compilation.md)
+ [Résolution des erreurs d’inférence Neo](neo-troubleshooting-inference.md)
+ [Résolution des erreurs Ambarella](neo-troubleshooting-target-devices-ambarella.md)

# Résolution des erreurs de compilation Neo
<a name="neo-troubleshooting-compilation"></a>

Cette section contient des informations sur la façon de comprendre et d’éviter les erreurs de compilation courantes, les messages d’erreur qu’elles génèrent, et des conseils sur leur possible résolution. 

**Topics**
+ [Comment utiliser cette page](#neo-troubleshooting-compilation-how-to-use)
+ [Erreurs spécifiques au cadre](#neo-troubleshooting-compilation-framework-related-errors)
+ [Erreurs liées à l’infrastructure](#neo-troubleshooting-compilation-infrastructure-errors)
+ [Vérifier votre journal de compilation](#neo-troubleshooting-compilation-logs)

## Comment utiliser cette page
<a name="neo-troubleshooting-compilation-how-to-use"></a>

Essayez de résoudre l’erreur en consultant ces sections dans l’ordre suivant :

1. Vérifiez que l’entrée de votre tâche de compilation satisfait aux exigences d’entrée. Consultez [Quelles sont les formes de données d'entrée attendues par SageMaker Neo ?](neo-compilation-preparing-model.md#neo-job-compilation-expected-inputs)

1.  Vérifiez les [erreurs spécifiques au cadre](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting-compilation.html#neo-troubleshooting-compilation-framework-related-errors) courantes. 

1.  Vérifiez si votre erreur est une [erreur liée à l’infrastructure](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting-compilation.html#neo-troubleshooting-compilation-infrastructure-errors). 

1. Vérifiez votre [journal de compilation](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-troubleshooting-compilation.html#neo-troubleshooting-compilation-logs).

## Erreurs spécifiques au cadre
<a name="neo-troubleshooting-compilation-framework-related-errors"></a>

### Keras
<a name="neo-troubleshooting-compilation-framework-related-errors-keras"></a>


| Erreur | Solution | 
| --- | --- | 
|   `InputConfiguration: No h5 file provided in <model path>`   |   Vérifiez que votre fichier h5 se trouve dans l’URI Amazon S3 que vous avez spécifié.  *Ou* Vérifiez que le [fichier h5 est correctement formaté](https://www.tensorflow.org/guide/keras/save_and_serialize#keras_h5_format).   | 
|   `InputConfiguration: Multiple h5 files provided, <model path>, when only one is allowed`   |  Veillez à ne fournir qu’un fichier `h5`.  | 
|   `ClientError: InputConfiguration: Unable to load provided Keras model. Error: 'sample_weight_mode'`   |  Vérifiez que la version de Keras que vous avez spécifiée est prise en charge. Consultez les cadres pris en charge pour les [instances cloud](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-cloud.html) et les [appareils en périphérie](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-supported-devices-edge.html).   | 
|   `ClientError: InputConfiguration: Input input has wrong shape in Input Shape dictionary. Input shapes should be provided in NCHW format. `   |   Vérifiez que votre entrée de modèle répond au format NCHW. Voir [Quelles sont les formes de données d'entrée attendues par SageMaker Neo ?](https://docs.aws.amazon.com/sagemaker/latest/dg/neo-job-compilation.html#neo-job-compilation-expected-inputs)   | 

### MXNet
<a name="neo-troubleshooting-compilation-framework-related-errors-mxnet"></a>


| Erreur | Solution | 
| --- | --- | 
|   `ClientError: InputConfiguration: Only one parameter file is allowed for MXNet model. Please make sure the framework you select is correct.`   |   SageMaker Neo sélectionnera le premier fichier de paramètres donné pour la compilation.   | 

### TensorFlow
<a name="neo-troubleshooting-compilation-framework-related-errors-tensorflow"></a>


| Erreur | Solution | 
| --- | --- | 
|   `InputConfiguration: Exactly one .pb file is allowed for TensorFlow models.`   |  Veillez à ne fournir qu’un fichier .pb ou .pbtxt.  | 
|  `InputConfiguration: Exactly one .pb or .pbtxt file is allowed for TensorFlow models.`  |  Veillez à ne fournir qu'un fichier .pb ou .pbtxt.  | 
|   ` ClientError: InputConfiguration: TVM cannot convert <model zoo> model. Please make sure the framework you selected is correct. The following operators are not implemented: {<operator name>} `   |   Vérifiez que l’opérateur que vous avez choisi est pris en charge. Voir [Frameworks et opérateurs pris en charge par SageMaker Neo](https://aws.amazon.com/releasenotes/sagemaker-neo-supported-frameworks-and-operators/).   | 

### PyTorch
<a name="neo-troubleshooting-compilation-framework-related-errors-pytorch"></a>


| Erreur | Solution | 
| --- | --- | 
|   `InputConfiguration: We are unable to extract DataInputConfig from the model due to input_config_derivation_error. Please override by providing a DataInputConfig during compilation job creation.`  |  Effectuez l’une des actions suivantes : [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/neo-troubleshooting-compilation.html)  | 

## Erreurs liées à l’infrastructure
<a name="neo-troubleshooting-compilation-infrastructure-errors"></a>


| Erreur | Solution | 
| --- | --- | 
|   `ClientError: InputConfiguration: S3 object does not exist. Bucket: <bucket>, Key: <bucket key>`   |  Vérifiez l’URI Amazon S3 que vous avez fourni.  | 
|   ` ClientError: InputConfiguration: Bucket <bucket name> is in region <region name> which is different from AWS Sagemaker service region <service region> `   |   Créez un compartiment Amazon S3 qui se trouve dans la même région que le service.   | 
|   ` ClientError: InputConfiguration: Unable to untar input model. Please confirm the model is a tar.gz file `   |   Vérifiez que votre modèle dans Amazon S3 est compressé sous forme de fichier `tar.gz`.   | 

## Vérifier votre journal de compilation
<a name="neo-troubleshooting-compilation-logs"></a>

1. Accédez à Amazon à CloudWatch l'adresse [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/).

1. Sélectionnez la région dans laquelle vous avez créé la tâche de compilation dans la liste déroulante **Region** (Région) située en haut à droite.

1. Dans le volet de navigation d'Amazon CloudWatch, choisissez **Logs**. Sélectionnez **Log groups** (Groupes de journaux).

1. Recherchez le groupe de journaux nommé `/aws/sagemaker/CompilationJobs`. Sélectionnez le groupe de journaux.

1. Recherchez le flux de journaux nommé d’après le nom de la tâche de compilation. Sélectionnez le flux de journaux.

# Résolution des erreurs d’inférence Neo
<a name="neo-troubleshooting-inference"></a>

Cette section contient des informations sur la façon de prévenir et de résoudre certaines des erreurs courantes que vous pourriez rencontrer lors du déploiement en and/or invoquant le point de terminaison. Cette section s'applique à la **PyTorch version 1.4.0 ou ultérieure** et à la **MXNetv1.7.0 ou version ultérieure**. 
+ Assurez-vous que la première inférence (inférence de préparation) sur des données d’entrée valides est faite dans `model_fn()`, si vous avez défini un `model_fn` dans votre script d’inférence ; sinon, le message d’erreur suivant peut s’afficher sur le terminal lorsque l’API [https://sagemaker.readthedocs.io/en/stable/api/inference/predictors.html#sagemaker.predictor.Predictor.predict](https://sagemaker.readthedocs.io/en/stable/api/inference/predictors.html#sagemaker.predictor.Predictor.predict) est appelée : 

  ```
  An error occurred (ModelError) when calling the InvokeEndpoint operation: Received server error (0) from <users-sagemaker-endpoint> with message "Your invocation timed out while waiting for a response from container model. Review the latency metrics for each container in Amazon CloudWatch, resolve the issue, and try again."                
  ```
+ Assurez-vous que les variables d’environnement du tableau suivant sont définies. Si ce n’est pas le cas, le message d’erreur suivant peut s’afficher : 

  **Sur le terminal :**

  ```
  An error occurred (ModelError) when calling the InvokeEndpoint operation: Received server error (503) from <users-sagemaker-endpoint> with message "{ "code": 503, "type": "InternalServerException", "message": "Prediction failed" } ".
  ```

  **Dans CloudWatch :**

  ```
  W-9001-model-stdout com.amazonaws.ml.mms.wlm.WorkerLifeCycle - AttributeError: 'NoneType' object has no attribute 'transform'
  ```    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/sagemaker/latest/dg/neo-troubleshooting-inference.html)
+ Assurez-vous que la variable d'`MMS_DEFAULT_RESPONSE_TIMEOUT`environnement est définie sur 500 ou une valeur supérieure lors de la création du modèle Amazon SageMaker AI ; sinon, le message d'erreur suivant pourrait s'afficher sur le terminal : 

  ```
  An error occurred (ModelError) when calling the InvokeEndpoint operation: Received server error (0) from <users-sagemaker-endpoint> with message "Your invocation timed out while waiting for a response from container model. Review the latency metrics for each container in Amazon CloudWatch, resolve the issue, and try again."
  ```

# Résolution des erreurs Ambarella
<a name="neo-troubleshooting-target-devices-ambarella"></a>

SageMaker Neo nécessite que les modèles soient empaquetés dans un fichier TAR compressé (`*.tar.gz`). Pour les périphériques Ambarella, des fichiers supplémentaires doivent être inclus dans le fichier TAR compressé avant de l’envoyer pour compilation. Incluez les fichiers suivants dans votre fichier TAR compressé si vous souhaitez compiler un modèle pour les cibles Ambarella avec SageMaker Neo :
+ Un modèle entraîné utilisant un framework soutenu par SageMaker Neo 
+ Un fichier de configuration JSON
+ Images d’étalonnage

Par exemple, le contenu de votre fichier TAR compressé doit ressembler à l’exemple suivant :

```
├──amba_config.json
├──calib_data
|    ├── data1
|    ├── data2
|    ├── .
|    ├── .
|    ├── .
|    └── data500
└──mobilenet_v1_1.0_0224_frozen.pb
```

Le répertoire est configuré comme suit :
+ `amba_config.json` : fichier de configuration
+ `calib_data` : dossier contenant des images d’étalonnage
+ `mobilenet_v1_1.0_0224_frozen.pb`: TensorFlow modèle enregistré sous forme de graphe figé

Pour plus d'informations sur les frameworks pris en charge par SageMaker Neo, consultez[Cadres pris en charge](neo-supported-devices-edge-frameworks.md).

## Configuration du fichier de configuration
<a name="neo-troubleshooting-target-devices-ambarella-config"></a>

Le fichier de configuration fournit les informations requises par la chaîne d’outils Ambarella pour compiler le modèle. Le fichier de configuration doit être enregistré en tant que fichier JSON et le nom du fichier doit se terminer par `*config.json`. Le tableau suivant illustre le contenu du fichier de configuration.


| Clé | Description | Exemple | 
| --- | --- | --- | 
| inputs | Dictionnaire mappant les couches d’entrée à l’attribut. | <pre>{inputs:{"data":{...},"data1":{...}}}</pre> | 
| « data » | Nom de la couche d’entrée. Remarque : « data » est un exemple du nom que vous pouvez utiliser pour étiqueter la couche d’entrée. | « data » | 
| shape | Décrit la forme de l’entrée du modèle. Cela suit les mêmes conventions que celles utilisées par SageMaker Neo. | « shape » : « 1,3,224,224" | 
| filepath | Chemin d’accès relatif du répertoire contenant des images d’étalonnage. Il peut s’agir de fichiers binaires ou images, JPG ou PNG par exemple. | « filepath » : « calib\$1data/ » | 
| colorformat | Format de couleur attendu par le modèle. Sera utilisé lors de la conversion d’images en fichiers binaires. Valeurs prises en charge : [RVB, BGR]. La valeur par défaut est RVB. | « format de couleur » : « RVB » | 
| mean | Valeur moyenne à soustraire de l’entrée. Peut être une valeur unique ou une liste de valeurs. Lorsque la moyenne est donnée sous forme de liste, le nombre d’entrées doit correspondre à la dimension de canal de l’entrée. | « moyenne » : 128.0 | 
| scale | Valeur d’échelle à utiliser pour normaliser l’entrée. Peut être une valeur unique ou une liste de valeurs. Lorsque l’échelle est donnée sous forme de liste, le nombre d’entrées doit correspondre à la dimension de canal de l’entrée. | « échelle » : 255.0 | 

Voici un exemple de fichier de configuration : 

```
{
    "inputs": {
        "data": {
                "shape": "1, 3, 224, 224",
                "filepath": "calib_data/",
                "colorformat": "RGB",
                "mean":[128,128,128],
                "scale":[128.0,128.0,128.0]
        }
    }
}
```

## Images d’étalonnage
<a name="neo-troubleshooting-target-devices-ambarella-calibration-images"></a>

Quantifiez votre modèle entraîné en fournissant des images d’étalonnage. La quantification de votre modèle améliore les performances du CVFlow moteur sur un système Ambarella sur puce (SoC). La chaîne d’outils Ambarella utilise les images d’étalonnage pour déterminer la quantification nécessaire de chaque couche du modèle afin d’obtenir des performances et une précision optimales. Chaque couche est quantifiée indépendamment de ses INT8 INT16 formats. Le modèle final comporte un mélange de INT16 couches INT8 et après quantification.

**Combien d’images devez-vous utiliser ?**

Nous vous recommandons d’inclure entre 100 et 200 images représentatives des types de scènes que le modèle est censé gérer. La durée de compilation du modèle augmente de façon linéaire jusqu’au nombre d’images d’étalonnage dans le fichier d’entrée.

**Quels sont les formats d’image recommandés ?**

Les images d’étalonnage peuvent se trouver à un format binaire brut ou des formats d’image tels que JPG et PNG.

Votre dossier d’étalonnage peut contenir un mélange d’images et de fichiers binaires. Si le dossier d’étalonnage contient à la fois des images et des fichiers binaires, la chaîne d’outils convertit d’abord les images en fichiers binaires. Une fois la conversion terminée, les fichiers binaires nouvellement générés sont utilisés conjointement avec les fichiers binaires initialement présents dans le dossier.

**Puis-je d’abord convertir les images au format binaire ?**

Oui. Vous pouvez convertir les images au format binaire avec des packages open-source tels que [OpenCV](https://opencv.org/) ou [PIL](https://python-pillow.org/). Recadrez et redimensionnez les images de sorte qu’elles correspondent à la couche d’entrée de votre modèle entraîné.



## Moyenne et échelle
<a name="neo-troubleshooting-target-devices-ambarella-mean-scale"></a>

Vous pouvez spécifier des options de prétraitement de moyenne et de mise à l’échelle dans la chaîne d’outils Amberalla. Ces opérations sont intégrées au réseau et sont appliquées pendant l’inférence sur chaque entrée. Ne fournissez pas de données traitées si vous spécifiez la moyenne ou l’échelle. Plus précisément, ne fournissez pas de données dont vous avez soustrait la moyenne ou auxquelles vous avez appliqué la mise à l’échelle.

## Vérifier votre journal de compilation
<a name="neo-troubleshooting-target-devices-ambarella-compilation"></a>

Pour plus d’informations sur la vérification du journal de compilation des appareils Ambarella, consultez [Vérifier votre journal de compilation](neo-troubleshooting-compilation.md#neo-troubleshooting-compilation-logs).