

Avis de fin de support : le 7 octobre 2026, AWS le support de. AWS IoT Greengrass Version 1 Après le 7 octobre 2026, vous ne pourrez plus accéder aux AWS IoT Greengrass V1 ressources. Pour plus d'informations, rendez-vous sur [Migrer depuis AWS IoT Greengrass Version 1](https://docs.aws.amazon.com/greengrass/v2/developerguide/migrate-from-v1.html).

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.

# Exécuter l'inférence de Machine Learning
<a name="ml-inference"></a>

Cette fonctionnalité est disponible pour AWS IoT Greengrass Core v1.6 ou version ultérieure.

Avec AWS IoT Greengrass, vous pouvez effectuer une inférence d'apprentissage automatique (ML) à la périphérie sur des données générées localement à l'aide de modèles conçus dans le cloud. Vous bénéficiez d'une faible latence et de coûts d'inférence locale réduits, tout en profitant des avantages de la puissance du cloud computing pour les modèles de formation et les traitements complexes.

Pour commencer à exécuter l'inférence locale, consultez [Comment configurer l'inférence d'apprentissage automatique à l'aide du AWS Management Console](ml-console.md).

## Comment fonctionne l'inférence AWS IoT Greengrass ML
<a name="how-ml-inference-works"></a>

Vous pouvez entraîner vos modèles d'inférence n'importe où, les déployer localement en tant que *ressources d'apprentissage automatique* dans un groupe Greengrass, puis y accéder à partir des fonctions Greengrass Lambda. Par exemple, vous pouvez créer et entraîner des modèles d'apprentissage profond en [SageMaker intelligence artificielle](https://console.aws.amazon.com/sagemaker) et les déployer dans votre noyau Greengrass. Vos fonctions Lambda peuvent ensuite utiliser les modèles locaux pour effectuer des inférences sur des appareils connectés et renvoyer de nouvelles données d'entraînement vers le cloud.

Le schéma suivant montre le flux de travail d'inférence AWS IoT Greengrass ML.

![\[Composants du flux de travail d'apprentissage automatique et du flux d'informations entre le périphérique principal, le AWS IoT Greengrass service et les modèles formés dans le cloud.\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/images/ml-inference/diagram-ml-overview.png)


AWS IoT Greengrass L'inférence ML simplifie chaque étape du flux de travail ML, notamment :
+ La création et le déploiement de prototypes d'infrastructure de Machine Learning.
+ L'accès aux modèles formés dans le cloud et leur déploiement dans les appareils Greengrass principaux.
+ Création d'applications d'inférence pouvant accéder à des accélérateurs matériels (tels que GPUs et FPGAs) en tant que ressources [locales](access-local-resources.md).

## Ressource de Machine Learning
<a name="ml-resources"></a>

Les ressources d'apprentissage automatique représentent des modèles d'inférence formés dans le cloud qui sont déployés sur un AWS IoT Greengrass cœur. Pour déployer des ressources de machine learning, vous devez d'abord les ajouter à un groupe Greengrass, puis vous définissez comment les fonctions Lambda du groupe peuvent y accéder. Lors du déploiement en groupe, AWS IoT Greengrass récupère les packages du modèle source depuis le cloud et les extrait dans des répertoires de l'espace de noms d'exécution Lambda. Les fonctions Greengrass Lambda utilisent ensuite les modèles déployés localement pour effectuer des inférences.

Pour mettre à jour un modèle déployé localement, commencez par mettre à jour le modèle source (dans le cloud) qui correspond à la ressource de Machine Learning, puis déployez le groupe. Pendant le déploiement, AWS IoT Greengrass vérifie si la source a fait l'objet de modifications. Si des modifications sont détectées, le modèle local est AWS IoT Greengrass mis à jour.

### Sources de modèles prises en charge
<a name="supported-model-sources"></a>

AWS IoT Greengrass prend en charge les sources du modèle SageMaker AI et Amazon S3 pour les ressources d'apprentissage automatique.

Les exigences suivantes s'appliquent aux sources de modèles :
+ Les compartiments S3 qui stockent les sources de votre SageMaker IA et du modèle Amazon S3 ne doivent pas être chiffrés à l'aide de SSE-C. Pour les buckets qui utilisent le chiffrement côté serveur, AWS IoT Greengrass ML Inference ne prend actuellement en charge que les options de chiffrement SSE-S3 ou SSE-KMS. Pour plus d'informations sur les options de chiffrement côté serveur, consultez la section [Protection des données à l'aide du chiffrement côté serveur dans](https://docs.aws.amazon.com/AmazonS3/latest/dev/serv-side-encryption.html) le guide de l'utilisateur d'*Amazon Simple Storage Service*.
+ Les noms des compartiments S3 qui stockent votre SageMaker IA et les sources du modèle Amazon S3 ne doivent pas inclure de points (`.`). Pour plus d'informations, consultez la règle concernant l'utilisation de compartiments de type hébergé virtuel avec SSL dans [Règles de dénomination des compartiments du guide de l'utilisateur](https://docs.aws.amazon.com/AmazonS3/latest/dev/BucketRestrictions.html#bucketnamingrules) d'*Amazon Simple Storage Service*.
+ [Un Région AWS support au niveau des services doit être disponible à la fois pour l'IA [AWS IoT Greengrass](https://docs.aws.amazon.com/general/latest/gr/greengrass.html)et SageMaker pour l'IA.](https://docs.aws.amazon.com/general/latest/gr/sagemaker.html) Actuellement, AWS IoT Greengrass prend en charge les modèles d' SageMaker IA dans les régions suivantes :
  + USA Est (Ohio)
  + USA Est (Virginie du Nord)
  + USA Ouest (Oregon)
  + Asie-Pacifique (Mumbai)
  + Asie-Pacifique (Séoul)
  + Asie-Pacifique (Singapour)
  + Asie-Pacifique (Sydney)
  + Asie-Pacifique (Tokyo)
  + Europe (Francfort)
  + Europe (Irlande)
  + Europe (Londres)
+ AWS IoT Greengrass doit avoir `read` l'autorisation d'accéder à la source du modèle, comme décrit dans les sections suivantes.

**SageMaker AI**  
AWS IoT Greengrass prend en charge les modèles enregistrés en tant que tâches de formation à l' SageMaker IA. SageMaker L'IA est un service de machine learning entièrement géré que vous pouvez utiliser pour créer et entraîner des modèles à l'aide d'algorithmes intégrés ou personnalisés. Pour plus d'informations, voir [Qu'est-ce que SageMaker l'IA ?](https://docs.aws.amazon.com/sagemaker/latest/dg/whatis.html) dans le *Guide du développeur d'SageMaker IA*.  
Si vous avez configuré votre environnement d' SageMaker IA en [créant un bucket](https://docs.aws.amazon.com/sagemaker/latest/dg/gs-config-permissions.html) dont le nom contient`sagemaker`, vous AWS IoT Greengrass disposez des autorisations suffisantes pour accéder à vos tâches de formation à l' SageMaker IA. La stratégie gérée `AWSGreengrassResourceAccessRolePolicy` autorise l'accès aux compartiments dont le nom contient la chaîne `sagemaker`. Cette stratégie est attachée au [rôle de service Greengrass](service-role.md).  
Dans le cas contraire, vous devez AWS IoT Greengrass `read` autoriser le bucket dans lequel votre tâche de formation est stockée. Pour ce faire, intégrez la stratégie en ligne suivante dans le rôle de service. Vous pouvez répertorier plusieurs compartiments ARNs.    
****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::amzn-s3-demo-bucket"
            ]
        }
    ]
}
```

**Amazon S3**  
AWS IoT Greengrass prend en charge les modèles stockés dans Amazon S3 sous forme `tar.gz` de `.zip` fichiers.  
Pour permettre AWS IoT Greengrass l'accès aux modèles stockés dans des compartiments Amazon S3, vous devez AWS IoT Greengrass `read` autoriser l'accès aux compartiments en effectuant l'**une des opérations** suivantes :  
+ Stockez votre modèle dans un compartiment dont le nom contient `greengrass`.

  La stratégie gérée `AWSGreengrassResourceAccessRolePolicy` autorise l'accès aux compartiments dont le nom contient la chaîne `greengrass`. Cette stratégie est attachée au [rôle de service Greengrass](service-role.md).

   
+ Intégrez une stratégie en ligne dans le rôle de service Greengrass.

  Si le nom de votre compartiment ne contient pas `greengrass`, ajoutez la stratégie en ligne suivante au rôle de service. Vous pouvez répertorier plusieurs compartiments ARNs.

------
#### [ JSON ]

****  

  ```
  {
      "Version":"2012-10-17",		 	 	 
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "s3:GetObject"
              ],
              "Resource": [
                  "arn:aws:s3:::amzn-s3-demo-bucket"
              ]
          }
      ]
  }
  ```

------

  Pour plus d'informations, consultez la section [Intégration de politiques intégrées](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html#embed-inline-policy-console) dans le guide de l'utilisateur *IAM*.

## Exigences
<a name="ml-requirements"></a>

Les exigences suivantes s'appliquent pour la création et l'utilisation des ressources de Machine Learning :
+ Vous devez utiliser AWS IoT Greengrass Core v1.6 ou version ultérieure.
+ Les fonctions Lambda définies par l'utilisateur peuvent `read` effectuer des `read and write` opérations sur la ressource. Les autorisations pour d'autres opérations ne sont pas disponibles. Le mode de conteneurisation des fonctions Lambda affiliées détermine la manière dont vous définissez les autorisations d'accès. Pour de plus amples informations, veuillez consulter [Accédez aux ressources d'apprentissage automatique à partir des fonctions Lambda](access-ml-resources.md).
+ Vous devez fournir le chemin d'accès complet de la ressource sur le système d'exploitation de l'appareil principal.
+ Un ID ou un nom de ressource doit comporter 128 caractères au maximum et utiliser le modèle `[a-zA-Z0-9:_-]+`.

## Environnements d'exécution et bibliothèques pour l'inférence ML
<a name="ml-libraries"></a>

Vous pouvez utiliser les environnements d'exécution et bibliothèques ML suivants avec AWS IoT Greengrass.
+  [Runtime d'apprentissage profond Amazon SageMaker Neo](#dlc-optimize-info) 
+ Apache MXNet
+ TensorFlow

Ces environnements d'exécution et bibliothèques peuvent être installés sur les plateformes NVIDIA Jetson TX2, Intel Atom et Raspberry Pi. Pour obtenir des informations sur le téléchargement, consultez [Bibliothèques et environnements d'exécution de machine learning pris en charge](what-is-gg.md#ml-runtimes-libs). Vous pouvez les installer directement sur votre appareil principal (noyau).

Assurez-vous de lire les informations de compatibilités et les limitations suivantes.

### SageMaker Runtime d'apprentissage profond AI Neo
<a name="dlc-optimize-info"></a>

 Vous pouvez utiliser le moteur d'apprentissage profond SageMaker AI Neo pour effectuer des inférences avec des modèles d'apprentissage automatique optimisés sur vos AWS IoT Greengrass appareils. Ces modèles sont optimisés à l'aide du compilateur d'apprentissage profond SageMaker AI Neo pour améliorer les vitesses de prédiction des inférences par apprentissage automatique. Pour plus d'informations sur l'optimisation des modèles dans l' SageMaker IA, consultez la [documentation SageMaker AI Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html). 

**Note**  
 Actuellement, vous pouvez optimiser les modèles d'apprentissage automatique à l'aide du compilateur d'apprentissage profond Neo uniquement dans certaines régions Amazon Web Services. Cependant, vous pouvez utiliser le moteur d'apprentissage profond Neo avec des modèles optimisés dans chaque Région AWS cas où le AWS IoT Greengrass noyau est pris en charge. Pour plus d'informations, consultez [Configuration de l'inférence Machine Learning optimisée](ml-dlc-console.md). 

### MXNet gestion des versions
<a name="mxnet-version-compatibility"></a>

Apache MXNet ne garantit pas actuellement la compatibilité ascendante, de sorte que les modèles que vous entraînez à l'aide de versions ultérieures du framework risquent de ne pas fonctionner correctement dans les versions antérieures du framework. Pour éviter les conflits entre les étapes de formation des modèles et de mise à disposition des modèles, et pour fournir une end-to-end expérience cohérente, utilisez la même version du MXNet framework dans les deux étapes.

### MXNet sur Raspberry Pi
<a name="mxnet-engine-rpi"></a>

Les fonctions Greengrass Lambda qui accèdent aux MXNet modèles locaux doivent définir la variable d'environnement suivante :

```
MXNET_ENGINE_TYPE=NativeEngine
```

Vous pouvez définir la variable d'environnement dans le code de la fonction ou l'ajouter à la configuration spécifique au groupe de la fonction. Cette [étape](ml-console.md#ml-console-config-lambda) présente un exemple qui ajoute la variable d'environnement en tant que paramètre de configuration.

**Note**  
Pour une utilisation générale du MXNet framework, telle que l'exécution d'un exemple de code tiers, la variable d'environnement doit être configurée sur le Raspberry Pi.

### TensorFlow limites de service de modèles sur le Raspberry Pi
<a name="tensorflow-limitations"></a>

Les recommandations suivantes pour améliorer les résultats d'inférence sont basées sur nos tests avec les bibliothèques Arm TensorFlow 32 bits sur la plate-forme Raspberry Pi. Ces recommandations sont destinées aux utilisateurs avancés pour référence uniquement, sans garantie d'aucune sorte.
+ Les modèles formés à l'aide du format [Checkpoint](https://www.tensorflow.org/guide/checkpoint) doivent être « bloqués » dans le format tampon du protocole avant d'être utilisés. Pour un exemple, consultez la [bibliothèque de modèles de classification d'images TensorFlow -Slim](https://github.com/tensorflow/models/tree/master/research/slim).
+ N'utilisez pas les bibliothèques TF-Estimator et TF-Slim dans le code de formation ou d'inférence. À la place, utilisez le modèle de chargement de fichier `.pb` indiqué dans l'exemple suivant.

  ```
  graph = tf.Graph() 
  graph_def = tf.GraphDef()
  graph_def.ParseFromString(pb_file.read()) 
  with graph.as_default():
    tf.import_graph_def(graph_def)
  ```

**Note**  
Pour plus d'informations sur les plateformes prises en charge pour TensorFlow, consultez la section [Installation TensorFlow](https://www.tensorflow.org/install/#installing_from_sources) dans la TensorFlow documentation.

# Accédez aux ressources d'apprentissage automatique à partir des fonctions Lambda
<a name="access-ml-resources"></a>

Les fonctions Lambda définies par l'utilisateur peuvent accéder aux ressources d'apprentissage automatique pour exécuter une inférence locale sur le cœur. AWS IoT Greengrass Une ressource de Machine Learning se compose du modèle formé et d'autres artefacts qui sont téléchargés sur l'appareil principal (noyau).

Pour permettre à une fonction Lambda d'accéder à une ressource d'apprentissage automatique sur le cœur, vous devez associer la ressource à la fonction Lambda et définir des autorisations d'accès. Le [mode de conteneurisation](lambda-group-config.md#lambda-function-containerization) de la fonction Lambda affiliée (ou *attachée*) détermine la manière dont vous procédez.

## Autorisations d'accès pour les ressources de machine learning
<a name="ml-resource-permissions"></a>

À partir de AWS IoT Greengrass Core v1.10.0, vous pouvez définir le propriétaire d'une ressource pour une ressource d'apprentissage automatique. Le propriétaire de la ressource représente le groupe de systèmes d'exploitation et les autorisations AWS IoT Greengrass utilisés pour télécharger les artefacts de ressources. Si aucun propriétaire de ressource n'est défini, les artefacts de ressource téléchargés ne sont accessibles que pour l’utilisateur racine (root).
+ Si des fonctions Lambda non conteneurisées accèdent à une ressource d'apprentissage automatique, vous devez définir un propriétaire de ressource car le conteneur ne permet aucun contrôle d'autorisation. Les fonctions Lambda non conteneurisées peuvent hériter des autorisations du propriétaire de la ressource et les utiliser pour accéder à la ressource.

   
+ Si seules les fonctions Lambda conteneurisées accèdent à la ressource, nous vous recommandons d'utiliser des autorisations au niveau des fonctions au lieu de définir un propriétaire de ressource.

   

### Propriétés du propriétaire de la ressource
<a name="ml-resource-owner"></a>

Un propriétaire de ressource spécifie un propriétaire de groupe et des autorisations de propriétaire de groupe.

  
**Propriétaire du groupe**. ID (GID) d'un groupe d'OS Linux existant sur l'appareil principal (noyau). Les autorisations du groupe sont ajoutées au processus Lambda. Plus précisément, le GID est ajouté au groupe supplémentaire IDs de la fonction Lambda.  
Si une fonction Lambda du groupe Greengrass est configurée pour s'[exécuter dans le même groupe de système d'exploitation que](lambda-group-config.md#lambda-access-identity) le propriétaire de la ressource d'une ressource d'apprentissage automatique, la ressource doit être attachée à la fonction Lambda. Dans le cas contraire, le déploiement échoue car cette configuration donne des autorisations implicites que la fonction Lambda peut utiliser pour accéder à la ressource sans AWS IoT Greengrass autorisation. La vérification de validation du déploiement est ignorée si la fonction Lambda s'exécute en tant que root (UID=0).  
Nous vous recommandons d'utiliser un groupe de systèmes d'exploitation qui n'est pas utilisé par d'autres ressources, fonctions Lambda ou fichiers du noyau de Greengrass. L'utilisation d'un groupe de systèmes d'exploitation partagé donne aux fonctions Lambda associées des autorisations d'accès supérieures à celles dont elles ont besoin. Si vous utilisez un groupe de systèmes d'exploitation partagé, une fonction Lambda associée doit également être attachée à toutes les ressources d'apprentissage automatique qui utilisent le groupe de systèmes d'exploitation partagé. Sinon, le déploiement échoue.

  
**Autorisations du propriétaire du groupe**. L'autorisation de lecture seule ou de lecture et d'écriture à ajouter au processus Lambda.  
Les fonctions Lambda non conteneurisées doivent hériter de ces autorisations d'accès à la ressource. Les fonctions Lambda conteneurisées peuvent hériter de ces autorisations au niveau des ressources ou définir des autorisations au niveau des fonctions. Si elles définissent des autorisations de niveau fonction, ces autorisations doivent être identiques ou plus restrictives que les autorisations de niveau ressource.

Le tableau suivant présente les configurations d'autorisation d'accès prises en charge.

------
#### [ GGC v1.10 or later ]


| Propriété | Si seules les fonctions Lambda conteneurisées accèdent à la ressource | Si des fonctions Lambda non conteneurisées accèdent à la ressource | 
| --- |--- |--- |
| **Propriétés de niveau fonction** | 
| --- |
| Autorisations (lecture/écriture) |  Obligatoires, sauf si la ressource définit un propriétaire de ressource. Si un propriétaire de ressource est défini, les autorisations de niveau fonction doivent être identiques ou plus restrictives que les autorisations du propriétaire de la ressource. Si seules les fonctions Lambda conteneurisées accèdent à la ressource, nous vous recommandons de ne pas définir de propriétaire de ressource.  |  **Fonctions Lambda non conteneurisées :** Non pris en charge. Les fonctions Lambda non conteneurisées doivent hériter des autorisations au niveau des ressources. **Fonctions Lambda conteneurisées :** Facultatives, mais doivent être identiques ou plus restrictives que les autorisations de niveau ressource. | 
| **Propriétés de niveau ressource** | 
| --- |
| Propriétaire de ressource | Facultatif (non recommandé). | Obligatoire. | 
| Autorisations (lecture/écriture) | Facultatif (non recommandé). | Obligatoire. | 

------
#### [ GGC v1.9 or earlier ]


| Propriété | Si seules les fonctions Lambda conteneurisées accèdent à la ressource | Si des fonctions Lambda non conteneurisées accèdent à la ressource | 
| --- |--- |--- |
| **Propriétés de niveau fonction** | 
| --- |
| Autorisations (lecture/écriture) |  Obligatoire.  | Non pris en charge. | 
| **Propriétés de niveau ressource** | 
| --- |
| Propriétaire de ressource | Non pris en charge. | Non pris en charge. | 
| Autorisations (lecture/écriture) | Non pris en charge. | Non pris en charge. | 

------

**Note**  
Lorsque vous utilisez l' AWS IoT Greengrass API pour configurer des fonctions et des ressources Lambda, la `ResourceId` propriété au niveau de la fonction est également requise. La `ResourceId` propriété associe la ressource d'apprentissage automatique à la fonction Lambda.

## Définition des autorisations d'accès pour les fonctions Lambda (console)
<a name="ml-resource-permissions-console"></a>

Dans la AWS IoT console, vous définissez les autorisations d'accès lorsque vous configurez une ressource de machine learning ou que vous en associez une à une fonction Lambda.

**Fonctions Lambda conteneurisées**  
Si seules des fonctions Lambda conteneurisées sont associées à la ressource d'apprentissage automatique :  
+ Choisissez **Aucun groupe système** comme propriétaire de la ressource d'apprentissage automatique. Il s'agit du paramètre recommandé lorsque seules les fonctions Lambda conteneurisées accèdent à la ressource d'apprentissage automatique. Dans le cas contraire, vous pourriez accorder aux fonctions Lambda associées des autorisations d'accès supérieures à celles dont elles ont besoin.

   
 

Fonctions **Lambda non conteneurisées** (nécessite GGC v1.10 ou version ultérieure)  
Si des fonctions Lambda non conteneurisées sont associées à la ressource d'apprentissage automatique :  
+ Spécifiez l'**ID de groupe système (GID)** à utiliser en tant que propriétaire de la ressource d'apprentissage automatique. Choisissez **Spécifier le groupe système et les autorisations**, puis entrez le GID. Vous pouvez utiliser la `getent group` commande sur votre appareil principal pour rechercher l'ID d'un groupe de systèmes.

   
+ Choisissez Accès **en lecture seule ou Accès** en **lecture et écriture** pour les autorisations du **groupe système**.

## Définition des autorisations d'accès pour les fonctions Lambda (API)
<a name="ml-resource-permissions-api"></a>

Dans l' AWS IoT Greengrass API, vous définissez les autorisations d'accès aux ressources de machine learning dans la `ResourceAccessPolicy` propriété de la fonction Lambda ou dans la `OwnerSetting` propriété de la ressource.

**Fonctions Lambda conteneurisées**  
Si seules des fonctions Lambda conteneurisées sont associées à la ressource d'apprentissage automatique :  
+ Pour les fonctions Lambda conteneurisées, définissez les autorisations d'accès dans la `Permission` propriété de la propriété. `ResourceAccessPolicies` Par exemple :

  ```
  "Functions": [
      {
          "Id": "my-containerized-function",
          "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:function-name:alias-or-version", 
          "FunctionConfiguration": {
              "Environment": {
                  "ResourceAccessPolicies": [
                      { 
                          "ResourceId": "my-resource-id",
                          "Permission": "ro-or-rw"
                      }
                  ]
              }, 
              "MemorySize": 512, 
              "Pinned": true, 
              "Timeout": 5
          }
      }
  ]
  ```
+ Pour les ressources de Machine Learning, omettez la propriété `OwnerSetting`. Par exemple :

  ```
  "Resources": [
      {
          "Id": "my-resource-id",
          "Name": "my-resource-name",
          "ResourceDataContainer": {
              "S3MachineLearningModelResourceData": {
                  "DestinationPath": "/local-destination-path",
                  "S3Uri": "s3://uri-to-resource-package"
              }
          }
      }
  ]
  ```

  Il s'agit de la configuration recommandée lorsque seules les fonctions Lambda conteneurisées accèdent à la ressource d'apprentissage automatique. Dans le cas contraire, vous pourriez accorder aux fonctions Lambda associées des autorisations d'accès supérieures à celles dont elles ont besoin.
 

Fonctions **Lambda non conteneurisées** (nécessite GGC v1.10 ou version ultérieure)  
Si des fonctions Lambda non conteneurisées sont associées à la ressource d'apprentissage automatique :  
+ Pour les fonctions Lambda non conteneurisées, omettez la propriété dans. `Permission` `ResourceAccessPolicies` Cette configuration est requise et permet à la fonction d'hériter de l'autorisation de niveau ressource. Par exemple :

  ```
  "Functions": [
      {
          "Id": "my-non-containerized-function",
          "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:function-name:alias-or-version", 
          "FunctionConfiguration": {
              "Environment": {
                  "Execution": {
                      "IsolationMode": "NoContainer",
                  },            
                  "ResourceAccessPolicies": [
                      { 
                          "ResourceId": "my-resource-id"
                      }
                  ]
              }, 
              "Pinned": true, 
              "Timeout": 5
          }
      }
  ]
  ```
+ Pour les fonctions Lambda conteneurisées qui accèdent également à la ressource d'apprentissage automatique, omettez la `Permission` propriété `ResourceAccessPolicies` ou définissez une autorisation identique ou plus restrictive que l'autorisation au niveau de la ressource. Par exemple :

  ```
  "Functions": [
      {
          "Id": "my-containerized-function",
          "FunctionArn": "arn:aws:lambda:us-west-2:123456789012:function:function-name:alias-or-version", 
          "FunctionConfiguration": {
              "Environment": {
                  "ResourceAccessPolicies": [
                      { 
                          "ResourceId": "my-resource-id",
                          "Permission": "ro-or-rw" // Optional, but cannot exceed the GroupPermission defined for the resource.
                      }
                  ]
              }, 
              "MemorySize": 512, 
              "Pinned": true, 
              "Timeout": 5
          }
      }
  ]
  ```
+ Pour les ressources de Machine Learning, définissez la propriété `OwnerSetting`, ainsi que les propriétés enfants `GroupOwner` et `GroupPermission`. Par exemple :

  ```
  "Resources": [
      {
          "Id": "my-resource-id",
          "Name": "my-resource-name",
          "ResourceDataContainer": {
              "S3MachineLearningModelResourceData": {
                  "DestinationPath": "/local-destination-path",
                  "S3Uri": "s3://uri-to-resource-package",
                  "OwnerSetting": { 
                      "GroupOwner": "os-group-id",
                      "GroupPermission": "ro-or-rw"
                  }
              }
          }
      }
  ]
  ```

## Accès aux ressources d'apprentissage automatique à partir du code de fonction Lambda
<a name="access-resource-function-code"></a>

Les fonctions Lambda définies par l'utilisateur utilisent des interfaces de système d'exploitation spécifiques à la plate-forme pour accéder aux ressources d'apprentissage automatique sur un périphérique principal.

------
#### [ GGC v1.10 or later ]

Pour les fonctions Lambda conteneurisées, la ressource est montée dans le conteneur Greengrass et disponible sur le chemin de destination local défini pour la ressource. Pour les fonctions Lambda non conteneurisées, la ressource est liée symboliquement à un répertoire de travail spécifique à Lambda et transmise à la variable d'environnement dans le processus Lambda. `AWS_GG_RESOURCE_PREFIX`

Pour obtenir le chemin d'accès aux artefacts téléchargés d'une ressource d'apprentissage automatique, les fonctions Lambda ajoutent la variable d'`AWS_GG_RESOURCE_PREFIX`environnement au chemin de destination local défini pour la ressource. Pour les fonctions Lambda conteneurisées, la valeur renvoyée est une barre oblique unique (). `/`

```
resourcePath = os.getenv("AWS_GG_RESOURCE_PREFIX") + "/destination-path"
with open(resourcePath, 'r') as f:
    # load_model(f)
```

------
#### [ GGC v1.9 or earlier ]

Les artefacts téléchargés d'une ressource de Machine Learning se trouvent dans le chemin de destination local défini pour la ressource. Seules les fonctions Lambda conteneurisées peuvent accéder aux ressources d'apprentissage automatique dans AWS IoT Greengrass Core v1.9 et versions antérieures.

```
resourcePath = "/local-destination-path"
with open(resourcePath, 'r') as f:
    # load_model(f)
```

------

Votre implémentation du chargement du modèle dépend de votre bibliothèque de Machine Learning.

## Résolution des problèmes
<a name="access-ml-resources-troubleshooting"></a>

Utilisez les informations suivantes pour résoudre les problèmes liés à l'accès aux ressources de Machine Learning.

**Topics**
+ [MLModelPropriétaire non valide - GroupOwnerSetting est fourni dans la ressource du modèle ML, mais GroupOwner n' GroupPermission est pas présent](#nocontainer-lambda-invalid-ml-model-owner)
+ [NoContainer La fonction ne peut pas configurer les autorisations lors de l'attachement de ressources Machine Learning. <function-arn>fait référence à une ressource d'apprentissage automatique <resource-id>avec autorisation <ro/rw> dans la politique d'accès aux ressources.](#nocontainer-lambda-invalid-resource-access-policy)
+ [<function-arn>La fonction fait référence à une ressource Machine Learning dont l'<resource-id>autorisation est manquante à la fois dans la ressource ResourceAccessPolicy et dans la ressource OwnerSetting.](#nocontainer-lambda-missing-access-permission)
+ [<function-arn>La fonction fait référence à la ressource Machine Learning <resource-id>avec l'autorisation \$1 "rw \$1 », tandis que le paramètre du propriétaire de la ressource autorise GroupPermission uniquement \$1 "ro \$1 ».](#container-lambda-invalid-rw-permissions)
+ [NoContainer La fonction <function-arn>fait référence aux ressources du chemin de destination imbriqué.](#nocontainer-lambda-nested-destination-path)
+ [La fonction Lambda <function-arn> accède à la ressource <resource-id> en partageant le même identifiant de propriétaire de groupe](#lambda-runas-and-resource-owner)

### MLModelPropriétaire non valide - GroupOwnerSetting est fourni dans la ressource du modèle ML, mais GroupOwner n' GroupPermission est pas présent
<a name="nocontainer-lambda-invalid-ml-model-owner"></a>

**Solution :** vous recevez cette erreur si une ressource d'apprentissage automatique contient l'[ResourceDownloadOwnerSetting](https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-resourcedownloadownersetting.html)objet mais que la `GroupPermission` propriété `GroupOwner` ou la propriété requise n'est pas définie. Pour résoudre ce problème, définissez la propriété manquante.

 

### NoContainer La fonction ne peut pas configurer les autorisations lors de l'attachement de ressources Machine Learning. <function-arn>fait référence à une ressource d'apprentissage automatique <resource-id>avec autorisation <ro/rw> dans la politique d'accès aux ressources.
<a name="nocontainer-lambda-invalid-resource-access-policy"></a>

**Solution :** vous recevez cette erreur si une fonction Lambda non conteneurisée spécifie des autorisations au niveau de la fonction pour une ressource de machine learning. Les fonctions non conteneurisées doivent hériter des autorisations du propriétaire de la ressource définies sur la ressource de Machine Learning. Pour résoudre ce problème, choisissez d'[hériter des autorisations du propriétaire des ressources](#non-container-config-console) (console) ou de [supprimer les autorisations de la politique d'accès aux ressources (API) de la fonction Lambda](#non-container-config-api).

 

### <function-arn>La fonction fait référence à une ressource Machine Learning dont l'<resource-id>autorisation est manquante à la fois dans la ressource ResourceAccessPolicy et dans la ressource OwnerSetting.
<a name="nocontainer-lambda-missing-access-permission"></a>

**Solution :** vous recevez cette erreur si les autorisations d'accès à la ressource d'apprentissage automatique ne sont pas configurées pour la fonction Lambda attachée ou pour la ressource. Pour résoudre ce problème, configurez les autorisations dans la [ResourceAccessPolicy](https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-resourceaccesspolicy.html)propriété de la fonction Lambda ou dans la [OwnerSetting](https://docs.aws.amazon.com/greengrass/v1/apireference/definitions-ownersetting.html)propriété de la ressource.

 

### <function-arn>La fonction fait référence à la ressource Machine Learning <resource-id>avec l'autorisation \$1 "rw \$1 », tandis que le paramètre du propriétaire de la ressource autorise GroupPermission uniquement \$1 "ro \$1 ».
<a name="container-lambda-invalid-rw-permissions"></a>

**Solution :** vous recevez cette erreur si les autorisations d'accès définies pour la fonction Lambda associée dépassent les autorisations du propriétaire de la ressource définies pour la ressource d'apprentissage automatique. Pour résoudre ce problème, définissez des autorisations plus restrictives pour la fonction Lambda ou des autorisations moins restrictives pour le propriétaire de la ressource.

 

### NoContainer La fonction <function-arn>fait référence aux ressources du chemin de destination imbriqué.
<a name="nocontainer-lambda-nested-destination-path"></a>

**Solution :** vous recevez cette erreur si plusieurs ressources de machine learning associées à une fonction Lambda non conteneurisée utilisent le même chemin de destination ou un chemin de destination imbriqué. Pour résoudre ce problème, spécifiez des chemins de destination distincts pour les ressources.

 

### La fonction Lambda <function-arn> accède à la ressource <resource-id> en partageant le même identifiant de propriétaire de groupe
<a name="lambda-runas-and-resource-owner"></a>

**Solution :** vous recevez cette erreur `runtime.log` si le même groupe de système d'exploitation est spécifié comme identité [Run as de la fonction Lambda et [propriétaire de la ressource pour une ressource](#ml-resource-owner) d'apprentissage automatique, mais que](lambda-group-config.md#lambda-access-identity) la ressource n'est pas attachée à la fonction Lambda. Cette configuration donne à la fonction Lambda des autorisations implicites qu'elle peut utiliser pour accéder à la ressource sans AWS IoT Greengrass autorisation.

Pour résoudre ce problème, utilisez un autre groupe de systèmes d'exploitation pour l'une des propriétés ou associez la ressource d'apprentissage automatique à la fonction Lambda.

## Consultez aussi
<a name="access-ml-resources-see-also"></a>
+ [Exécuter l'inférence de Machine Learning](ml-inference.md)
+ [Comment configurer l'inférence d'apprentissage automatique à l'aide du AWS Management Console](ml-console.md)
+ [Comment configurer une inférence d'apprentissage automatique optimisée à l'aide du AWS Management Console](ml-dlc-console.md)
+ [AWS IoT Greengrass Version 1 API Reference](https://docs.aws.amazon.com/greengrass/v1/apireference/api-doc.html)

# Comment configurer l'inférence d'apprentissage automatique à l'aide du AWS Management Console
<a name="ml-console"></a>

Pour suivre les étapes de ce didacticiel, vous devez disposer de AWS IoT Greengrass Core v1.10 ou d'une version ultérieure.

Vous pouvez exécuter l'inférence Machine Learning (ML) localement sur un appareil principal Greengrass (core) à l'aide des données provenant d'appareils connectés. Pour en savoir plus, notamment sur les exigences et contraintes, consultez la page [Exécuter l'inférence de Machine Learning](ml-inference.md).

Ce didacticiel explique comment utiliser le AWS Management Console pour configurer un groupe Greengrass afin d'exécuter une application d'inférence Lambda qui reconnaît les images d'une caméra localement, sans envoyer de données vers le cloud. L'application d'inférence accède au module de caméra d'un Raspberry Pi et exécute l'inférence en utilisant le modèle open source. [SqueezeNet](https://github.com/DeepScale/SqueezeNet)

Le didacticiel contient les étapes détaillées suivantes :

1. [Configurer le Raspberry Pi](#config-raspberry-pi)

1. [Installez le MXNet framework](#install-mxnet)

1. [Création d’un package de modèle](#package-ml-model)

1. [Création et publication d'une fonction Lambda](#ml-console-create-lambda)

1. [Ajoutez la fonction Lambda au groupe](#ml-console-config-lambda)

1. [Ajouter des ressources au groupe](#ml-console-add-resources)

1. [Ajouter un abonnement au groupe](#ml-console-add-subscription)

1. [Déployer le groupe](#ml-console-deploy-group)

1. [Tester l'application](#ml-console-test-app)

## Conditions préalables
<a name="ml-inference-prerequisites"></a>

Pour suivre ce didacticiel, vous devez disposer des éléments suivants :
+ Raspberry Pi 4 modèle B ou Raspberry Pi 3 modèle B/B\$1, installé et configuré pour être utilisé avec. AWS IoT Greengrass Pour configurer votre Raspberry Pi avec AWS IoT Greengrass, exécutez le script de [configuration de l'appareil Greengrass](quick-start.md) ou assurez-vous d'avoir terminé le [Module 1](https://docs.aws.amazon.com/greengrass/latest/developerguide/module1.html) et le [Module 2](https://docs.aws.amazon.com/greengrass/latest/developerguide/module2.html) de [Commencer avec AWS IoT Greengrass](gg-gs.md).
**Note**  
Le Raspberry Pi peut nécessiter une [alimentation](https://www.raspberrypi.org/documentation/hardware/raspberrypi/power/) de 2,5 A pour exécuter les frameworks d'apprentissage profond généralement utilisés pour la classification d'images. Une alimentation d'une valeur nominale inférieure peut provoquer le redémarrage de l'appareil.
+ [Module caméra V2 du Raspberry Pi - 8 mégapixels, 1080p](https://www.amazon.com/Raspberry-Pi-Camera-Module-Megapixel/dp/B01ER2SKFS). Pour plus d'informations sur la configuration de la caméra, consultez la section [Connexion de la caméra](https://www.raspberrypi.org/documentation/usage/camera/) dans la documentation du Raspberry Pi. 
+ Un groupe Greengrass et un service principal Greengrass. Pour plus d'informations sur la création d'un groupe ou d'un noyau Greengrass, consultez. [Commencer avec AWS IoT Greengrass](gg-gs.md)

**Note**  
Ce didacticiel utilise un Raspberry Pi, mais AWS IoT Greengrass prend en charge d'autres plateformes, telles que [Intel Atom](#atom-lambda-config) et [NVIDIA Jetson TX2](#jetson-lambda-config). Dans l'exemple de Jetson TX2, vous pouvez utiliser des images statiques au lieu d'images diffusées par un appareil photo. Si vous utilisez l' TX2 exemple Jetson, vous devrez peut-être installer Python 3.6 au lieu de Python 3.7. Pour plus d'informations sur la configuration de votre appareil afin que vous puissiez installer le logiciel AWS IoT Greengrass Core, consultez[Configuration d'autres appareils](setup-filter.other.md).  
Pour les plateformes tierces qui AWS IoT Greengrass ne le prennent pas en charge, vous devez exécuter votre fonction Lambda en mode non conteneurisé. Pour fonctionner en mode non conteneurisé, vous devez exécuter votre fonction Lambda en tant qu'utilisateur root. Pour plus d’informations, consultez [Considérations à prendre en compte lors du choix de la conteneurisation des fonctions Lambda](lambda-group-config.md#lambda-containerization-considerations) et [Définition de l'identité d'accès par défaut pour les fonctions Lambda dans un groupe](lambda-group-config.md#lambda-access-identity-groupsettings).

## Étape 1 : Configurer le Raspberry Pi
<a name="config-raspberry-pi"></a>

Au cours de cette étape, installez les mises à jour du système d'exploitation Raspbian, installez le logiciel du module caméra et les dépendances Python, et activez l'interface de la caméra.

Dans la fenêtre de terminal de votre Raspberry Pi, exécutez les commandes suivantes :

1. Installez les mises à jour sur Raspbian.

   ```
   sudo apt-get update
   sudo apt-get dist-upgrade
   ```

1. <a name="install-picamera-step"></a>Installez l'interface `picamera` pour le module caméra, ainsi que les autres bibliothèques Python requises pour ce didacticiel.

   ```
   sudo apt-get install -y python3-dev python3-setuptools python3-pip python3-picamera
   ```

   Valider l'installation :
   + Assurez-vous que votre installation Python 3.7 inclut pip.

     ```
     python3 -m pip
     ```

     Si pip n'est pas installé, téléchargez-le à partir du [site web pip](https://pip.pypa.io/en/stable/installing/), puis exécutez la commande suivante.

     ```
     python3 get-pip.py
     ```
   + Assurez-vous que votre Python est en version 3.7 ou supérieure.

     ```
     python3 --version
     ```

     Si la sortie mentionne une version antérieure, exécutez la commande suivante.

     ```
     sudo apt-get install -y python3.7-dev
     ```
   + Assurez-vous que Setuptools et Picamera sont installés correctement.

     ```
     sudo -u ggc_user bash -c 'python3 -c "import setuptools"'
     sudo -u ggc_user bash -c 'python3 -c "import picamera"'
     ```

     Si la sortie ne contient pas d'erreurs, la validation a abouti.
**Note**  
Si l'exécutable Python installé sur votre appareil est `python3.7`, utilisez `python3.7` plutôt que `python3` pour les commandes de ce didacticiel. Assurez-vous que votre installation pip correspond à la version correcte (`python3.7` ou `python3`) pour éviter les erreurs de dépendance.

1. Redémarrez l'appareil Raspberry Pi.

   ```
   sudo reboot
   ```

1. Ouvrez l'outil de configuration du Raspberry Pi.

   ```
   sudo raspi-config
   ```

1. Utilisez les touches flèches pour ouvrir les **Options d'interface** et activer l'interface de la caméra. Si vous y êtes invité, autorisez le redémarrage de l'appareil.

1. Utilisez la commande suivante pour tester la configuration de la caméra.

   ```
   raspistill -v -o test.jpg
   ```

   Elle ouvre une fenêtre d'aperçu sur le Raspberry Pi, enregistre une image nommée `test.jpg` dans votre répertoire actuel et affiche des informations sur la caméra dans la fenêtre de terminal du Raspberry Pi.

## Étape 2 : Installation du MXNet framework
<a name="install-mxnet"></a>

Dans cette étape, installez MXNet les bibliothèques sur votre Raspberry Pi.

1. <a name="ssh-rpi-step"></a>Connectez-vous à votre Raspberry Pi à distance.

   ```
   ssh pi@your-device-ip-address
   ```

1. Ouvrez la MXNet documentation, ouvrez [Installation MXNet](https://mxnet.apache.org/get_started/?) et suivez les instructions d'installation MXNet sur l'appareil.
**Note**  
Nous vous recommandons d'installer la version 1.5.0 et MXNet de créer à partir des sources pour ce didacticiel afin d'éviter les conflits entre appareils.

1. Après l'installation MXNet, validez la configuration suivante :
   + Assurez-vous que le compte `ggc_user` système peut utiliser le MXNet framework.

     ```
     sudo -u ggc_user bash -c 'python3 -c "import mxnet"'
     ```
   + Assurez-vous qu' NumPy il est installé.

     ```
     sudo -u ggc_user bash -c 'python3 -c "import numpy"'
     ```

## Étape 3 : Création d'un MXNet modèle de package
<a name="package-ml-model"></a>

Au cours de cette étape, créez un package de modèle contenant un exemple de MXNet modèle préentraîné à télécharger sur Amazon Simple Storage Service (Amazon S3). AWS IoT Greengrass peut utiliser un modèle de package d'Amazon S3, à condition d'utiliser le format tar.gz ou zip.

1. Sur votre ordinateur, téléchargez l' MXNet exemple de Raspberry Pi à partir de[Exemples de machine learning](what-is-gg.md#gg-ml-samples).

1.  Décompressez le fichier `mxnet-py3-armv7l.tar.gz` téléchargé. 

1. Accédez au répertoire `squeezenet`.

   ```
   cd path-to-downloaded-sample/mxnet-py3-armv7l/models/squeezenet
   ```

   Le fichier `squeezenet.zip` de ce répertoire est votre package de modèle. Il contient des artefacts de modèle SqueezeNet open source pour un modèle de classification d'images. Vous téléchargerez ensuite ce modèle de package sur Amazon S3.

## Étape 4 : Création et publication d'une fonction Lambda
<a name="ml-console-create-lambda"></a>

Dans cette étape, créez un package de déploiement de fonctions Lambda et une fonction Lambda. Ensuite, publiez une version de fonction et créez un alias.

Créez d'abord le package de déploiement de la fonction Lambda.

1. Sur votre ordinateur, accédez au répertoire `examples` de l'exemple de package que vous avez décompressé dans [Étape 3 : Création d'un MXNet modèle de package](#package-ml-model).

   ```
   cd path-to-downloaded-sample/mxnet-py3-armv7l/examples
   ```

   Le répertoire `examples` contient le code de fonction et les dépendances.
   + `greengrassObjectClassification.py` est le code d'inférence utilisé dans ce didacticiel. Vous pouvez utiliser ce code comme modèle pour créer votre propre fonction d'inférence.
   + <a name="ml-samples-ggc-sdk"></a>`greengrasssdk`est la version 1.5.0 du SDK AWS IoT Greengrass Core pour Python.
**Note**  <a name="ml-samples-ggc-sdk-upgrade"></a>
Si une nouvelle version est disponible, vous pouvez la télécharger et mettre à niveau la version du kit SDK dans votre package de déploiement. Pour plus d'informations, consultez le [SDK AWS IoT Greengrass principal pour Python](https://github.com/aws/aws-greengrass-core-sdk-python/) sur GitHub.

1.  Compressez le contenu du répertoire `examples` dans un fichier nommé `greengrassObjectClassification.zip`. Vous obtiendrez alors votre package de déploiement. 

   ```
   zip -r greengrassObjectClassification.zip .
   ```
**Note**  <a name="ml-samples-function-zip"></a>
 Assurez-vous que les fichiers `.py` et les dépendances se trouvent dans la racine du répertoire. 

    

   Créez ensuite la fonction Lambda.

1. Dans la AWS IoT console, sélectionnez **Fonctions** et **Créer une fonction**.

1. Choisissez **Author à partir de zéro** et utilisez les valeurs suivantes pour créer votre fonction :
   + Sous **Nom de la fonction**, saisissez **greengrassObjectClassification**.
   + Pour **Runtime**, sélectionnez **Python 3.7**.

   Pour **les autorisations**, conservez le paramètre par défaut. Cela crée un rôle d'exécution qui accorde des autorisations Lambda de base. Ce rôle n'est pas utilisé par AWS IoT Greengrass.

1. Choisissez **Créer une fonction**.

    

   À présent, téléchargez le package de déploiement de votre fonction Lambda et enregistrez le gestionnaire.

1. Choisissez votre fonction Lambda et téléchargez le package de déploiement de votre fonction Lambda.

   1. <a name="lambda-console-upload"></a>Dans l'onglet **Code**, sous **Source du code**, choisissez **Télécharger depuis**. Dans le menu déroulant, sélectionnez le **fichier .zip.**  
![\[La liste déroulante Upload from avec le fichier .zip surligné.\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/images/lra-console/upload-deployment-package.png)

   1. Choisissez **Upload**, puis choisissez votre package `greengrassObjectClassification.zip` de déploiement. Ensuite, choisissez **Enregistrer**.

   1. <a name="lambda-console-runtime-settings-para"></a>Dans l'onglet **Code** de la fonction, sous **Paramètres d'exécution**, choisissez **Modifier**, puis entrez les valeurs suivantes.
      + Pour **Runtime**, sélectionnez **Python 3.7**.
      + Pour **Handler** (Gestionnaire), entrez **greengrassObjectClassification.function\$1handler**.

      Choisissez **Enregistrer**.

   Publiez ensuite la première version de votre fonction Lambda. Puis, créez un [alias pour la version](https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html).
**Note**  
Les groupes Greengrass peuvent référencer une fonction Lambda par alias (recommandé) ou par version. L'utilisation d'un alias facilite la gestion des mises à jour du code, car vous n'avez pas à modifier votre table d'abonnement ou la définition de groupe lorsque le code de fonction est mis à jour. Au lieu de cela, il vous suffit de pointer l'alias vers la nouvelle version de la fonction.

1. Dans le menu **Actions**, sélectionnez **Publier une nouvelle version**.  
![\[Option Publier une nouvelle version dans le menu Actions.\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/images/ml-inference/lambda-publish-version.png)

1. Dans **Description de la version**, saisissez **First version**, puis choisissez **Publish**.

1. Sur la page de configuration **greengrassObjectClassification: 1**, dans le menu **Actions**, choisissez **Créer un alias**.  
![\[Option Créer un alias dans le menu Actions.\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/images/ml-inference/lambda-create-alias.png)

1. Sur la page **Create a new alias**, utilisez les valeurs suivantes :
   + Pour **Nom**, saisissez **mlTest**.
   + Pour **Version**, entrez **1**.
**Note**  
AWS IoT Greengrass **ne prend pas en charge les alias Lambda pour les versions \$1LATEST.**

1. Choisissez **Enregistrer**.

    

   Ajoutez maintenant la fonction Lambda à votre groupe Greengrass.

## Étape 5 : Ajouter la fonction Lambda au groupe Greengrass
<a name="ml-console-config-lambda"></a>

Au cours de cette étape, ajoutez la fonction Lambda au groupe, puis configurez son cycle de vie et ses variables d'environnement.

Ajoutez d'abord la fonction Lambda à votre groupe Greengrass.

1. Dans le volet de navigation de la AWS IoT console, sous **Gérer**, développez les **appareils Greengrass**, puis choisissez **Groups (V1)**.

1. Sur la page de configuration du groupe, choisissez l'onglet **Fonctions Lambda**.

1. **Dans la section **Mes fonctions Lambda**, choisissez Ajouter.**

1. Pour la **fonction Lambda, choisissez**. **greengrassObjectClassification**

1. **Pour la **version de la fonction Lambda**, choisissez Alias:MLTest.**

    

   Configurez ensuite le cycle de vie et les variables d'environnement de la fonction Lambda.

1. Dans la section **Configuration de la fonction Lambda**, effectuez les mises à jour suivantes.
**Note**  
Nous vous recommandons d'exécuter votre fonction Lambda sans conteneurisation, sauf si votre analyse de rentabilisation l'exige. Cela permet d'accéder au processeur graphique et à la caméra de votre appareil sans configurer les ressources de l'appareil. Si vous exécutez sans conteneurisation, vous devez également accorder un accès root à vos fonctions Lambda AWS IoT Greengrass . 

   1. **Pour exécuter sans conteneurisation :**
      + Pour **Utilisateur et groupe du système**, sélectionnez**Another user ID/group ID**. Dans le champ **ID utilisateur du système**, entrez**0**. Pour l'**ID du groupe de systèmes**, entrez**0**.

        Cela permet à votre fonction Lambda de s'exécuter en tant que root. Pour plus d'informations sur l'exécution en tant que root, consultez[Définition de l'identité d'accès par défaut pour les fonctions Lambda dans un groupe](lambda-group-config.md#lambda-access-identity-groupsettings).
**Astuce**  
Vous devez également mettre à jour votre `config.json` fichier pour accorder un accès root à votre fonction Lambda. Pour la procédure, voir[Exécution d'une fonction Lambda en tant que root](lambda-group-config.md#lambda-running-as-root).
      + **Pour la **conteneurisation de la fonction Lambda, sélectionnez Aucun conteneur**.**

        Pour plus d'informations sur l'exécution sans conteneurisation, consultez. [Considérations à prendre en compte lors du choix de la conteneurisation des fonctions Lambda](lambda-group-config.md#lambda-containerization-considerations)
      + Pour **Expiration**, entrez **10 seconds**.
      + Pour **Épinglé**, choisissez **True**. 

        Pour de plus amples informations, veuillez consulter [Configuration du cycle de vie pour les fonctions Greengrass Lambda](lambda-functions.md#lambda-lifecycle).

   1.  **Pour exécuter plutôt en mode conteneurisé :** 
**Note**  
Nous vous déconseillons de l'exécuter en mode conteneurisé, sauf si votre analyse de rentabilisation l'exige.
      + Pour **Utilisateur et groupe du système**, choisissez **Utiliser le groupe par défaut**.
      + **Pour la **conteneurisation de la fonction Lambda**, choisissez Utiliser le groupe par défaut.**
      + Pour **Limite de mémoire**, entrez **96 MB**.
      + Pour **Expiration**, entrez **10 seconds**.
      + Pour **Épinglé**, choisissez **True**. 

        Pour de plus amples informations, veuillez consulter [Configuration du cycle de vie pour les fonctions Greengrass Lambda](lambda-functions.md#lambda-lifecycle).

1. Sous **Variables d'environnement**, créez une paire clé-valeur. Une paire clé-valeur est requise par les fonctions qui interagissent avec les MXNet modèles d'un Raspberry Pi.

   Pour la clé, utilisez MXNET\$1ENGINE\$1TYPE. Pour la valeur, utilisez NaiveEngine. 
**Note**  
Dans vos propres fonctions Lambda définies par l'utilisateur, vous pouvez éventuellement définir la variable d'environnement dans le code de votre fonction.

1. Conservez les valeurs par défaut pour toutes les autres propriétés et choisissez **Ajouter une fonction Lambda**.

## Étape 6 : Ajouter des ressources au groupe Greengrass
<a name="ml-console-add-resources"></a>

Au cours de cette étape, créez des ressources pour le module de caméra et le modèle d'inférence ML, puis associez les ressources à la fonction Lambda. Cela permet à la fonction Lambda d'accéder aux ressources du périphérique principal.

**Note**  
Si vous exécutez en mode non conteneurisé, vous AWS IoT Greengrass pouvez accéder au processeur graphique et à la caméra de votre appareil sans configurer ces ressources. 

Tout d'abord, créez deux ressources d'appareil local pour la caméra : un pour la mémoire partagée et l'autre pour l'interface de l'appareil. Pour plus d'informations sur l'accès aux ressources locales, consultez la page [Accédez aux ressources locales grâce aux fonctions et connecteurs Lambda](access-local-resources.md).

1. Sur la page de configuration du groupe, choisissez l'onglet **Ressources**.

1. Dans la section **Ressources locales**, choisissez **Ajouter une ressource locale**.

1. Sur la page **Ajouter une ressource locale**, utilisez les valeurs suivantes :
   + Sous **Resource Name (Nom de la ressource)**, entrez **videoCoreSharedMemory**.
   + Pour **Type de ressource**, choisissez **Appareil**.
   + Pour le **chemin de l'appareil local**, entrez**/dev/vcsm**.

     Le chemin de l'appareil est le chemin absolu local de la ressource d'appareil. Ce chemin ne peut faire référence qu'à un périphérique de caractères ou un périphérique de stockage en mode bloc sous `/dev`.
   + Pour **le propriétaire du groupe système et les autorisations d'accès aux fichiers****, choisissez Ajouter automatiquement les autorisations de système de fichiers du groupe système propriétaire de la ressource**.

     L'option **Propriétaire du groupe système et autorisations d'accès aux fichiers** vous permet d'accorder des autorisations d'accès aux fichiers supplémentaires au processus Lambda. Pour de plus amples informations, veuillez consulter [Autorisation d'accès fichier pour le propriétaire du groupe](access-local-resources.md#lra-group-owner).

1. Ensuite, vous ajoutez une ressource d'appareil local pour l'interface de la caméra.

1. Choisissez **Ajouter une ressource locale**.

1. Sur la page **Ajouter une ressource locale**, utilisez les valeurs suivantes :
   + Sous **Resource Name (Nom de la ressource)**, entrez **videoCoreInterface**.
   + Pour **Type de ressource**, choisissez **Appareil**.
   + Pour le **chemin de l'appareil local**, entrez**/dev/vchiq**.
   + Pour **le propriétaire du groupe système et les autorisations d'accès aux fichiers****, choisissez Ajouter automatiquement les autorisations de système de fichiers du groupe système propriétaire de la ressource**. 

1. Au bas de la page, choisissez **Ajouter une ressource**.

 

Ajoutez à présent le modèle d'inférence en tant que ressource d'apprentissage automatique. Cette étape inclut le téléchargement du `squeezenet.zip` modèle de package sur Amazon S3.

1. Dans l'onglet **Ressources** de votre groupe, dans la section **Machine Learning**, sélectionnez **Ajouter une ressource d'apprentissage automatique**.

1. Sur la page **Ajouter une ressource d'apprentissage automatique**, dans le champ **Nom de la ressource**, entrez**squeezenet\$1model**.

1. Pour **Model source**, choisissez **Utiliser un modèle stocké dans S3, tel qu'un modèle optimisé via le Deep Learning Compiler**.

1. Pour l'**URI S3**, entrez le chemin dans lequel le compartiment S3 est enregistré. 

1.  Choisissez **Parcourir S3**. Cela ouvre un nouvel onglet sur la console Amazon S3. 

1.  Dans l'onglet console Amazon S3, chargez le `squeezenet.zip` fichier dans un compartiment S3. Pour plus d'informations, consultez [Comment télécharger des fichiers et des dossiers dans un compartiment S3 ?](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/upload-objects.html) dans le *guide de l'utilisateur d'Amazon Simple Storage Service*. 
**Note**  
Pour que le compartiment S3 soit accessible, le nom de votre compartiment doit contenir la chaîne **greengrass** et le compartiment doit se trouver dans la même région que celle pour laquelle vous l'utilisez AWS IoT Greengrass. Choisissez un nom unique (comme **greengrass-bucket-*user-id*-*epoch-time***). N'utilisez pas de point (`.`) dans le nom du compartiment. 

1. Dans l'onglet AWS IoT Greengrass console, recherchez et choisissez votre compartiment S3. Localisez votre fichier chargé `squeezenet.zip`, puis choisissez **Sélectionner**. Vous devrez peut-être choisir **Actualiser** pour mettre à jour la liste des compartiments et des fichiers disponibles. 

1. Pour **Destination path (Chemin d'accès de destination)**, entrez **/greengrass-machine-learning/mxnet/squeezenet**.

   Il s'agit de la destination du modèle local dans l'espace de noms d'exécution Lambda. Lorsque vous déployez le groupe, il AWS IoT Greengrass récupère le package du modèle source, puis en extrait le contenu dans le répertoire spécifié. L'exemple de fonction Lambda de ce didacticiel est déjà configuré pour utiliser ce chemin (dans la `model_path` variable).

1. Sous **Propriétaire du groupe système et autorisations d'accès aux fichiers**, sélectionnez **Aucun groupe système**.

1. Choisissez **Add resource (Ajouter ressource)**.

### Utilisation de modèles entraînés par l' SageMaker IA
<a name="sm-models"></a>

Ce didacticiel utilise un modèle stocké dans Amazon S3, mais vous pouvez également facilement utiliser des modèles d' SageMaker IA. La AWS IoT Greengrass console intègre l' SageMaker IA, vous n'avez donc pas besoin de télécharger manuellement ces modèles sur Amazon S3. Pour connaître les exigences et les limites relatives à l'utilisation des modèles d' SageMaker IA, consultez[Sources de modèles prises en charge](ml-inference.md#supported-model-sources).

Pour utiliser un modèle d' SageMaker IA :
+ Dans **Source du modèle**, choisissez **Utiliser un modèle formé à l' AWS SageMaker IA**, puis choisissez le nom de la tâche de formation du modèle.
+ Dans le **champ Destination path**, entrez le chemin du répertoire dans lequel votre fonction Lambda recherche le modèle.

## Étape 7 : Ajouter un abonnement au groupe Greengrass
<a name="ml-console-add-subscription"></a>

Au cours des cette étape, ajoutez un abonnement au groupe. Cet abonnement permet à la fonction Lambda d'envoyer des résultats de prédiction en les AWS IoT publiant dans un sujet MQTT.

1. Sur la page de configuration du groupe, choisissez l'onglet **Abonnements**, puis choisissez **Ajouter un abonnement**.

1. Sur la page des **détails de l'abonnement**, configurez la source et la cible comme suit :

   1. Dans **Type de source**, sélectionnez **Fonction Lambda**, puis sélectionnez. **greengrassObjectClassification**

   1. Dans **Type de cible**, choisissez **Service**, puis **IoT Cloud**.

1. Dans **Filtre par sujet**, entrez**hello/world**, puis choisissez **Créer un abonnement**.

## Étape 8 : Déployer le groupe Greengrass
<a name="ml-console-deploy-group"></a>

Au cours de cette étape, déployez la version actuelle de la définition de groupe sur l'appareil Greengrass principal (noyau). La définition contient la fonction Lambda, les ressources et les configurations d'abonnement que vous avez ajoutées.

1. Assurez-vous que le AWS IoT Greengrass noyau fonctionne. Dans la fenêtre de terminal de votre Raspberry Pi, exécutez les commandes suivantes, si nécessaire.

   1. Pour vérifier si le démon est en cours d'exécution :

      ```
      ps aux | grep -E 'greengrass.*daemon'
      ```

      Si la sortie contient une entrée `root` pour `/greengrass/ggc/packages/1.11.6/bin/daemon`, le démon est en cours d'exécution.
**Note**  
La version indiquée dans le chemin dépend de la version du logiciel AWS IoT Greengrass Core installée sur votre appareil principal.

   1. Pour démarrer le daemon, procédez comme suit :

      ```
      cd /greengrass/ggc/core/
      sudo ./greengrassd start
      ```

1. Sur la page de configuration du groupe, choisissez **Deploy**.  
![\[Page de groupe avec les options Déploiements et Déployer mises en évidence.\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/images/console-group-deployments-deploy.png)

1. **Dans l'onglet **Fonctions Lambda**, sous la section **Fonctions Lambda** du système, sélectionnez **Détecteur IP** et choisissez Modifier.**

1. Dans la boîte de dialogue **Modifier les paramètres du détecteur IP**, sélectionnez **Détecter et remplacer automatiquement les points de terminaison du broker MQTT**.

1. Choisissez **Enregistrer**.

   Les appareils peuvent ainsi acquérir automatiquement des informations de connectivité pour le noyau, telles que l'adresse IP, le DNS et le numéro de port. La détection automatique est recommandée, mais elle prend AWS IoT Greengrass également en charge les points de terminaison spécifiés manuellement. Vous êtes uniquement invité à indiquer la méthode de découverte lors du déploiement initial du groupe.
**Note**  
Si vous y êtes invité, autorisez la création du rôle de [service Greengrass et associez-le à votre rôle](service-role.md) Compte AWS dans le service actuel. Région AWS Ce rôle permet d'accéder AWS IoT Greengrass à vos ressources dans les AWS services.

   La page **Déploiements** indique l'horodatage, l'ID de version et l'état du déploiement. Une fois terminé, le statut affiché pour le déploiement doit être **Terminé**.

   Pour de plus amples informations sur les déploiements, veuillez consulter [Déployer AWS IoT Greengrass des groupes vers un AWS IoT Greengrass noyau](deployments.md). Pour bénéficier d'une aide à la résolution des problèmes, consultez [Résolution des problèmes AWS IoT Greengrass](gg-troubleshooting.md).

## Étape 9 : Tester l'application d'inférence
<a name="ml-console-test-app"></a>

À présent, vous pouvez vérifier si le déploiement est correctement configuré. Pour effectuer un test, vous vous abonnez à la `hello/world` rubrique et vous consultez les résultats de prédiction publiés par la fonction Lambda.

**Note**  
Si un écran est attaché au Raspberry Pi, le flux de la caméra est diffusé en direct dans une fenêtre d'aperçu.

1. Dans la AWS IoT console, sous **Test**, choisissez le **client de test MQTT**.

1. Pour **Abonnements**, utilisez les valeurs suivantes :
   + Pour la rubrique d'abonnement, utilisez hello/world.
   + Sous **Configuration supplémentaire**, pour l'affichage de la **charge utile MQTT, choisissez Afficher** **les charges utiles sous forme de chaînes**.

1. Choisissez **Abonner**.

   Si le test est réussi, les messages de la fonction Lambda apparaissent en bas de page. Chaque message contient les cinq premiers résultats des prédictions de l'image, en utilisant le format suivant : probabilité, ID de classe prédite et nom de classe correspondante.  
![\[Page Abonnements affichant les résultats des tests avec les données de message.\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/images/ml-inference/prediction-results.png)

### Résolution des problèmes liés à l' AWS IoT Greengrass inférence ML
<a name="ml-inference-troubleshooting"></a>

Si le test n'est pas réussi, vous pouvez essayer les étapes de dépannage suivantes. Exécutez les commandes dans la fenêtre de terminal de votre Raspberry Pi.

#### Consultez les journaux des erreurs
<a name="troubleshooting-check-logs"></a>

1. <a name="root-access-logs"></a>Connectez-vous en tant qu'utilisateur racine et accédez au répertoire `log`. L'accès aux AWS IoT Greengrass journaux nécessite des autorisations root.

   ```
   sudo su
   cd /greengrass/ggc/var/log
   ```

1. Dans le répertoire `system`, consultez `runtime.log` ou `python_runtime.log`.

   Dans le répertoire `user/region/account-id`, consultez `greengrassObjectClassification.log`.

   Pour de plus amples informations, veuillez consulter [Résolution des problèmes liés aux journaux](gg-troubleshooting.md#troubleshooting-logs).

##### Erreur de décompression dans le fichier runtime.log
<a name="troubleshooting-targz-unpacking"></a>

Si `runtime.log` contient une erreur similaire à ce qui suit, assurez-vous que votre package de modèle source `tar.gz` possède un répertoire parent.

```
Greengrass deployment error: unable to download the artifact model-arn: Error while processing. 
Error while unpacking the file from /tmp/greengrass/artifacts/model-arn/path to /greengrass/ggc/deployment/path/model-arn,
error: open /greengrass/ggc/deployment/path/model-arn/squeezenet/squeezenet_v1.1-0000.params: no such file or directory
```

Si votre package n'a pas de répertoire parent contenant les fichiers de modèle, utilisez la commande suivante pour repackager le modèle :

```
tar -zcvf model.tar.gz ./model
```

Par exemple :

```
─$ tar -zcvf test.tar.gz ./test
./test
./test/some.file
./test/some.file2
./test/some.file3
```

**Note**  
N'incluez pas les caractères de fin `/*` dans cette commande.

 

#### Vérifiez que la fonction Lambda est correctement déployée
<a name="troubleshooting-check-lambda"></a>

1. Répertoriez le contenu du Lambda déployé dans le `/lambda` répertoire. Remplacez les valeurs d'espace réservé avant d'exécuter la commande.

   ```
   cd /greengrass/ggc/deployment/lambda/arn:aws:lambda:region:account:function:function-name:function-version
   ls -la
   ```

1. Vérifiez que le répertoire contient le même contenu que le package de déploiement `greengrassObjectClassification.zip` que vous avez chargé dans [Étape 4 : Création et publication d'une fonction Lambda](#ml-console-create-lambda).

   Assurez-vous que les fichiers `.py` et les dépendances se trouvent dans la racine du répertoire.

 

#### Vérifiez que le modèle d'inférence a été déployé avec succès
<a name="troubleshooting-check-model"></a>

1. Trouvez le numéro d'identification du processus (PID) du processus d'exécution Lambda :

   ```
   ps aux | grep 'lambda-function-name*'
   ```

   Dans la sortie, le PID apparaît dans la deuxième colonne de la ligne pour le processus d'exécution Lambda.

1. Entrez l'espace de noms d'exécution Lambda. Assurez-vous de remplacer la *pid* valeur de l'espace réservé avant d'exécuter la commande.
**Note**  
Ce répertoire et son contenu se trouvent dans l'espace de noms d'exécution Lambda, ils ne sont donc pas visibles dans un espace de noms Linux normal.

   ```
   sudo nsenter -t pid -m /bin/bash
   ```

1. Affichez le contenu du répertoire local que vous avez spécifié comme ressource de ML.

   ```
   cd /greengrass-machine-learning/mxnet/squeezenet/
   ls -ls
   ```

   Vous devriez voir les fichiers suivants :

   ```
   32 -rw-r--r-- 1 ggc_user ggc_group   31675 Nov 18 15:19 synset.txt
   32 -rw-r--r-- 1 ggc_user ggc_group   28707 Nov 18 15:19 squeezenet_v1.1-symbol.json
   4832 -rw-r--r-- 1 ggc_user ggc_group 4945062 Nov 18 15:19 squeezenet_v1.1-0000.params
   ```

## Étapes suivantes
<a name="next-steps"></a>

Ensuite, explorez d'autres applications d'inférence. AWS IoT Greengrass fournit d'autres fonctions Lambda que vous pouvez utiliser pour tester l'inférence locale. Vous pouvez trouver les packages d'exemple dans le dossier des bibliothèques précompilées que vous avez téléchargé à l'[Étape 2 : Installation du MXNet framework](#install-mxnet).

## Configuration d'un processeur Intel Atom
<a name="atom-lambda-config"></a>

 Pour exécuter ce didacticiel sur un périphérique Intel Atom, vous devez fournir des images sources, configurer la fonction Lambda et ajouter une autre ressource de périphérique local. Pour utiliser le processeur graphique à des fins d'inférence, assurez-vous que les logiciels suivants sont installés sur votre appareil :
+ OpenCL version 1.0 ou ultérieure
+ Python 3.7 et pip
**Note**  
Si votre appareil est préconfiguré avec Python 3.6, vous pouvez aussi créer un lien symbolique vers Python 3.7. Pour de plus amples informations, veuillez consulter [Step 2](#python-symlink).
+ [NumPy](https://pypi.org/project/numpy/)
+ [OpenCV sur Wheels](https://pypi.org/project/opencv-python/)

1. Téléchargez des images statiques au format PNG ou JPG pour la fonction Lambda à utiliser pour la classification des images. L'exemple fonctionne mieux avec des fichiers image de petite taille. 

   Enregistrez vos fichiers image dans le répertoire qui contient le fichier `greengrassObjectClassification.py` (ou dans un sous-répertoire de ce répertoire). Cela se trouve dans le package de déploiement de la fonction Lambda que vous téléchargez. [Étape 4 : Création et publication d'une fonction Lambda](#ml-console-create-lambda)
**Note**  
 Si vous en utilisez AWS DeepLens, vous pouvez utiliser la caméra intégrée ou monter votre propre caméra pour effectuer des inférences sur des images capturées plutôt que sur des images statiques. Cependant, nous vous recommandons vivement de commencer par les images statiques.   
Si vous utilisez une caméra, assurez-vous que le package APT `awscam` est installé et à jour. Pour plus d'informations, consultez la section [Mettre à jour votre AWS DeepLens appareil](https://docs.aws.amazon.com/deeplens/latest/dg/deeplens-manual-updates.html) dans le *guide du AWS DeepLens développeur*.

1. <a name="python-symlink"></a>Si vous n'utilisez pas Python 3.7, assurez-vous de créer un lien symbolique entre Python 3.x et Python 3.7. Cela permet de configurer votre appareil pour utiliser Python 3 avec AWS IoT Greengrass. Exécutez la commande suivante pour localiser votre installation Python :

   ```
   which python3
   ```

   Exécutez la commande suivante pour créer le lien symbolique :

   ```
   sudo ln -s path-to-python-3.x/python3.x path-to-python-3.7/python3.7
   ```

   Redémarrez l'appareil.

1. Modifiez la configuration de la fonction Lambda. Suivez la procédure décrite dans [Étape 5 : Ajouter la fonction Lambda au groupe Greengrass](#ml-console-config-lambda). 
**Note**  
 Nous vous recommandons d'exécuter votre fonction Lambda sans conteneurisation, sauf si votre analyse de rentabilisation l'exige. Cela permet d'accéder au processeur graphique et à la caméra de votre appareil sans configurer les ressources de l'appareil. Si vous exécutez sans conteneurisation, vous devez également accorder un accès root à vos fonctions Lambda AWS IoT Greengrass . 

   1. **Pour exécuter sans conteneurisation :**
      + Pour **Utilisateur et groupe du système**, sélectionnez**Another user ID/group ID**. Dans le champ **ID utilisateur du système**, entrez**0**. Pour l'**ID du groupe de systèmes**, entrez**0**.

        Cela permet à votre fonction Lambda de s'exécuter en tant que root. Pour plus d'informations sur l'exécution en tant que root, consultez[Définition de l'identité d'accès par défaut pour les fonctions Lambda dans un groupe](lambda-group-config.md#lambda-access-identity-groupsettings).
**Astuce**  
Vous devez également mettre à jour votre `config.json` fichier pour accorder un accès root à votre fonction Lambda. Pour la procédure, voir[Exécution d'une fonction Lambda en tant que root](lambda-group-config.md#lambda-running-as-root).
      + **Pour la **conteneurisation de la fonction Lambda, sélectionnez Aucun conteneur**.**

        Pour plus d'informations sur l'exécution sans conteneurisation, consultez. [Considérations à prendre en compte lors du choix de la conteneurisation des fonctions Lambda](lambda-group-config.md#lambda-containerization-considerations)
      + Mettez à jour la valeur **Délai d'expiration** à 5 secondes. Cela permet de s'assurer que la demande n'expire pas trop tôt. L'exécution de l'inférence nécessite quelques minutes après la configuration.
      + Sous **Épinglé**, choisissez **True**.
      + Sous **Paramètres supplémentaires**, pour l'**accès en lecture au répertoire /sys**, sélectionnez **Activé**. 
      +  Sous **Cycle de vie Lambda**, sélectionnez **Attribuer une longue durée de vie à cette fonction et l'exécuter indéfiniment**. 

   1.  **Pour exécuter plutôt en mode conteneurisé :** 
**Note**  
Nous vous déconseillons de l'exécuter en mode conteneurisé, sauf si votre analyse de rentabilisation l'exige.
      + Mettez à jour la valeur **Délai d'expiration** à 5 secondes. Cela permet de s'assurer que la demande n'expire pas trop tôt. L'exécution de l'inférence nécessite quelques minutes après la configuration.
      +  Pour **Épinglé**, choisissez **True**. 
      + Sous **Paramètres supplémentaires**, pour l'**accès en lecture au répertoire /sys**, sélectionnez **Activé**. 

1. En **cas d'exécution en mode conteneurisé**, ajoutez la ressource locale requise pour autoriser l'accès au GPU de votre appareil.
**Note**  
Si vous exécutez en mode non conteneurisé, vous AWS IoT Greengrass pouvez accéder au GPU de votre appareil sans configurer les ressources de l'appareil. 

   1. Sur la page de configuration du groupe, choisissez l'onglet **Ressources**.

   1. Choisissez **Ajouter une ressource locale**.

   1. Définissez la ressource :
      + Sous **Resource Name (Nom de la ressource)**, entrez **renderD128**.
      + Pour **Type de ressource**, choisissez **Appareil local**.
      + Pour **Device path (Chemin de l'appareil)**, entrez **/dev/dri/renderD128**.
      + Pour **le propriétaire du groupe système et les autorisations d'accès aux fichiers****, choisissez Ajouter automatiquement les autorisations de système de fichiers du groupe système propriétaire de la ressource**.
      + Pour les **affiliations à une fonction Lambda**, accordez un **accès en lecture et en écriture à** votre fonction Lambda.

## Configuration d'un NVIDIA Jetson TX2
<a name="jetson-lambda-config"></a>

Pour exécuter ce didacticiel sur un NVIDIA Jetson TX2, fournissez des images sources et configurez la fonction Lambda. Si vous utilisez le processeur graphique, vous devez également ajouter des ressources de périphérique local.

1.  Assurez-vous que votre appareil Jetson est configuré pour pouvoir installer le logiciel AWS IoT Greengrass Core. Pour de plus amples informations sur la configuration de votre appareil, veuillez consulter [Configuration d'autres appareils](setup-filter.other.md). 

1. Ouvrez la MXNet documentation, accédez à [Installation MXNet sur un appareil Jetson](https://mxnet.apache.org/get_started/jetson_setup) et suivez les instructions d'installation MXNet sur le périphérique Jetson.
**Note**  
 Si vous souhaitez créer à MXNet partir des sources, suivez les instructions pour créer la bibliothèque partagée. Modifiez les paramètres suivants dans votre `config.mk` fichier pour qu'ils fonctionnent avec un TX2 appareil Jetson :   
Ajoutez `-gencode arch=compute-62, code=sm_62` au paramètre `CUDA_ARCH`.
Activez CUDA.  

     ```
     USE_CUDA = 1
     ```

1. Téléchargez des images statiques au format PNG ou JPG pour la fonction Lambda à utiliser pour la classification des images. L'application fonctionne mieux avec des fichiers image de petite taille. Vous pouvez également instrumenter une caméra sur le plateau Jetson pour capturer les images source.

   Enregistrez vos fichiers image dans le répertoire contenant le fichier `greengrassObjectClassification.py`. Vous pouvez également les enregistrer dans un sous-répertoire de ce répertoire. Ce répertoire se trouve dans le package de déploiement de la fonction Lambda dans lequel vous téléchargez. [Étape 4 : Création et publication d'une fonction Lambda](#ml-console-create-lambda)

1. Créez un lien symbolique entre Python 3.7 et Python 3.6 pour utiliser Python 3 avec AWS IoT Greengrass. Exécutez la commande suivante pour localiser votre installation Python :

   ```
   which python3
   ```

   Exécutez la commande suivante pour créer le lien symbolique :

   ```
   sudo ln -s path-to-python-3.6/python3.6 path-to-python-3.7/python3.7
   ```

   Redémarrez l'appareil.

1. Assurez-vous que le compte `ggc_user` système peut utiliser le MXNet framework :

   ```
   “sudo -u ggc_user bash -c 'python3 -c "import mxnet"'
   ```

1. Modifiez la configuration de la fonction Lambda. Suivez la procédure décrite dans [Étape 5 : Ajouter la fonction Lambda au groupe Greengrass](#ml-console-config-lambda).
**Note**  
 Nous vous recommandons d'exécuter votre fonction Lambda sans conteneurisation, sauf si votre analyse de rentabilisation l'exige. Cela permet d'accéder au processeur graphique et à la caméra de votre appareil sans configurer les ressources de l'appareil. Si vous exécutez sans conteneurisation, vous devez également accorder un accès root à vos fonctions Lambda AWS IoT Greengrass . 

   1. **Pour exécuter sans conteneurisation :**
      + Pour **Utilisateur et groupe du système**, sélectionnez**Another user ID/group ID**. Dans le champ **ID utilisateur du système**, entrez**0**. Pour l'**ID du groupe de systèmes**, entrez**0**.

        Cela permet à votre fonction Lambda de s'exécuter en tant que root. Pour plus d'informations sur l'exécution en tant que root, consultez[Définition de l'identité d'accès par défaut pour les fonctions Lambda dans un groupe](lambda-group-config.md#lambda-access-identity-groupsettings).
**Astuce**  
Vous devez également mettre à jour votre `config.json` fichier pour accorder un accès root à votre fonction Lambda. Pour la procédure, voir[Exécution d'une fonction Lambda en tant que root](lambda-group-config.md#lambda-running-as-root).
      + **Pour la **conteneurisation de la fonction Lambda, sélectionnez Aucun conteneur**.**

        Pour plus d'informations sur l'exécution sans conteneurisation, consultez. [Considérations à prendre en compte lors du choix de la conteneurisation des fonctions Lambda](lambda-group-config.md#lambda-containerization-considerations)
      + Sous **Paramètres supplémentaires**, pour l'**accès en lecture au répertoire /sys**, sélectionnez **Activé**. 
      +  Sous **Variables d'environnement**, ajoutez les paires clé-valeur suivantes à votre fonction Lambda. Cela permet de configurer AWS IoT Greengrass pour utiliser le MXNet framework.     
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/ml-console.html)

   1.  **Pour exécuter plutôt en mode conteneurisé :** 
**Note**  
Nous vous déconseillons de l'exécuter en mode conteneurisé, sauf si votre analyse de rentabilisation l'exige.
      + Augmentez la valeur **Limite de mémoire**. Utilisez 500 Mo pour le processeur ou au moins 2000 Mo pour le processeur graphique. 
      + Sous **Paramètres supplémentaires**, pour l'**accès en lecture au répertoire /sys**, sélectionnez **Activé**. 
      +  Sous **Variables d'environnement**, ajoutez les paires clé-valeur suivantes à votre fonction Lambda. Cela permet de configurer AWS IoT Greengrass pour utiliser le MXNet framework.     
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/ml-console.html)

1. En **cas d'exécution en mode conteneurisé**, ajoutez les ressources locales suivantes pour autoriser l'accès au GPU de votre appareil. Suivez la procédure décrite dans [Étape 6 : Ajouter des ressources au groupe Greengrass](#ml-console-add-resources).
**Note**  
 Si vous exécutez en mode non conteneurisé, vous AWS IoT Greengrass pouvez accéder au GPU de votre appareil sans configurer les ressources de l'appareil. 

   Pour chaque ressource :
   + Pour **Type de ressource**, choisissez **Appareil**.
   + Pour **le propriétaire du groupe système et les autorisations d'accès aux fichiers****, choisissez Ajouter automatiquement les autorisations de système de fichiers du groupe système propriétaire de la ressource**.

          
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/ml-console.html)

1. En **cas d'exécution en mode conteneurisé**, ajoutez la ressource de volume local suivante pour autoriser l'accès à l'appareil photo de votre appareil. Suivez la procédure décrite dans [Étape 6 : Ajouter des ressources au groupe Greengrass](#ml-console-add-resources).
**Note**  
 Si vous exécutez en mode non conteneurisé, vous AWS IoT Greengrass pouvez accéder à la caméra de votre appareil sans configurer les ressources de volume. 
   + Pour **Type de ressource**, choisissez **Volume**.
   + Pour **le propriétaire du groupe système et les autorisations d'accès aux fichiers****, choisissez Ajouter automatiquement les autorisations de système de fichiers du groupe système propriétaire de la ressource**.

          
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/ml-console.html)

# Comment configurer une inférence d'apprentissage automatique optimisée à l'aide du AWS Management Console
<a name="ml-dlc-console"></a>

Pour suivre les étapes de ce didacticiel, vous devez utiliser AWS IoT Greengrass Core v1.10 ou une version ultérieure.

Vous pouvez utiliser le compilateur d'apprentissage profond SageMaker AI Neo pour optimiser l'efficacité prédictive des modèles d'inférence d'apprentissage automatique natifs dans Tensorflow, Apache MXNet PyTorch, ONNX et les XGBoost frameworks pour un encombrement réduit et des performances plus rapides. Vous pouvez ensuite télécharger le modèle optimisé, installer le moteur d'apprentissage profond SageMaker AI Neo et le déployer sur vos AWS IoT Greengrass appareils pour une inférence plus rapide. 

Ce didacticiel explique comment utiliser le AWS Management Console pour configurer un groupe Greengrass afin d'exécuter un exemple d'inférence Lambda qui reconnaît les images d'une caméra localement, sans envoyer de données au cloud. L'exemple d'inférence accède au module de caméra sur un Raspberry Pi. Dans ce didacticiel, vous allez télécharger un modèle préemballé entraîné par Resnet-50 et optimisé dans le compilateur d'apprentissage profond Neo. Vous utilisez ensuite le modèle pour effectuer une classification locale des images sur votre AWS IoT Greengrass appareil. 

Le didacticiel contient les étapes détaillées suivantes :

1. [Configurer le Raspberry Pi](#config-raspberry-pi-dlc)

1. [Installer l'environnement d'exécution Neo Deep Learning](#install-dlr)

1. [Création d'une fonction Lambda d'inférence](#ml-console-dlc-create-lambda)

1. [Ajoutez la fonction Lambda au groupe](#ml-console-dlc-config-lambda)

1. [Ajouter une ressource de modèle optimisé pour Neo au groupe](#ml-console-dlc-add-resources)

1. [Ajouter la ressource d'appareil de votre caméra au groupe](#ml-console-dlc-add-cam-resource)

1. [Ajouter des abonnements au groupe](#ml-console-dlc-add-subscription)

1. [Déployer le groupe](#ml-console-dlc-deploy-group)

1. [Tester l'exemple](#ml-console-dlc-test-app)

## Conditions préalables
<a name="ml-inference-prerequisites"></a>

 Pour suivre ce didacticiel, vous devez disposer des éléments suivants : 
+  Raspberry Pi 4 modèle B ou Raspberry Pi 3 modèle B/B\$1, installé et configuré pour être utilisé avec. AWS IoT Greengrass Pour configurer votre Raspberry Pi avec AWS IoT Greengrass, exécutez le script de [configuration de l'appareil Greengrass](quick-start.md) ou assurez-vous d'avoir terminé le [Module 1](https://docs.aws.amazon.com/greengrass/latest/developerguide/module1.html) et le [Module 2](https://docs.aws.amazon.com/greengrass/latest/developerguide/module2.html) de [Commencer avec AWS IoT Greengrass](gg-gs.md). 
**Note**  
Le Raspberry Pi peut nécessiter une [alimentation](https://www.raspberrypi.org/documentation/hardware/raspberrypi/power/) de 2,5 A pour exécuter les frameworks d'apprentissage profond généralement utilisés pour la classification d'images. Un bloc d'alimentation d'une valeur nominale inférieure peut provoquer le redémarrage de l'appareil.
+  [Module caméra V2 du Raspberry Pi - 8 mégapixels, 1080p](https://www.amazon.com/Raspberry-Pi-Camera-Module-Megapixel/dp/B01ER2SKFS). Pour savoir comment configurer la caméra, consultez la section [Connexion de la caméra](https://www.raspberrypi.org/documentation/usage/camera/) dans la documentation du Raspberry Pi. 
+  Un groupe Greengrass et un service principal Greengrass. Pour savoir comment créer un groupe ou un service principal Greengrass, consultez [Commencer avec AWS IoT Greengrass](gg-gs.md). 

**Note**  
 Ce didacticiel utilise un Raspberry Pi, mais AWS IoT Greengrass prend en charge d'autres plateformes, telles que [Intel Atom](#atom-lambda-dlc-config) et [NVIDIA Jetson TX2](#jetson-lambda-dlc-config). Si vous utilisez l'exemple Intel Atom, vous devrez peut-être installer Python 3.6 au lieu de Python 3.7. Pour plus d'informations sur la configuration de votre appareil afin d'installer le logiciel AWS IoT Greengrass Core, consultez[Configuration d'autres appareils](setup-filter.other.md).   
Pour les plateformes tierces qui AWS IoT Greengrass ne le prennent pas en charge, vous devez exécuter votre fonction Lambda en mode non conteneurisé. Pour fonctionner en mode non conteneurisé, vous devez exécuter votre fonction Lambda en tant qu'utilisateur root. Pour plus d’informations, consultez [Considérations à prendre en compte lors du choix de la conteneurisation des fonctions Lambda](lambda-group-config.md#lambda-containerization-considerations) et [Définition de l'identité d'accès par défaut pour les fonctions Lambda dans un groupe](lambda-group-config.md#lambda-access-identity-groupsettings).

## Étape 1 : Configurer le Raspberry Pi
<a name="config-raspberry-pi-dlc"></a>

 Au cours de cette étape, installez les mises à jour du système d'exploitation Raspbian, installez le logiciel du module caméra et les dépendances Python, et activez l'interface de la caméra. 

Dans la fenêtre de terminal de votre Raspberry Pi, exécutez les commandes suivantes :

1. Installez les mises à jour sur Raspbian.

   ```
   sudo apt-get update
   sudo apt-get dist-upgrade
   ```

1. <a name="install-picamera-step"></a>Installez l'interface `picamera` pour le module caméra, ainsi que les autres bibliothèques Python requises pour ce didacticiel.

   ```
   sudo apt-get install -y python3-dev python3-setuptools python3-pip python3-picamera
   ```

   Valider l'installation :
   + Assurez-vous que votre installation Python 3.7 inclut pip.

     ```
     python3 -m pip
     ```

     Si pip n'est pas installé, téléchargez-le à partir du [site web pip](https://pip.pypa.io/en/stable/installing/), puis exécutez la commande suivante.

     ```
     python3 get-pip.py
     ```
   + Assurez-vous que votre Python est en version 3.7 ou supérieure.

     ```
     python3 --version
     ```

     Si la sortie mentionne une version antérieure, exécutez la commande suivante.

     ```
     sudo apt-get install -y python3.7-dev
     ```
   + Assurez-vous que Setuptools et Picamera sont installés correctement.

     ```
     sudo -u ggc_user bash -c 'python3 -c "import setuptools"'
     sudo -u ggc_user bash -c 'python3 -c "import picamera"'
     ```

     Si la sortie ne contient pas d'erreurs, la validation a abouti.
**Note**  
Si l'exécutable Python installé sur votre appareil est `python3.7`, utilisez `python3.7` plutôt que `python3` pour les commandes de ce didacticiel. Assurez-vous que votre installation pip correspond à la version correcte (`python3.7` ou `python3`) pour éviter les erreurs de dépendance.

1. Redémarrez l'appareil Raspberry Pi.

   ```
   sudo reboot
   ```

1. Ouvrez l'outil de configuration du Raspberry Pi.

   ```
   sudo raspi-config
   ```

1. Utilisez les touches flèches pour ouvrir les **Options d'interface** et activer l'interface de la caméra. Si vous y êtes invité, autorisez le redémarrage de l'appareil.

1. Utilisez la commande suivante pour tester la configuration de la caméra.

   ```
   raspistill -v -o test.jpg
   ```

   Elle ouvre une fenêtre d'aperçu sur le Raspberry Pi, enregistre une image nommée `test.jpg` dans votre répertoire actuel et affiche des informations sur la caméra dans la fenêtre de terminal du Raspberry Pi.

## Étape 2 : Installation du moteur d'apprentissage profond Amazon SageMaker Neo
<a name="install-dlr"></a>

 Au cours de cette étape, installez le Neo Deep Learning Runtime (DLR) sur votre Raspberry Pi. 

**Note**  
Nous vous recommandons d'installer la version 1.1.0 pour ce tutoriel.

1. <a name="ssh-rpi-step"></a>Connectez-vous à votre Raspberry Pi à distance.

   ```
   ssh pi@your-device-ip-address
   ```

1.  Ouvrez la documentation DLR, ouvrez [Installation du DLR](https://neo-ai-dlr.readthedocs.io/en/latest/install.html) et recherchez l'URL du Wheel des appareils Raspberry Pi. Suivez ensuite les instructions d'installation du DLR sur votre appareil. Par exemple, vous pouvez utiliser pip :

   ```
   pip3 install rasp3b-wheel-url
   ```

1. Après avoir installé le DLR, validez la configuration suivante :
   + Assurez-vous que le compte système `ggc_user` peut utiliser la bibliothèque DLR.

     ```
     sudo -u ggc_user bash -c 'python3 -c "import dlr"'
     ```
   + Assurez-vous qu' NumPy il est installé.

     ```
     sudo -u ggc_user bash -c 'python3 -c "import numpy"'
     ```

## Étape 3 : Création d'une fonction Lambda d'inférence
<a name="ml-console-dlc-create-lambda"></a>

 Au cours de cette étape, créez un package de déploiement de fonctions Lambda et une fonction Lambda. Ensuite, publiez une version de fonction et créez un alias. 

1. Sur votre ordinateur, téléchargez l'exemple DLR pour Raspberry Pi à partir de [Exemples de machine learning](what-is-gg.md#gg-ml-samples).

1.  Décompressez le fichier `dlr-py3-armv7l.tar.gz` téléchargé. 

   ```
   cd path-to-downloaded-sample
   tar -xvzf dlr-py3-armv7l.tar.gz
   ```

   Le répertoire `examples` de l'exemple de package extrait contient le code de fonction et les dépendances.
   + `inference.py` est le code d'inférence utilisé dans ce didacticiel. Vous pouvez utiliser ce code comme modèle pour créer votre propre fonction d'inférence.
   + <a name="ml-samples-ggc-sdk"></a>`greengrasssdk`est la version 1.5.0 du SDK AWS IoT Greengrass Core pour Python.
**Note**  <a name="ml-samples-ggc-sdk-upgrade"></a>
Si une nouvelle version est disponible, vous pouvez la télécharger et mettre à niveau la version du kit SDK dans votre package de déploiement. Pour plus d'informations, consultez le [SDK AWS IoT Greengrass principal pour Python](https://github.com/aws/aws-greengrass-core-sdk-python/) sur GitHub.

1.  Compressez le contenu du répertoire `examples` dans un fichier nommé `optimizedImageClassification.zip`. Vous obtiendrez alors votre package de déploiement. 

   ```
   cd path-to-downloaded-sample/dlr-py3-armv7l/examples
   zip -r optimizedImageClassification.zip .
   ```

    Le package de déploiement contient votre code de fonction et vos dépendances. Cela inclut le code qui invoque Python, le moteur d'apprentissage profond Neo, APIs pour effectuer des inférences avec les modèles de compilateur d'apprentissage profond Neo. 
**Note**  <a name="ml-samples-function-zip"></a>
 Assurez-vous que les fichiers `.py` et les dépendances se trouvent dans la racine du répertoire. 

1.  Ajoutez maintenant la fonction Lambda à votre groupe Greengrass. 

   Sur la page de la console Lambda, choisissez **Functions**, puis **Create** function.

1. Choisissez **Author à partir de zéro** et utilisez les valeurs suivantes pour créer votre fonction :
   + Sous **Nom de la fonction**, saisissez **optimizedImageClassification**. 
   + Pour **Runtime**, sélectionnez **Python 3.7**.

   Pour **les autorisations**, conservez le paramètre par défaut. Cela crée un rôle d'exécution qui accorde des autorisations Lambda de base. Ce rôle n'est pas utilisé par AWS IoT Greengrass.  
![\[Section Informations de base de la page Créer une fonction.\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/images/ml-dlc-inference/gg-dlr-lambda-creation.png)

1. Choisissez **Créer une fonction**. 

 

À présent, téléchargez le package de déploiement de votre fonction Lambda et enregistrez le gestionnaire.

1. <a name="lambda-console-upload"></a>Dans l'onglet **Code**, sous **Source du code**, choisissez **Télécharger depuis**. Dans le menu déroulant, sélectionnez le **fichier .zip.**  
![\[La liste déroulante Upload from avec le fichier .zip surligné.\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/images/lra-console/upload-deployment-package.png)

1. Choisissez votre package de `optimizedImageClassification.zip` déploiement, puis cliquez **sur Enregistrer**.

1. <a name="lambda-console-runtime-settings-para"></a>Dans l'onglet **Code** de la fonction, sous **Paramètres d'exécution**, choisissez **Modifier**, puis entrez les valeurs suivantes.
   + Pour **Runtime**, sélectionnez **Python 3.7**.
   + Pour **Handler** (Gestionnaire), entrez **inference.handler**.

   Choisissez **Enregistrer**.  
![\[La section des paramètres d'exécution avec Upload en surbrillance.\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/images/ml-dlc-inference/gg-ml2-lambda-upload.png)

 

Publiez ensuite la première version de votre fonction Lambda. Puis, créez un [alias pour la version](https://docs.aws.amazon.com/lambda/latest/dg/versioning-aliases.html).

**Note**  
Les groupes Greengrass peuvent référencer une fonction Lambda par alias (recommandé) ou par version. L'utilisation d'un alias facilite la gestion des mises à jour du code, car vous n'avez pas à modifier votre table d'abonnement ou la définition de groupe lorsque le code de fonction est mis à jour. Au lieu de cela, il vous suffit de pointer l'alias vers la nouvelle version de la fonction.

1. Dans le menu **Actions**, sélectionnez **Publier une nouvelle version**.  
![\[Option Publier une nouvelle version dans le menu Actions.\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/images/ml-dlc-inference/gg-ml2-publish-new.png)

1. Dans **Description de la version**, saisissez **First version**, puis choisissez **Publish**.

1. Sur la page de configuration **optimizedImageClassification: 1**, dans le menu **Actions**, choisissez **Créer un alias**.  
![\[Option Créer un alias dans le menu Actions.\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/images/ml-dlc-inference/gg-ml2-create-alias.png)

1. Sur la page **Create a new alias**, utilisez les valeurs suivantes :
   + Pour **Nom**, saisissez **mlTestOpt**.
   + Pour **Version**, entrez **1**.
**Note**  
AWS IoT Greengrass **ne prend pas en charge les alias Lambda pour les versions \$1LATEST.**

1. Choisissez **Créer**.

   Ajoutez maintenant la fonction Lambda à votre groupe Greengrass.

## Étape 4 : ajouter la fonction Lambda au groupe Greengrass
<a name="ml-console-dlc-config-lambda"></a>

Au cours de cette étape, ajoutez la fonction Lambda au groupe, puis configurez son cycle de vie.

Ajoutez d'abord la fonction Lambda à votre groupe Greengrass.

1. Dans le volet de navigation de la AWS IoT console, sous **Gérer**, développez les **appareils Greengrass**, puis choisissez **Groups (V1)**.

1. **Sur la page de configuration des groupes, choisissez l'onglet **Fonctions Lambda**, puis sélectionnez Ajouter.** 

1.  Choisissez la **fonction Lambda**, puis sélectionnez. **optimizedImageClassification** 

1. Dans la **version de la fonction Lambda**, choisissez l'alias de la version que vous avez publiée.

 

Configurez ensuite le cycle de vie de la fonction Lambda.

1. Dans la section **Configuration de la fonction Lambda**, effectuez les mises à jour suivantes.
**Note**  
 Nous vous recommandons d'exécuter votre fonction Lambda sans conteneurisation, sauf si votre analyse de rentabilisation l'exige. Cela permet d'accéder au processeur graphique et à la caméra de votre appareil sans configurer les ressources de l'appareil. Si vous exécutez sans conteneurisation, vous devez également accorder un accès root à vos fonctions Lambda AWS IoT Greengrass . 

   1. **Pour exécuter sans conteneurisation :**
      + Pour **Utilisateur et groupe du système**, sélectionnez**Another user ID/group ID**. Dans le champ **ID utilisateur du système**, entrez**0**. Pour l'**ID du groupe de systèmes**, entrez**0**.

        Cela permet à votre fonction Lambda de s'exécuter en tant que root. Pour plus d'informations sur l'exécution en tant que root, consultez[Définition de l'identité d'accès par défaut pour les fonctions Lambda dans un groupe](lambda-group-config.md#lambda-access-identity-groupsettings).
**Astuce**  
Vous devez également mettre à jour votre `config.json` fichier pour accorder un accès root à votre fonction Lambda. Pour la procédure, voir[Exécution d'une fonction Lambda en tant que root](lambda-group-config.md#lambda-running-as-root).
      + **Pour la **conteneurisation de la fonction Lambda, sélectionnez Aucun conteneur**.**

        Pour plus d'informations sur l'exécution sans conteneurisation, consultez. [Considérations à prendre en compte lors du choix de la conteneurisation des fonctions Lambda](lambda-group-config.md#lambda-containerization-considerations)
      + Pour **Expiration**, entrez **10 seconds**.
      + Pour **Épinglé**, choisissez **True**.

        Pour de plus amples informations, veuillez consulter [Configuration du cycle de vie pour les fonctions Greengrass Lambda](lambda-functions.md#lambda-lifecycle).
      + Sous **Paramètre supplémentaire**, pour l'**accès en lecture au répertoire /sys**, choisissez **Enabled**.

   1.  **Pour exécuter plutôt en mode conteneurisé :** 
**Note**  
Nous vous déconseillons de l'exécuter en mode conteneurisé, sauf si votre analyse de rentabilisation l'exige.
      + Pour **Utilisateur et groupe du système**, choisissez **Utiliser le groupe par défaut**.
      + **Pour la **conteneurisation de la fonction Lambda**, choisissez Utiliser le groupe par défaut.**
      + Pour **Limite de mémoire**, entrez **1024 MB**.
      + Pour **Expiration**, entrez **10 seconds**.
      + Pour **Épinglé**, choisissez **True**.

        Pour de plus amples informations, veuillez consulter [Configuration du cycle de vie pour les fonctions Greengrass Lambda](lambda-functions.md#lambda-lifecycle).
      + Sous **Paramètres supplémentaires**, pour l'**accès en lecture au répertoire /sys**, sélectionnez **Activé**.

1.  Choisissez **Ajouter une fonction Lambda**.

## Étape 5 : Ajouter une ressource de modèle optimisée pour SageMaker AI Neo au groupe Greengrass
<a name="ml-console-dlc-add-resources"></a>

 Au cours de cette étape, créez une ressource pour le modèle d'inférence ML optimisé et chargez-la dans un compartiment Amazon S3. Localisez ensuite le modèle téléchargé sur Amazon S3 dans la AWS IoT Greengrass console et associez la ressource nouvellement créée à la fonction Lambda. Cela permet à la fonction d'accéder à ses ressources sur l'appareil principal. 

1.  Sur votre ordinateur, accédez au répertoire `resnet50` de l'exemple de package que vous avez décompressé dans [Étape 3 : Création d'une fonction Lambda d'inférence](#ml-console-dlc-create-lambda). 
**Note**  
Si vous utilisez l'exemple NVIDIA Jetson, vous devez plutôt utiliser le répertoire `resnet18` dans l'exemple de package. Pour de plus amples informations, veuillez consulter [Configuration d'un NVIDIA Jetson TX2](#jetson-lambda-dlc-config).

   ```
   cd path-to-downloaded-sample/dlr-py3-armv7l/models/resnet50
   ```

    Ce répertoire contient des artefacts de modèles précompilés pour un modèle de classification d'images avec Resnet-50.

1. Compressez les fichiers du répertoire `resnet50` dans un fichier nommé `resnet50.zip`. 

   ```
   zip -r resnet50.zip .
   ```

1.  Sur la page de configuration de votre AWS IoT Greengrass groupe, choisissez l'onglet **Ressources**. Accédez à la section **Machine Learning**, choisissez **Ajouter une ressource de Machine Learning**. Sur la page **Créer une ressource de Machine Learning**, pour **Nom de la ressource**, entrez **resnet50\$1model**.

1. Pour **Model source**, choisissez **Utiliser un modèle stocké dans S3, tel qu'un modèle optimisé via le Deep Learning Compiler**.

1.  Sous **S3 URI**, choisissez **Browse S3**. 
**Note**  
 Actuellement, les modèles d' SageMaker IA optimisés sont stockés automatiquement dans Amazon S3. Vous pouvez trouver votre modèle optimisé dans votre compartiment Amazon S3 à l'aide de cette option. Pour plus d'informations sur l'optimisation des modèles dans l' SageMaker IA, consultez la [documentation SageMaker AI Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html). 

1.  Choisissez **Charger un modèle**. 

1.  Dans l'onglet console Amazon S3, chargez votre fichier zip dans un compartiment Amazon S3. Pour plus d'informations, consultez [Comment télécharger des fichiers et des dossiers dans un compartiment S3 ?](https://docs.aws.amazon.com/AmazonS3/latest/user-guide/upload-objects.html) dans le *guide de l'utilisateur d'Amazon Simple Storage Service*. 
**Note**  
 Le nom de votre compartiment doit contenir la chaîne **greengrass**. Choisissez un nom unique (comme **greengrass-dlr-bucket-*user-id*-*epoch-time***). N'utilisez pas de point (`.`) dans le nom du compartiment. 

1.  Dans l'onglet AWS IoT Greengrass console, recherchez et choisissez votre compartiment Amazon S3. Localisez votre fichier chargé `resnet50.zip`, puis choisissez **Sélectionner**. Vous devrez peut-être actualiser la page pour mettre à jour la liste des compartiments et des fichiers disponibles. 

1.  Dans le **champ Destination path**, entrez**/ml\$1model**.   
![\[Le chemin de destination mis à jour.\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/images/ml-dlc-inference/local-path.png)

    Il s'agit de la destination du modèle local dans l'espace de noms d'exécution Lambda. Lorsque vous déployez le groupe, il AWS IoT Greengrass récupère le package du modèle source, puis en extrait le contenu dans le répertoire spécifié. 
**Note**  
 Nous vous recommandons vivement d'utiliser le chemin d'accès local exact. L'utilisation d'un autre chemin de destination de modèle local dans cette étape entraîne l'inexactitude de certaines commandes de dépannage fournies dans ce didacticiel. Si vous utilisez un autre chemin, vous devez configurer une variable d'environnement `MODEL_PATH` qui utilise le chemin d'accès exact que vous fournissez ici. Pour de plus amples informations sur les variables d'environnement, veuillez consulter [Variables d'environnement AWS Lambda](https://docs.aws.amazon.com/lambda/latest/dg/env_variables.html). 

1. **En cas d'exécution en mode conteneurisé :**

   1. Sous **Propriétaire du groupe système et autorisations d'accès aux fichiers**, choisissez **Spécifier le groupe système et les autorisations**.

   1. Choisissez **Accès en lecture seule**, puis sélectionnez **Ajouter** une ressource.

## Étape 6 : Ajouter la ressource d'appareil de votre caméra au groupe Greengrass
<a name="ml-console-dlc-add-cam-resource"></a>

 Au cours de cette étape, créez une ressource pour le module caméra et associez-la à la fonction Lambda. Cela permet à la fonction Lambda d'accéder à la ressource sur le périphérique principal. 

**Note**  
Si vous exécutez en mode non conteneurisé, vous AWS IoT Greengrass pouvez accéder au GPU et à la caméra de votre appareil sans configurer cette ressource de périphérique. 

1. Sur la page de configuration du groupe, choisissez l'onglet **Ressources**.

1. Dans l'onglet **Ressources locales**, choisissez **Ajouter une ressource locale**.

1. Sur la page **Ajouter une ressource locale**, utilisez les valeurs suivantes :
   + Sous **Resource Name (Nom de la ressource)**, entrez **videoCoreSharedMemory**.
   + Pour **Type de ressource**, choisissez **Appareil**.
   + Pour le **chemin du périphérique local**, entrez**/dev/vcsm**.

     Le chemin de l'appareil est le chemin absolu local de la ressource d'appareil. Ce chemin ne peut faire référence qu'à un périphérique de caractères ou un périphérique de stockage en mode bloc sous `/dev`.
   + Pour **le propriétaire du groupe système et les autorisations d'accès aux fichiers****, choisissez Ajouter automatiquement les autorisations de système de fichiers du groupe système propriétaire de la ressource**.

     L'option **Autorisation d'accès fichier pour le propriétaire du groupe** vous permet d'accorder des autorisations supplémentaires d'accès aux fichiers au processus Lambda. Pour de plus amples informations, veuillez consulter [Autorisation d'accès fichier pour le propriétaire du groupe](access-local-resources.md#lra-group-owner).

1. Au bas de la page, choisissez **Ajouter une ressource**.

1. Dans l'onglet **Ressources**, créez une autre ressource locale en choisissant **Ajouter** et en utilisant les valeurs suivantes :
   + Sous **Resource Name (Nom de la ressource)**, entrez **videoCoreInterface**.
   + Pour **Type de ressource**, choisissez **Appareil**.
   + Pour le **chemin du périphérique local**, entrez**/dev/vchiq**.
   + Pour **le propriétaire du groupe système et les autorisations d'accès aux fichiers****, choisissez Ajouter automatiquement les autorisations de système de fichiers du groupe système propriétaire de la ressource**.

1. Choisissez **Add resource (Ajouter ressource)**. 

## Étape 7 : Ajouter des abonnements au groupe Greengrass
<a name="ml-console-dlc-add-subscription"></a>

Au cours de cette étape, ajoutez des abonnements au groupe. Ces abonnements permettent à la fonction Lambda d'envoyer des résultats de prédiction en les AWS IoT publiant dans un sujet MQTT.

1. Sur la page de configuration du groupe, choisissez l'onglet **Abonnements**, puis choisissez **Ajouter un abonnement**.

1. Sur la page **Créer un abonnement**, configurez la source et la cible comme suit :

   1. Dans **Type de source**, sélectionnez **Fonction Lambda**, puis sélectionnez. **optimizedImageClassification**

   1. Dans **Type de cible**, choisissez **Service**, puis **IoT Cloud**.

   1. Dans le **filtre de rubrique**, entrez**/resnet-50/predictions**, puis choisissez **Créer un abonnement**. 

1. Ajoutez un second abonnement. Choisissez l'onglet **Abonnements**, choisissez **Ajouter un abonnement** et configurez la source et la cible comme suit : 

   1. Dans **Type de source**, choisissez **Services**, puis **IoT Cloud**.

   1. Dans **Type de cible**, sélectionnez **Fonction Lambda**, puis sélectionnez. **optimizedImageClassification**

   1. Dans le **filtre de rubrique**, entrez**/resnet-50/test**, puis choisissez **Créer un abonnement**.

## Étape 8 : Déployer le groupe Greengrass
<a name="ml-console-dlc-deploy-group"></a>

Au cours de cette étape, déployez la version actuelle de la définition de groupe sur l'appareil Greengrass principal (noyau). La définition contient la fonction Lambda, les ressources et les configurations d'abonnement que vous avez ajoutées.

1. Assurez-vous que le AWS IoT Greengrass noyau fonctionne. Dans la fenêtre de terminal de votre Raspberry Pi, exécutez les commandes suivantes, si nécessaire.

   1. Pour vérifier si le démon est en cours d'exécution :

      ```
      ps aux | grep -E 'greengrass.*daemon'
      ```

      Si la sortie contient une entrée `root` pour `/greengrass/ggc/packages/latest-core-version/bin/daemon`, le démon est en cours d'exécution.

   1. Pour démarrer le daemon :

      ```
      cd /greengrass/ggc/core/
      sudo ./greengrassd start
      ```

1. Sur la page de configuration du groupe, choisissez **Deploy**.

1. **Dans l'onglet **Fonctions Lambda**, sélectionnez **Détecteur IP**, puis Modifier.**

1. **Dans la boîte de dialogue **Modifier les paramètres du détecteur IP**, sélectionnez **Détecter et remplacer automatiquement les points de terminaison du broker MQTT**, puis sélectionnez Enregistrer.**

   Les appareils peuvent ainsi acquérir automatiquement des informations de connectivité pour le noyau, telles que l'adresse IP, le DNS et le numéro de port. La détection automatique est recommandée, mais elle prend AWS IoT Greengrass également en charge les points de terminaison spécifiés manuellement. Vous êtes uniquement invité à indiquer la méthode de découverte lors du déploiement initial du groupe.
**Note**  
Si vous y êtes invité, autorisez la création du rôle de [service Greengrass et associez-le à votre rôle](service-role.md) Compte AWS dans le service actuel. Région AWS Ce rôle permet d'accéder AWS IoT Greengrass à vos ressources dans les AWS services.

    La page **Déploiements** indique l'horodatage, l'ID de version et l'état du déploiement. Une fois terminé, le statut affiché pour le déploiement doit être **Terminé**. 

   Pour de plus amples informations sur les déploiements, veuillez consulter [Déployer AWS IoT Greengrass des groupes vers un AWS IoT Greengrass noyau](deployments.md). Pour bénéficier d'une aide à la résolution des problèmes, consultez [Résolution des problèmes AWS IoT Greengrass](gg-troubleshooting.md).

## Tester l'exemple d'inférence
<a name="ml-console-dlc-test-app"></a>

À présent, vous pouvez vérifier si le déploiement est correctement configuré. Pour effectuer le test, abonnez-vous à la rubrique `/resnet-50/predictions` et publiez n'importe quel message dans la rubrique `/resnet-50/test`. Cela déclenche la fonction Lambda pour prendre une photo avec votre Raspberry Pi et effectuer une inférence sur l'image qu'il capture. 

**Note**  
Si vous utilisez l'exemple NVIDIA Jetson, veillez à utiliser plutôt les rubriques `resnet-18/predictions` et `resnet-18/test`.

**Note**  
Si un écran est attaché au Raspberry Pi, le flux de la caméra est diffusé en direct dans une fenêtre d'aperçu.

1. Sur la page d'accueil de la AWS IoT console, sous **Test**, choisissez le **client de test MQTT**.

1. Pour les **abonnements**, choisissez **S'abonner à un sujet**. Utilisez les valeurs suivantes. Conservez les valeurs par défaut des autres options. 
   + Pour **Rubrique d'abonnement**, entrez **/resnet-50/predictions**.
   + Sous **Configuration supplémentaire**, pour l'affichage de la **charge utile MQTT, choisissez Afficher** **les charges utiles sous forme de chaînes**.

1. Choisissez **Abonner**.

1. Choisissez **Publier dans un sujet**, entrez le **/resnet-50/test** **nom du sujet**, puis choisissez **Publier**. 

1.  Si le test réussit, le message publié provoque la capture d'une image par la caméra Raspberry Pi. Un message de la fonction Lambda apparaît au bas de la page. Ce message contient le résultat des prédictions de l'image en utilisant le format suivant : nom de classe prédite, probabilité et utilisation de la mémoire. 

## Configuration d'un processeur Intel Atom
<a name="atom-lambda-dlc-config"></a>

 Pour exécuter ce didacticiel sur un périphérique Intel Atom, vous devez fournir des images sources, configurer la fonction Lambda et ajouter une autre ressource de périphérique local. Pour utiliser le processeur graphique à des fins d'inférence, assurez-vous que les logiciels suivants sont installés sur votre appareil :
+ OpenCL version 1.0 ou ultérieure
+ Python 3.7 et pip
+ [NumPy](https://pypi.org/project/numpy/)
+ [OpenCV sur Wheels](https://pypi.org/project/opencv-python/)

1. Téléchargez des images statiques au format PNG ou JPG pour la fonction Lambda à utiliser pour la classification des images. L'exemple fonctionne mieux avec des fichiers image de petite taille. 

   Enregistrez vos fichiers image dans le répertoire qui contient le fichier `inference.py` (ou dans un sous-répertoire de ce répertoire). Cela se trouve dans le package de déploiement de la fonction Lambda que vous téléchargez. [Étape 3 : Création d'une fonction Lambda d'inférence](#ml-console-dlc-create-lambda)
**Note**  
 Si vous en utilisez AWS DeepLens, vous pouvez utiliser la caméra intégrée ou monter votre propre caméra pour effectuer des inférences sur des images capturées plutôt que sur des images statiques. Cependant, nous vous recommandons vivement de commencer par les images statiques.   
Si vous utilisez une caméra, assurez-vous que le package APT `awscam` est installé et à jour. Pour plus d'informations, consultez la section [Mettre à jour votre AWS DeepLens appareil](https://docs.aws.amazon.com/deeplens/latest/dg/deeplens-manual-updates.html) dans le *guide du AWS DeepLens développeur*.

1. Modifiez la configuration de la fonction Lambda. Suivez la procédure décrite dans [Étape 4 : ajouter la fonction Lambda au groupe Greengrass](#ml-console-dlc-config-lambda). 
**Note**  
 Nous vous recommandons d'exécuter votre fonction Lambda sans conteneurisation, sauf si votre analyse de rentabilisation l'exige. Cela permet d'accéder au processeur graphique et à la caméra de votre appareil sans configurer les ressources de l'appareil. Si vous exécutez sans conteneurisation, vous devez également accorder un accès root à vos fonctions Lambda AWS IoT Greengrass . 

   1. **Pour exécuter sans conteneurisation :**
      + Pour **Utilisateur et groupe du système**, sélectionnez**Another user ID/group ID**. Dans le champ **ID utilisateur du système**, entrez**0**. Pour l'**ID du groupe de systèmes**, entrez**0**.

        Cela permet à votre fonction Lambda de s'exécuter en tant que root. Pour plus d'informations sur l'exécution en tant que root, consultez[Définition de l'identité d'accès par défaut pour les fonctions Lambda dans un groupe](lambda-group-config.md#lambda-access-identity-groupsettings).
**Astuce**  
Vous devez également mettre à jour votre `config.json` fichier pour accorder un accès root à votre fonction Lambda. Pour la procédure, voir[Exécution d'une fonction Lambda en tant que root](lambda-group-config.md#lambda-running-as-root).
      + **Pour la **conteneurisation de la fonction Lambda, sélectionnez Aucun conteneur**.**

        Pour plus d'informations sur l'exécution sans conteneurisation, consultez. [Considérations à prendre en compte lors du choix de la conteneurisation des fonctions Lambda](lambda-group-config.md#lambda-containerization-considerations)
      + Augmentez la valeur **Expiration** en la faisant passer à 2 minutes. Cela permet de s'assurer que la demande n'expire pas trop tôt. L'exécution de l'inférence nécessite quelques minutes après la configuration.
      +  Pour **Épinglé**, choisissez **True**. 
      + Sous **Paramètres supplémentaires**, pour l'**accès en lecture au répertoire /sys**, sélectionnez **Activé**. 

   1.  **Pour exécuter plutôt en mode conteneurisé :** 
**Note**  
Nous vous déconseillons de l'exécuter en mode conteneurisé, sauf si votre analyse de rentabilisation l'exige.
      +  Augmentez la valeur **Limite de mémoire** en la faisant passer à 3 000 Mo. 
      + Augmentez la valeur **Expiration** en la faisant passer à 2 minutes. Cela permet de s'assurer que la demande n'expire pas trop tôt. L'exécution de l'inférence nécessite quelques minutes après la configuration.
      +  Pour **Épinglé**, choisissez **True**. 
      + Sous **Paramètres supplémentaires**, pour l'**accès en lecture au répertoire /sys**, sélectionnez **Activé**. 

1.  Ajoutez une ressource de modèle optimisé pour Neo au groupe. Téléchargez les ressources du modèle dans le répertoire `resnet50` de l'exemple de package que vous avez décompressé dans [Étape 3 : Création d'une fonction Lambda d'inférence](#ml-console-dlc-create-lambda). Ce répertoire contient des artefacts de modèles précompilés pour un modèle de classification d'images avec Resnet-50. Exécutez la procédure décrite dans [Étape 5 : Ajouter une ressource de modèle optimisée pour SageMaker AI Neo au groupe Greengrass](#ml-console-dlc-add-resources) en appliquant les mises à jour qui suivent : 
   + Compressez les fichiers du répertoire `resnet50` dans un fichier nommé `resnet50.zip`.
   + Sur la page **Créer une ressource de Machine Learning**, pour **Nom de la ressource**, entrez **resnet50\$1model**.
   + Chargez le fichier `resnet50.zip`.

1. En **cas d'exécution en mode conteneurisé**, ajoutez la ressource locale requise pour autoriser l'accès au GPU de votre appareil.
**Note**  
 Si vous exécutez en mode non conteneurisé, vous AWS IoT Greengrass pouvez accéder au GPU de votre appareil sans configurer les ressources de l'appareil. 

   1. Sur la page de configuration du groupe, choisissez l'onglet **Ressources**.

   1. Dans la section **Ressources locales**, choisissez **Ajouter une ressource locale**.

   1. Définissez la ressource :
      + Sous **Resource Name (Nom de la ressource)**, entrez **renderD128**.
      + Pour **Type de ressource**, choisissez **Appareil**.
      + Pour le **chemin du périphérique local**, entrez**/dev/dri/renderD128**.
      + Pour **le propriétaire du groupe système et les autorisations d'accès aux fichiers****, choisissez Ajouter automatiquement les autorisations de système de fichiers du groupe système propriétaire de la ressource**.

## Configuration d'un NVIDIA Jetson TX2
<a name="jetson-lambda-dlc-config"></a>

 Pour exécuter ce didacticiel sur un NVIDIA Jetson TX2, fournissez des images sources, configurez la fonction Lambda et ajoutez des ressources supplémentaires au périphérique local.

1. Assurez-vous que votre appareil Jetson est configuré de manière à pouvoir installer le logiciel AWS IoT Greengrass Core et utiliser le GPU à des fins d'inférence. Pour de plus amples informations sur la configuration de votre appareil, veuillez consulter [Configuration d'autres appareils](setup-filter.other.md). Pour utiliser le GPU à des fins d'inférence sur un NVIDIA Jetson TX2, vous devez installer CUDA 10.0 et cuDNN 7.0 sur votre appareil lorsque vous imager votre carte avec Jetpack 4.3.

1. Téléchargez des images statiques au format PNG ou JPG pour la fonction Lambda à utiliser pour la classification des images. L'exemple fonctionne mieux avec des fichiers image de petite taille. 

   Enregistrez vos fichiers image dans le répertoire contenant le fichier `inference.py`. Vous pouvez également les enregistrer dans un sous-répertoire de ce répertoire. Ce répertoire se trouve dans le package de déploiement de la fonction Lambda dans lequel vous téléchargez. [Étape 3 : Création d'une fonction Lambda d'inférence](#ml-console-dlc-create-lambda)
**Note**  
 À la place, vous pouvez choisir d'instrumenter une caméra sur la carte Jetson pour capturer les images source. Cependant, nous vous recommandons vivement de commencer par les images statiques. 

1. Modifiez la configuration de la fonction Lambda. Suivez la procédure décrite dans [Étape 4 : ajouter la fonction Lambda au groupe Greengrass](#ml-console-dlc-config-lambda).
**Note**  
 Nous vous recommandons d'exécuter votre fonction Lambda sans conteneurisation, sauf si votre analyse de rentabilisation l'exige. Cela permet d'accéder au processeur graphique et à la caméra de votre appareil sans configurer les ressources de l'appareil. Si vous exécutez sans conteneurisation, vous devez également accorder un accès root à vos fonctions Lambda AWS IoT Greengrass . 

   1. **Pour exécuter sans conteneurisation :**
      + Pour **Exécuter en tant que**, choisissez**Another user ID/group ID**. Pour **UID**, entrez**0**. Pour **GUID**, entrez**0**.

        Cela permet à votre fonction Lambda de s'exécuter en tant que root. Pour plus d'informations sur l'exécution en tant que root, consultez[Définition de l'identité d'accès par défaut pour les fonctions Lambda dans un groupe](lambda-group-config.md#lambda-access-identity-groupsettings).
**Astuce**  
Vous devez également mettre à jour votre `config.json` fichier pour accorder un accès root à votre fonction Lambda. Pour la procédure, voir[Exécution d'une fonction Lambda en tant que root](lambda-group-config.md#lambda-running-as-root).
      + **Pour la **conteneurisation de la fonction Lambda, sélectionnez Aucun conteneur**.**

        Pour plus d'informations sur l'exécution sans conteneurisation, consultez. [Considérations à prendre en compte lors du choix de la conteneurisation des fonctions Lambda](lambda-group-config.md#lambda-containerization-considerations)
      + Augmentez la valeur **Expiration** en la faisant passer à 5 minutes. Cela permet de s'assurer que la demande n'expire pas trop tôt. L'exécution de l'inférence nécessite quelques minutes après la configuration.
      +  Pour **Épinglé**, choisissez **True**. 
      + Sous **Paramètres supplémentaires**, pour l'**accès en lecture au répertoire /sys**, sélectionnez **Activé**. 

   1.  **Pour exécuter plutôt en mode conteneurisé :** 
**Note**  
Nous vous déconseillons de l'exécuter en mode conteneurisé, sauf si votre analyse de rentabilisation l'exige.
      +  Augmentez la valeur **Limite de mémoire**. Pour utiliser le modèle fourni en mode GPU (processeur graphique), utilisez au moins 2000 Mo. 
      + Augmentez la valeur **Expiration** en la faisant passer à 5 minutes. Cela permet de s'assurer que la demande n'expire pas trop tôt. L'exécution de l'inférence nécessite quelques minutes après la configuration.
      +  Pour **Épinglé**, choisissez **True**. 
      + Sous **Paramètres supplémentaires**, pour l'**accès en lecture au répertoire /sys**, sélectionnez **Activé**. 

1.  Ajoutez une ressource de modèle optimisé pour Neo au groupe. Téléchargez les ressources du modèle dans le répertoire `resnet18` de l'exemple de package que vous avez décompressé dans [Étape 3 : Création d'une fonction Lambda d'inférence](#ml-console-dlc-create-lambda). Ce répertoire contient des artefacts de modèles précompilés pour un modèle de classification d'images entraîné avec Resnet-18. Exécutez la procédure décrite dans [Étape 5 : Ajouter une ressource de modèle optimisée pour SageMaker AI Neo au groupe Greengrass](#ml-console-dlc-add-resources) en appliquant les mises à jour qui suivent : 
   + Compressez les fichiers du répertoire `resnet18` dans un fichier nommé `resnet18.zip`.
   + Sur la page **Créer une ressource de Machine Learning**, pour **Nom de la ressource**, entrez **resnet18\$1model**.
   + Chargez le fichier `resnet18.zip`.

1. En **cas d'exécution en mode conteneurisé**, ajoutez les ressources locales requises pour autoriser l'accès au GPU de votre appareil. 
**Note**  
 Si vous exécutez en mode non conteneurisé, vous AWS IoT Greengrass pouvez accéder au GPU de votre appareil sans configurer les ressources de l'appareil. 

   1. Sur la page de configuration du groupe, choisissez l'onglet **Ressources**.

   1. Dans la section **Ressources locales**, choisissez **Ajouter une ressource locale**.

   1. Définissez chaque ressource :
      + Pour **Resource name (Nom de la ressource )** et **Device path, (Chemin de l'appareil)**, utilisez les valeurs du tableau suivant. Créez une ressource de périphérique pour chaque ligne de la table.
      + Pour **Type de ressource**, choisissez **Appareil**.
      + Pour **le propriétaire du groupe système et les autorisations d'accès aux fichiers****, choisissez Ajouter automatiquement les autorisations de système de fichiers du groupe système propriétaire de la ressource**.

             
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/ml-dlc-console.html)

1. En **cas d'exécution en mode conteneurisé**, ajoutez la ressource de volume local suivante pour autoriser l'accès à l'appareil photo de votre appareil. Suivez la procédure décrite dans [Étape 5 : Ajouter une ressource de modèle optimisée pour SageMaker AI Neo au groupe Greengrass](#ml-console-dlc-add-resources).
**Note**  
 Si vous exécutez en mode non conteneurisé, vous AWS IoT Greengrass pouvez accéder à la caméra de votre appareil sans configurer les ressources de l'appareil. 
   + Pour **Type de ressource**, choisissez **Volume**.
   + Pour **le propriétaire du groupe système et les autorisations d'accès aux fichiers****, choisissez Ajouter automatiquement les autorisations de système de fichiers du groupe système propriétaire de la ressource**.

          
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/fr_fr/greengrass/v1/developerguide/ml-dlc-console.html)

1.  Mettez à jour vos abonnements de groupe pour utiliser le répertoire correct. Exécutez la procédure décrite dans [Étape 7 : Ajouter des abonnements au groupe Greengrass](#ml-console-dlc-add-subscription) en appliquant les mises à jour qui suivent : 
   + Pour votre premier filtre de rubrique, entrez **/resnet-18/predictions**.
   + Pour votre deuxième filtre de rubrique, entrez **/resnet-18/test**.

1.  Mettez à jour vos abonnements de test pour utiliser le répertoire correct. Exécutez la procédure décrite dans [Tester l'exemple d'inférence](#ml-console-dlc-test-app) en appliquant les mises à jour qui suivent : 
   +  Pour les **abonnements**, choisissez **S'abonner à un sujet**. Pour **Rubrique d'abonnement**, entrez **/resnet-18/predictions**. 
   +  Dans la page `/resnet-18/predictions`, spécifiez la rubrique `/resnet-18/test` sur laquelle publier. 

## Résolution des problèmes AWS IoT Greengrass d'inférence ML
<a name="ml-inference-troubleshooting"></a>

Si le test n'est pas réussi, vous pouvez essayer les étapes de dépannage suivantes. Exécutez les commandes dans la fenêtre de terminal de votre Raspberry Pi.

### Consultez les journaux des erreurs
<a name="troubleshooting-check-logs"></a>

1. <a name="root-access-logs"></a>Connectez-vous en tant qu'utilisateur racine et accédez au répertoire `log`. L'accès aux AWS IoT Greengrass journaux nécessite des autorisations root.

   ```
   sudo su
   cd /greengrass/ggc/var/log
   ```

1. Vérifiez s'il `runtime.log` y a des erreurs. 

   ```
   cat system/runtime.log | grep 'ERROR'
   ```

   Vous pouvez également consulter le journal des fonctions Lambda défini par l'utilisateur pour détecter d'éventuelles erreurs : 

   ```
   cat user/your-region/your-account-id/lambda-function-name.log | grep 'ERROR'
   ```

   Pour de plus amples informations, veuillez consulter [Résolution des problèmes liés aux journaux](gg-troubleshooting.md#troubleshooting-logs).

 

### Vérifiez que la fonction Lambda est correctement déployée
<a name="troubleshooting-check-lambda"></a>

1.  Répertoriez le contenu du Lambda déployé dans le `/lambda` répertoire. Remplacez les valeurs d'espace réservé avant d'exécuter la commande. 

   ```
   cd /greengrass/ggc/deployment/lambda/arn:aws:lambda:region:account:function:function-name:function-version
   ls -la
   ```

1.  Vérifiez que le répertoire contient le même contenu que le package de déploiement `optimizedImageClassification.zip` que vous avez chargé dans [Étape 3 : Création d'une fonction Lambda d'inférence](#ml-console-dlc-create-lambda). 

    Assurez-vous que les fichiers `.py` et les dépendances se trouvent dans la racine du répertoire. 

 

### Vérifiez que le modèle d'inférence a été déployé avec succès
<a name="troubleshooting-check-model"></a>

1. Trouvez le numéro d'identification du processus (PID) du processus d'exécution Lambda :

   ```
   ps aux | grep lambda-function-name
   ```

   Dans la sortie, le PID apparaît dans la deuxième colonne de la ligne pour le processus d'exécution Lambda.

1.  Entrez le namespace d'exécution Lambda. Assurez-vous de remplacer la *pid* valeur de l'espace réservé avant d'exécuter la commande. 
**Note**  
Ce répertoire et son contenu se trouvent dans l'espace de noms d'exécution Lambda, ils ne sont donc pas visibles dans un espace de noms Linux normal.

   ```
   sudo nsenter -t pid -m /bin/bash
   ```

1. Affichez le contenu du répertoire local que vous avez spécifié comme ressource de ML.
**Note**  
 Si votre chemin de ressource ML est différent de `ml_model`, vous devez le remplacer ici. 

   ```
   cd /ml_model
   ls -ls
   ```

   Vous devriez voir les fichiers suivants :

   ```
       56 -rw-r--r-- 1 ggc_user ggc_group     56703 Oct 29 20:07 model.json
   196152 -rw-r--r-- 1 ggc_user ggc_group 200855043 Oct 29 20:08 model.params
      256 -rw-r--r-- 1 ggc_user ggc_group    261848 Oct 29 20:07 model.so
       32 -rw-r--r-- 1 ggc_user ggc_group     30564 Oct 29 20:08 synset.txt
   ```

 

### La fonction Lambda ne parvient pas à trouver `/dev/dri/renderD128`
<a name="troubleshooting-atom-config"></a>

 Cela peut se produire si OpenCL ne parvient pas à se connecter aux appareils GPU dont il a besoin. Vous devez créer des ressources pour les appareils nécessaires à votre fonction Lambda. 

## Étapes suivantes
<a name="next-dlc-steps"></a>

 Ensuite, explorez d'autres modèles optimisés. Pour plus d'informations, consultez la [documentation SageMaker AI Neo](https://docs.aws.amazon.com/sagemaker/latest/dg/neo.html). 