Tutoriel : Configurer, connecter et vérifier un module IoT Edge pour un GPU

S’applique à :Coche IoT Edge 1.5 IoT Edge 1.5 Coche IoT Edge 1.4 IoT Edge 1.4

Important

IoT Edge 1.5 LTS et IoT Edge 1.4 LTS sont desversions prises en charge. IoT Edge 1.4 LTS sera en fin de vie le 12 novembre 2024. Si vous utilisez une version antérieure, consultez l’article Mettre à jour IoT Edge.

Ce tutoriel vous montre comment créer une machine virtuelle avec GPU. À partir de la machine virtuelle, vous verrez comment exécuter un appareil IoT Edge qui alloue du travail de l’un de ses modules à votre GPU.

Nous allons utiliser le portail Azure, Azure Cloud Shell et la ligne de commande de votre machine virtuelle pour :

  • Créer une machine virtuelle compatible GPU
  • Installer l’extension de pilote NVIDIA sur la machine virtuelle
  • Configurer un module sur un appareil IoT Edge pour allouer du travail à un GPU

Prérequis

  • Compte Azure - Créer un compte gratuit

  • Azure IoT Hub - Créer un IoT Hub

  • Azure IoT Edge

    Si vous n’avez pas encore d’appareil IoT Edge et que vous devez en créer un rapidement, exécutez la commande suivante. Utilisez Azure Cloud Shell dans le portail Azure. Créez un nom d’appareil pour <DEVICE-NAME> et remplacez le <IOT-HUB-NAME> de l’IoT par votre propre nom.

    az iot hub device-identity create --device-id <YOUR-DEVICE-NAME> --edge-enabled --hub-name <YOUR-IOT-HUB-NAME>
    

    Pour plus d’informations sur la création d’un appareil IoT Edge, consultez Démarrage rapide : Déployer votre premier module IoT Edge sur un appareil virtuel Linux. Plus loin dans ce tutoriel, nous allons ajouter un module NVIDIA à notre appareil IoT Edge.

Créer une machine virtuelle optimisée pour le GPU

Pour créer une machine virtuelle optimisée par GPU, le choix de la taille appropriée est important. Toutes les tailles de machine virtuelle ne prennent pas en charge le traitement GPU. En outre, il existe différentes tailles de machine virtuelle pour différentes charges de travail. Pour plus d’informations, consultez Tailles de machines virtuelles optimisées par GPU ou essayez le Sélecteur de machines virtuelles.

Nous allons créer une machine virtuelle IoT Edge avec le modèle Azure Resource Manager (ARM) dans GitHub, puis la configurer pour qu’elle soit optimisée par GPU.

  1. Accédez au modèle de déploiement de machine virtuelle IoT Edge dans GitHub : Azure/iotedge-vm-deploy.

  2. Sélectionnez le bouton Déployer dans Azure, qui lance la création d’une machine virtuelle personnalisée pour vous dans le portail Azure.

  3. Renseignez les champs Déploiement personnalisé avec vos informations d’identification et ressources Azure :

    Propriété Description ou exemple de valeur
    Abonnement Choisissez l’abonnement de votre compte Azure.
    Groupe de ressources Ajoutez votre groupe de ressources Azure.
    Région East US
    Les machines virtuelles avec GPU ne sont pas disponibles dans toutes les régions.
    Préfixe d’étiquette DNS Créez un nom pour votre machine virtuelle.
    Nom d’utilisateur d’administrateur adminUser
    Vous pouvez également créer votre propre nom d’utilisateur.
    Chaîne de connexion de l’appareil Copiez votre chaîne de connexion à partir de votre appareil IoT Edge, puis collez-la ici.
    Taille de la machine virtuelle Standard_NV6
    Type d'authentification Choisissez un mot de passe ou une clé publique SSH, puis créez un mot de passe ou un nom de paire de clés si nécessaire.

    Conseil

    Vérifiez quelles machines virtuelles GPU sont prises en charge dans chaque région : Produits disponibles par région.

    Pour vérifier la région que votre abonnement Azure autorise, essayez cette commande Azure à partir du portail Azure. Le N dans Standard_N signifie qu’il s’agit d’une machine virtuelle compatible GPU.

    az vm list-skus --location <YOUR-REGION> --size Standard_N --all --output table
    
  4. Sélectionnez le bouton Vérifier + créer en bas, puis cliquez sur le bouton Créer. Le déploiement peut prendre jusqu’à une minute.

Installer l’extension NVIDIA

Maintenant que nous avons une machine virtuelle optimisée par GPU, installons l’extension NVIDIA sur la machine virtuelle à l’aide du portail Azure.

  1. Ouvrez votre machine virtuelle dans le portail Azure, puis sélectionnez Extensions + applications dans le menu de gauche.

  2. Sélectionnez Ajouter et choisissez Extension de pilote GPU NVIDIA dans la liste, puis sélectionnez Suivant.

  3. Choisissez Vérifier + créer, puis Créer. Le déploiement peut prendre jusqu’à 30 minutes.

  4. Pour confirmer l’installation dans le portail Azure, revenez au menu Extensions + applications de votre machine virtuelle. La nouvelle extension nommée NvidiaGpuDriverLinux devrait figurer dans votre liste d’extensions et afficher Approvisionnement réussi sous État.

  5. Pour confirmer l’installation à l’aide d’Azure Cloud Shell, exécutez cette commande pour répertorier vos extensions. Remplacez les espaces réservés <> par vos valeurs :

    az vm extension list --resource-group <YOUR-RESOURCE-GROUP> --vm-name <YOUR-VM-NAME> -o table
    
  6. Avec un module NVIDIA, nous allons utiliser le programme NVIDIA System Management Interface, également appelé nvidia-smi.

    À partir de votre appareil, installez le package nvidia-smi en fonction de votre version d’Ubuntu. Pour ce tutoriel, nous allons installer nvidia-utils-515 pour Ubuntu 20.04. Sélectionnez Y quand vous y êtes invité.

    sudo apt install nvidia-utils-515
    

    Voici une liste de toutes les versions de nvidia-smi. Si vous exécutez nvidia-smi sans l’installer d’abord, cette liste s’affiche dans votre console.

    Capture d’écran de toutes les versions `nvidia-smi`.

  7. Après l’installation, exécutez cette commande pour confirmer son installation :

    nvidia-smi
    

    Une table de confirmation s’affiche, semblable à celle-ci.

    Capture d’écran du tableau de pilotes NVIDIA.

Notes

L’extension NVIDIA est un moyen simplifié d’installer les pilotes NVIDIA, mais vous aurez peut-être besoin de plus de personnalisation. Pour plus d’informations sur les installations personnalisées sur des machines virtuelles de série N, consultez Installer les pilotes GPU NVIDIA sur les machines virtuelles série N exécutant Linux.

Activer un module avec accélération GPU

Il existe différentes façons d’activer un module IoT Edge afin qu’il utilise un GPU pour le traitement. L’une des méthodes consiste à configurer un module IoT Edge existant sur votre appareil pour qu’il soit accéléré par GPU. Une autre méthode consiste à utiliser un module de conteneur préfabriqué, par exemple un module à partir de NVIDIA DIGITS qui est déjà optimisé par GPU. Voyons comment les deux méthodes fonctionnent.

Activer le GPU dans un module existant à l’aide de DeviceRequests

Si vous disposez d’un module existant sur votre appareil IoT Edge, l’ajout d’une configuration à l’aide de DeviceRequests dans les createOptions du manifeste de déploiement rend le module optimisé par GPU. Suivez ces étapes pour configurer un module existant.

  1. Accédez à votre IoT Hub dans le portail Azure, puis, dans le menu Gestion des appareils, choisissez Appareils.

  2. Sélectionnez votre appareil IoT Edge pour l’ouvrir.

  3. Sélectionnez l’onglet Définir les modules en haut.

  4. Sélectionnez le module que vous souhaitez activer pour l’utilisation du GPU dans la liste Modules IoT Edge.

  5. Un panneau latéral s’ouvre, choisissez l’onglet Options de création de conteneur.

  6. Copiez cette chaîne JSON HostConfig et collez-la dans la zone Options de création.

     {
         "HostConfig": {
             "DeviceRequests": 
             [
                 {
                     "Count": -1,
                     "Capabilities": [
                         [
                             "gpu"
                         ]
                     ]
                 }
             ]
         }
     }
    
  7. Sélectionnez Mettre à jour.

  8. Sélectionnez Revoir + créer. Le nouvel objet HostConfig est désormais visible dans le module settings.

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

  10. Pour confirmer que la nouvelle configuration fonctionne, exécutez cette commande dans votre machine virtuelle :

    sudo docker inspect <YOUR-MODULE-NAME>
    

    Vous devez voir les paramètres que vous avez spécifiés pour DeviceRequests dans l’impression JSON dans la console.

Notes

Pour mieux comprendre le paramètre DeviceRequests, affichez le code source : moby/host_config.go

Activer un GPU dans un module NVIDIA préfabriqué

Ajoutons un module NVIDIA DIGITS à l’appareil IoT Edge, puis allouons un GPU au module en définissant ses variables d’environnement. Ce module NVIDIA se trouve déjà dans un conteneur Docker.

  1. Dans le portail Azure, dans le menu IoT Edge de votre IoT Hub, sélectionnez votre appareil IoT Edge.

  2. Sélectionnez l’onglet Définir les modules en haut.

  3. Sous le titre des modules IoT Edge, sélectionnez + Ajouter, puis choisissez Module IoT Edge.

  4. Indiquez un nom dans le champ Nom du module IoT Edge.

  5. Sous l’onglet Paramètres du module, ajoutez nvidia/digits:6.0 au champ URI d’image.

  6. Sélectionnez l’onglet variables d’environnement.

  7. Ajoutez le nom de la variable d’environnement NVIDIA_VISIBLE_DEVICES avec la valeur 0. Cette variable contrôle les GPU visibles par l’application conteneurisée s’exécutant sur l’appareil edge. La variable d’environnement NVIDIA_VISIBLE_DEVICES peut être définie sur une liste séparée par des virgules d’ID d’appareil, qui correspondent aux GPU physiques dans le système. Par exemple, s’il existe deux GPU dans le système avec les ID d’appareil 0 et 1, la variable peut être définie sur « NVIDIA_VISIBLE_DEVICES=0,1 » pour rendre les deux GPU visibles pour le conteneur. Dans cet article, étant donné que la machine virtuelle n’a qu’un seul GPU, nous allons utiliser le premier (et le seul).

    Nom Type Valeur
    NVIDIA_VISIBLE_DEVICES Texte 0
  8. Sélectionnez Ajouter.

  9. Sélectionnez Vérifier + créer. Les propriétés de votre manifeste de déploiement s’affichent.

  10. Sélectionnez Créer pour créer le module.

  11. Sélectionnez Actualiser pour mettre à jour votre liste de modules. Le module prend quelques minutes pour afficher En cours d’exécution dans État du runtime, continuez donc à actualiser l’appareil.

  12. À partir de votre appareil, exécutez cette commande pour confirmer que votre nouveau module NVIDIA existe et s’exécute.

    iotedge list
    

    Vous devriez voir votre module NVIDIA dans une liste de modules sur votre appareil IoT Edge avec l’état running.

    Capture d’écran du résultat de la commande ’iotedge list’.

Notes

Pour plus d’informations sur le module conteneur NVIDIA DIGITS, consultez la documentation Deep Learning Digits.

Nettoyer les ressources

Si vous souhaitez continuer avec d’autres tutoriels IoT Edge, vous pouvez utiliser l’appareil que vous avez créé pour celui-ci. Sinon, vous pouvez supprimer les ressources Azure que vous avez créées dans cet article pour éviter les frais.

Si vous avez créé votre machine virtuelle et un IoT Hub dans un nouveau groupe de ressources, vous pouvez supprimer ce groupe, ce qui supprimera aussi toutes les ressources associées. Vérifiez le contenu du groupe de ressources pour être certain que vous ne voulez rien en conserver. Si vous ne voulez pas supprimer le groupe entier, vous pouvez supprimer des ressources individuelles (machine virtuelle, appareil ou module GPU) à la place.

Important

La suppression d’un groupe de ressources est irréversible.

Utilisez la commande suivante pour supprimer votre groupe de ressources Azure. La suppression d’un groupe de ressources peut prendre plusieurs minutes.

az group delete --name <YOUR-RESOURCE-GROUP> --yes

Vous pouvez vérifier que le groupe de ressources est supprimé en consultant la liste des groupes de ressources.

az group list

Étapes suivantes

Cet article vous a aidé à configurer votre machine virtuelle et votre appareil IoT Edge pour qu’il soit accéléré par GPU. Pour exécuter une application avec une configuration similaire, essayez le parcours d’apprentissage pour le Développement NVIDIA DeepStream avec Microsoft Azure. Le tutoriel Learn vous montre comment développer des applications vidéo intelligentes optimisées qui peuvent consommer plusieurs sources vidéo, image et audio.