Configuration de l'inférence Machine Learning optimisée à l'aide d'AWS Management Console - AWS IoT Greengrass

AWS IoT Greengrass Version 1 est entré dans la phase de durée de vie prolongée le 30 juin 2023. Pour plus d'informations, consultez la politique de AWS IoT Greengrass V1 maintenance. Après cette date, AWS IoT Greengrass V1 ne publiera pas de mises à jour fournissant des fonctionnalités, des améliorations, des corrections de bogues ou des correctifs de sécurité. Les appareils qui fonctionnent AWS IoT Greengrass V1 sous tension ne seront pas perturbés et continueront à fonctionner et à se connecter au cloud. Nous vous recommandons vivement de migrer vers AWS IoT Greengrass Version 2, qui ajoute de nouvelles fonctionnalités importantes et prend en charge des plateformes supplémentaires.

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.

Configuration de l'inférence Machine Learning optimisée à l'aide d'AWS Management Console

Pour suivre les étapes dans ce didacticiel, vous devez utiliserAWS IoT GreengrassCore v1.10 ou version ultérieure.

Vous pouvez utiliser le plugin SageMaker Compilateur Neo Deep Learning pour optimiser l'efficacité de prédiction des modèles natifs d'inférence Machine Learning dans Tensorflow, PyTorch, ONNX et XGBoost pour un encombrement réduit et des performances plus rapides. Vous pouvez ensuite télécharger le modèle optimisé et installer le SageMaker Neo Deep Learning Service (core) et déployez-les dans votreAWS IoT Greengrassappareils pour une inférence plus rapide.

Ce didacticiel explique comment utiliser leAWS Management Consolepour configurer un groupe Greengrass afin d'exécuter un exemple d'inférence Lambda qui reconnaît localement les images d'une caméra, sans avoir à envoyer des données dans le cloud. L'exemple d'inférence accède au module de caméra sur un Raspberry Pi. Dans ce didacticiel, vous téléchargez un modèle préemballé formé par Resnet C-50 et optimisé dans le compilateur Neo Deep Learning. Ensuite, vous utilisez le modèle pour effectuer une classification locale d'images sur votre appareil AWS IoT Greengrass.

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

Prérequis

Pour suivre ce didacticiel, vous devez disposer des éléments suivants :

Note

Ce didacticiel utilise un Raspberry Pi, mais AWS IoT Greengrass prend en charge d'autres plateformes, telles qu'Intel Atom et NVIDIA Jetson TX2. Si vous utilisez l'exemple Intel Atom, vous devrez peut-être installer Python 3.6 au lieu de Python 3.7. Pour de plus amples informations sur la configuration de votre appareil afin de pouvoir installer le logiciel AWS IoT Greengrass Core, veuillez consulter Configuration d'autres appareils.

Pour les plateformes tierces quiAWS IoT Greengrassne prend pas en charge, vous devez exécuter votre fonction Lambda en mode non conteneurisé. Pour exécuter en mode non conteneurisé, vous devez exécuter votre fonction Lambda en tant qu'utilisateur racine. Pour plus d’informations, consultez Considérations à prendre en compte lors du choix de la conteneurisation des fonctions Lambda et Définition de l'identité d'accès par défaut pour les fonctions Lambda dans un groupe.

Étape 1 : Configurer le Raspberry Pi

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
  2. 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, 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.

  3. Redémarrez l'appareil Raspberry Pi.

    sudo reboot
  4. Ouvrez l'outil de configuration du Raspberry Pi.

    sudo raspi-config
  5. 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.

  6. 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 : Installer Amazon SageMaker Exécution Neo deep learning

Au cours de cette étape, installez le moteur d'exécution Deep Learning (DLR) sur votre Raspberry Pi.

Note

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

  1. Connectez-vous à votre Raspberry Pi à distance.

    ssh pi@your-device-ip-address
  2. Ouvrez la documentation DLR, ouvrez Installation du DLR 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
  3. 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"'
    • Vérifiez les NumPy est installé.

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

Étape 3 : Créer une fonction Lambda d'inférence

Au cours de cette étape, créez un package de déploiement de fonction 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.

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

    • greengrasssdkest la version 1.5.0 duAWS IoT GreengrassKit SDK principal pour Python.

      Note

      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 de plus amples informations, veuillez consulterAWS IoT GreengrassKit SDK principal pour Pythonsur GitHub.

  3. 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 appelle les API Python du moteur d'exécution Deep Learning afin d'effectuer des inférences avec les modèles de compilation Neo Deep Learning.

    Note

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

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

    Sur la page de la console Lambda, choisissezFonctionset choisissezCréation de fonction.

  5. ChoisissezCréer à partir de zéroet utilisez les valeurs suivantes pour créer votre fonction :

    • Sous Nom de la fonction, saisissez optimizedImageClassification.

    • Pour Runtime, sélectionnez Python 3.7.

    PourAutorisations, 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é parAWS IoT Greengrass.

    Section Informations de base de la page Créer une fonction.
  6. Sélectionnez Create function (Créer une fonction).

 

Téléchargez maintenant le package de déploiement de fonction Lambda et enregistrez le gestionnaire.

  1. Dans la pageCodeonglet, sousCode source, choisissezChargement à partir de. Dans le menu déroulant, choisissezfichier .zip.

    Le menu déroulant Charger depuis avec le fichier .zip en surbrillance.
  2. Choisissez votreoptimizedImageClassification.zippackage de déploiement, puis choisissezEnregistrer.

  3. Dans la pageCodepour la fonction, sousParamètres d'exécution, choisissezModifier, puis entrez les valeurs suivantes.

    • Pour Runtime, sélectionnez Python 3.7.

    • Pour Gestionnaire, entrez inference.handler.

    Choisissez Save (Enregistrer).

    Section Paramètres d'exécution avec l'option Charger mise en évidence.

 

Publiez ensuite la première version de votre fonction Lambda. Puis, créez un alias pour la version.

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 de code, car vous n'avez pas besoin de changer votre table d'abonnement ou définition de groupe lorsque le code fonction est mis à jour. Il vous suffit de pointer l'alias vers la nouvelle version de fonction.

  1. Dans le menu Actions, sélectionnez Publier une nouvelle version.

    Option Publier une nouvelle version dans le menu Actions.
  2. Dans Description de la version, saisissez First version, puis choisissez Publish.

  3. Dans la pageoptimizedImageClassification : 1page de configuration, depuis la pageActions, choisissezCréer un alias.

    Option Créer un alias dans le menu Actions.
  4. Sur la page Create a new alias, utilisez les valeurs suivantes :

    • Pour Name (Nom), saisissez mlTestOpt.

    • Pour Version, entrez 1.

    Note

    AWS IoT Greengrassne prend pas en charge les alias Lambda pour$LATESTversions.

  5. Sélectionnez Create (Créer).

    Ajoutez maintenant la fonction Lambda à votre groupe Greengrass.

Étape 4 : Ajouter la fonction Lambda au groupe Greengrass

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. DansAWS IoTVolet de navigation de la console sousGérer, développezAppareils Greengrasset choisissezGroupes (V1).

  2. Sur la page de configuration de groupe, choisissez leFonctions Lambdaonglet, puis choisissezAddition.

  3. Cliquez sur l'ongletFonction Lambdaet sélectionnezoptimizedImageClassification.

  4. Dans la pageVersion 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. DansConfiguration des fonctions Lambda, effectuez les mises à jour suivantes.

    Note

    Nous vous recommandons d'exécuter votre fonction Lambda sans conteneurisation, à moins que votre analyse de rentabilisation ne l'exige. Cela permet d'accéder au GPU 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 à votreAWS IoT GreengrassFonctions Lambda.

    1. Pour exécuter sans conteneurisation :

    2. Pour exécuter plutôt en mode conteneurisé :

      Note

      Nous ne recommandons pas une exécution en mode conteneurisé, à moins que votre cas d'utilisation ne l'exige.

      • PourUtilisateur et groupe du système, choisissezUtiliser le groupe par défaut.

      • PourConteneurisation de fonction Lambda, choisissezUtiliser le groupe par défaut.

      • Pour Limite de mémoire, entrez 1024 MB.

      • Pour Expiration, entrez 10 seconds.

      • PourPinned, choisissezVrai.

        Pour plus d'informations, consultez Configuration du cycle de vie pour les fonctions Greengrass Lambda.

      • UNParamètres supplémentaires, pourAccès en lecture au répertoire /sys, choisissezActivé.

  2. ChoisissezAjout d'une fonction Lambda.

Étape 5 : Ajout d'un SageMaker Ressources de modèle optimisé pour le groupe Greengrass

Au cours de cette étape, créez une ressource pour le modèle d'inférence ML optimisé et chargez-le dans un compartiment Amazon S3. Ensuite, recherchez le modèle chargé Amazon S3 dans la sectionAWS IoT Greengrasset associez la nouvelle ressource 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éer une fonction Lambda d'inférence.

    Note

    Si vous utilisez l'exemple NVIDIA Jetson, vous devez plutôt utiliser le répertoire resnet18 dans l'exemple de package. Pour plus d'informations, consultez Configuration d'un NVIDIA Jetson TX2.

    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.

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

    zip -r resnet50.zip .
  3. Sur la page de configuration de groupe de votreAWS IoT Greengrass, choisissez leRessourcesonglet. 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_model.

  4. PourSource du modèle, choisissezUtilisez un modèle stocké dans S3, tel qu'un modèle optimisé via Deep Learning Compiler.

  5. UNURI S3, choisissezParcourir S3.

    Note

    Actuellement, optimisé SageMaker les modèles 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 de plus amples informations sur l'optimisation de modèle dans SageMaker, voir lesSageMaker Neo.

  6. Choisissez Charger un modèle.

  7. Dans l'onglet de la console Amazon S3, chargez le fichier zip dans un compartiment Amazon S3. Pour plus d'informations, consultezComment charger des fichiers ou des dossiers dans un compartiment S3 ?dans leManuel de l'utilisateur Amazon Simple 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.

  8. DansAWS IoT Greengrassonglet de la console, localisez puis choisissez le 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.

  9. DansChemin de destination, saisissez/ml_model.

    Le chemin de destination mis à jour.

    Il s'agit de la destination pour le modèle local dans l'espace de noms d'exécution Lambda. Lorsque vous déployez le groupe, AWS IoT Greengrass permet de récupérer le package de modèle source, puis d'extraire 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.

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

    1. UNPropriétaire du groupe système et autorisations d'accès aux fichiers, choisissezSpécifier le groupe système et les autorisations.

    2. ChoisissezAccès en lecture seule, puis.Ajout d'une ressource.

Étape 6 : Ajouter la ressource d'appareil de votre caméra au groupe Greengrass

Au cours de cette étape, créez une ressource pour le module de caméra et affiliez-la à la fonction Lambda. Cela permet à la fonction Lambda d'accéder à ses ressources sur l'appareil principal.

Note

Si vous exécutez en mode non conteneurisé,AWS IoT Greengrasspeut 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 de groupe, choisissez leRessourcesonglet.

  2. Sur leDes ressources locales, choisissezAjout d'une ressource locale.

  3. Dans la pageAjout d'une ressource locale, utilisez les valeurs suivantes :

    • Sous Resource Name (Nom de la ressource), entrez videoCoreSharedMemory.

    • Pour Type de ressource, choisissez Appareil.

    • PourChemin de l'appareil local, saisissez/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.

    • PourPropriétaire du groupe système et autorisations d'accès aux fichiers, choisissezAjouter automatiquement les autorisations de système de fichiers du groupe de fichiers du groupe de système de fichiers du groupe.

      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 plus d'informations, consultez Autorisation d'accès fichier pour le propriétaire du groupe.

  4. Au bas de la page, choisissezAjout d'une ressource.

  5. À partir de laRessources, créez une autre ressource locale en choisissantAdditionet utilisez les valeurs suivantes :

    • Sous Resource Name (Nom de la ressource), entrez videoCoreInterface.

    • Pour Type de ressource, choisissez Appareil.

    • PourChemin de l'appareil local, saisissez/dev/vchiq.

    • PourPropriétaire du groupe système et autorisations d'accès aux fichiers, choisissezAjouter automatiquement les autorisations de système de fichiers du groupe de fichiers du groupe de système de fichiers du groupe.

  6. Choisissez Add resource (Ajouter ressource).

Étape 7 : Ajouter des abonnements au groupe Greengrass

Au cours de cette étape, ajoutez des abonnements au groupe. Ces abonnements permettent à la fonction Lambda d'envoyer les résultats des prédictions àAWS IoTen publiant dans une rubrique MQTT.

  1. Sur la page de configuration de groupe, choisissez leSubscriptions, puisAjouter un abonnement.

  2. Dans la pageCréer un abonnement, configurez la source et la cible comme suit :

    1. DansType de source, choisissezFonction Lambdaet choisissezoptimizedImageClassification.

    2. DansTarget type (Type de cible), choisissezServiceet choisissezCloud IoT.

    3. DansFiltre de rubriques, saisissez/resnet-50/predictionset choisissezCréer un abonnement.

  3. Ajoutez un second abonnement. Cliquez sur l'ongletSubscriptions, choisissezAjouter un abonnementet configurez la source et la cible comme suit :

    1. DansType de source, choisissezServiceset choisissezCloud IoT.

    2. DansTarget type (Type de cible), choisissezFonction Lambdaet choisissezoptimizedImageClassification.

    3. DansFiltre de rubriques, saisissez/resnet-50/testet choisissezCréer un abonnement.

Étape 8 : Déployer le groupe Greengrass

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. Vérifiez les éléments suivants :AWS IoT Greengrasscore est en cours d'exécution. 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.

    2. Pour démarrer le démon :

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  2. Sur la page de configuration de groupe, choisissezDéploiement.

  3. Dans la pageFonctions Lambdaonglet, sélectionnezDétecteur IPet choisissezModifier.

  4. À partir de laModifier les paramètres du détecteur IPboîte de dialogue, sélectionnezDétecter et remplacer automatiquement les points de terminaison des courtiers MQTTet choisissezEnregistrer.

    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 AWS IoT Greengrass prend é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 duRôle de service Greengrasset associez-le à votreCompte AWSdans les actuelsRégion AWS. Ce rôle permetAWS IoT Greengrasspour accéder à vos ressources dansAWSServices .

    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 êtreTerminé.

    Pour de plus amples informations sur les déploiements, veuillez consulterDéploiement de groupes AWS IoT Greengrass sur un noyau AWS IoT Greengrass Core. Pour bénéficier d'une aide à la résolution des problèmes, consultez Résolution des problèmes de AWS IoT Greengrass.

Tester l'exemple d'inférence

À 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 pousse la fonction Lambda à prendre une photo avec votre Raspberry Pi et à effectuer des inférences sur l'image qu'elle 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. Dans la pageAWS IoTpage d'accueil de la console, sousTest, choisissezClient de test MQTT.

  2. PourSubscriptions, choisissezAbonnement à une rubrique. Utilisez les valeurs suivantes. Conservez les valeurs par défaut des autres options.

    • Pour Rubrique d'abonnement, entrez /resnet-50/predictions.

    • UNConfiguration supplémentaire, pourAffichage de la charge utile MQTT, choisissezAffichage des charges utiles sous forme de chaînes.

  3. Choisissez Subscribe.

  4. ChoisissezPublier dans une rubrique, saisissez/resnet-50/testen tant queNom de la rubrique, et choisissezPublier.

  5. Si le test réussit, le message publié provoque la capture d'une image par la caméra Raspberry Pi. Un message provenant de la fonction Lambda s'affiche en 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

Pour exécuter ce didacticiel sur un appareil Intel Atom, vous devez fournir des images source, configurer la fonction Lambda et ajouter une autre ressource d'appareil local. Pour utiliser le processeur graphique à des fins d'inférence, assurez-vous que les logiciels suivants sont installés sur votre appareil :

  1. Téléchargez les images statiques PNG ou JPG pour la fonction Lambda à utiliser pour la classification d'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 fait partie du package de déploiement de fonction Lambda que vous chargez dansÉtape 3 : Créer une fonction Lambda d'inférence.

    Note

    Si vous utilisez AWS DeepLens, vous pouvez utiliser la caméra embarqué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 de plus amples informations, veuillez consulterMettre à jour votreAWS DeepLensappareildans leAWS DeepLensManuel du développeur.

  2. Modifiez la configuration de la fonction Lambda. Suivez la procédure décrite dans Étape 4 : Ajouter la fonction Lambda au groupe Greengrass.

    Note

    Nous vous recommandons d'exécuter votre fonction Lambda sans conteneurisation, à moins que votre analyse de rentabilisation ne l'exige. Cela permet d'accéder au GPU 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 à votreAWS IoT GreengrassFonctions Lambda.

    1. Pour exécuter sans conteneurisation :

      • PourUtilisateur et groupe du système, choisissezAnother user ID/group ID. PourID utilisateur du système, saisissez0. PourID de groupe système, saisissez0.

        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, veuillez consulterDéfinition de l'identité d'accès par défaut pour les fonctions Lambda dans un groupe.

        Astuce

        Vous devez également mettre à jour votreconfig.jsonpour accorder à l'accès root à votre fonction Lambda. Pour la procédure, veuillez consulterExécution d'une fonction Lambda en tant que root.

      • PourConteneurisation de fonction Lambda, choisissezAucun conteneur.

        Pour de plus amples informations sur l'exécution sans conteneurisation, veuillez consulterConsidérations à prendre en compte lors du choix de la conteneurisation des fonctions Lambda.

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

      • PourPinned, choisissezVrai.

      • UNParamètres supplémentaires, pourAccès en lecture au répertoire /sys, choisissezActivé.

    2. Pour exécuter plutôt en mode conteneurisé :

      Note

      Nous ne recommandons pas une exécution en mode conteneurisé, à moins que votre cas d'utilisation ne 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.

      • PourPinned, choisissezVrai.

      • UNParamètres supplémentaires, pourAccès en lecture au répertoire /sys, choisissezActivé.

  3. 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éer une fonction Lambda d'inférence. 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 : Ajout d'un SageMaker Ressources de modèle optimisé pour le groupe Greengrass 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_model.

    • Chargez le fichier resnet50.zip.

  4. 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é,AWS IoT Greengrasspeut accéder au GPU de votre appareil sans configurer les ressources de l'appareil.

    1. Sur la page de configuration de groupe, choisissez leRessourcesonglet.

    2. DansDes ressources localessection, choisissezAjout d'une ressource locale.

    3. Définissez la ressource :

      • Sous Resource Name (Nom de la ressource), entrez renderD128.

      • Pour Type de ressource, choisissez Appareil.

      • PourChemin de l'appareil local, saisissez/dev/dri/renderD128.

      • PourPropriétaire du groupe système et autorisations d'accès aux fichiers, choisissezAjouter automatiquement les autorisations de système de fichiers du groupe de fichiers du groupe de système de fichiers du groupe.

Configuration d'un NVIDIA Jetson TX2

Pour exécuter ce didacticiel sur un NVIDIA Jetson TX2, fournissez des images source, configurez la fonction Lambda et ajoutez des ressources d'appareil local supplémentaires.

  1. Assurez-vous que votre appareil Jetson est configuré pour que vous puissiez installer le logiciel AWS IoT Greengrass Core et utiliser le processeur graphique pour inférence. Pour de plus amples informations sur la configuration de votre appareil, veuillez consulter Configuration d'autres appareils. Pour utiliser le processeur graphique pour inférence sur un NVIDIA Jetson TX2, vous devez installer CUDA 10.0 et cuDNN 7.0 sur votre appareil lorsque vous créez l'image de votre carte avec Jetpack 4.3.

  2. Téléchargez les images statiques PNG ou JPG pour la fonction Lambda à utiliser pour la classification d'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 fait partie du package de déploiement de fonction Lambda que vous chargez dansÉtape 3 : Créer une fonction Lambda d'inférence.

    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.

  3. Modifiez la configuration de la fonction Lambda. Suivez la procédure décrite dans Étape 4 : Ajouter la fonction Lambda au groupe Greengrass.

    Note

    Nous vous recommandons d'exécuter votre fonction Lambda sans conteneurisation, à moins que votre analyse de rentabilisation ne l'exige. Cela permet d'accéder au GPU 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 à votreAWS IoT GreengrassFonctions Lambda.

    1. Pour exécuter sans conteneurisation :

    2. Pour exécuter plutôt en mode conteneurisé :

      Note

      Nous ne recommandons pas une exécution en mode conteneurisé, à moins que votre cas d'utilisation ne 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.

      • PourPinned, choisissezVrai.

      • UNParamètres supplémentaires, pourAccès en lecture au répertoire /sys, choisissezActivé.

  4. 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éer une fonction Lambda d'inférence. 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 : Ajout d'un SageMaker Ressources de modèle optimisé pour le groupe Greengrass 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_model.

    • Chargez le fichier resnet18.zip.

  5. 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é,AWS IoT Greengrasspeut accéder au GPU de votre appareil sans configurer les ressources de l'appareil.

    1. Sur la page de configuration de groupe, choisissez leRessourcesonglet.

    2. DansDes ressources localessection, choisissezAjout d'une ressource locale.

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

      • PourPropriétaire du groupe système et autorisations d'accès aux fichiers, choisissezAjouter automatiquement les autorisations de système de fichiers du groupe de fichiers du groupe de système de fichiers du groupe.

         

        Nom

        Chemin de l'appareil

        nvhost-ctrl

        /dev/nvhost-ctrl

        nvhost-gpu

        /dev/nvhost-gpu

        nvhost-ctrl-gpu

        /dev/nvhost-ctrl-gpu

        nvhost-dbg-gpu

        /dev/nvhost-dbg-gpu

        nvhost-prof-gpu

        /dev/nvhost-prof-gpu

        nvmap

        /dev/nvmap

        nvhost-vic

        /dev/nvhost-vic

        tegra_dc_ctrl

        /dev/tegra_dc_ctrl

  6. 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 : Ajout d'un SageMaker Ressources de modèle optimisé pour le groupe Greengrass.

    Note

    Si vous exécutez en mode non conteneurisé,AWS IoT Greengrasspeut accéder à la caméra de votre appareil sans configurer les ressources de l'appareil.

    • Pour Type de ressource, choisissez Volume.

    • PourPropriétaire du groupe système et autorisations d'accès aux fichiers, choisissezAjouter automatiquement les autorisations de système de fichiers du groupe de fichiers du groupe de système de fichiers du groupe.

       

      Nom

      Chemin source

      Chemin de destination

      shm

      /dev/shm

      /dev/shm

      tmp

      /tmp

      /tmp

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

  8. 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 en appliquant les mises à jour qui suivent :

    • PourSubscriptions, choisissezS'abonner à une rubrique. Pour Rubrique d'abonnement, entrez /resnet-18/predictions.

    • Dans la page /resnet-18/predictions, spécifiez la rubrique /resnet-18/test sur laquelle publier.

Dépannage de l'inférence ML AWS IoT Greengrass

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

  1. Connectez-vous en tant qu'utilisateur racine et accédez au répertoire log. L'accès aux journaux AWS IoT Greengrass nécessite les autorisations racines.

    sudo su cd /greengrass/ggc/var/log
  2. Checkruntime.logpour toutes erreurs.

    cat system/runtime.log | grep 'ERROR'

    Vous pouvez également rechercher les éventuelles erreurs dans le journal des fonctions Lambda définies par l'utilisateur :

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

    Pour plus d'informations, consultez Résolution des problèmes liés aux journaux.

 

Vérifiez que la fonction Lambda a été déployée avec succès

  1. Affichez le contenu de Lambda déployé dans le/lambdaannuaire. 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
  2. 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éer une fonction Lambda d'inférence.

    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

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

    ps aux | grep lambda-function-name

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

  2. Saisissez l'espace de noms d'exécution Lambda. Veillez à remplacer la valeur d'espace réservé pid avant d'exécuter la commande.

    Note

    Ce répertoire et son contenu se trouvent dans l'espace de noms d'exécution Lambda ; par conséquent, ils ne sont pas visibles dans un espace de noms Linux classique.

    sudo nsenter -t pid -m /bin/bash
  3. 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

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 pour votre fonction Lambda.

Étapes suivantes

Ensuite, explorez d'autres modèles optimisés. Pour plus d'informations, consultez la documentationSageMaker Neo.