Esercitazione: Configurare, connettere e verificare un modulo IoT Edge per una GPU

Si applica a: Segno di spunta IoT Edge 1.5 IoT Edge 1.5 Segno di spunta IoT Edge 1.4 IoT Edge 1.4

Importante

IoT Edge 1.5 LTS e IoT Edge 1.4 LTS sono versioni supportate. IoT Edge 1.4 LTS raggiungerà il fine vita il 12 novembre 2024. Se si usa una versione precedente, vedere Aggiornare IoT Edge.

Questa esercitazione illustra come creare una macchina virtuale abilitata per la GPU. Dalla macchina virtuale si vedrà come eseguire un dispositivo IoT Edge che alloca il lavoro da uno dei relativi moduli alla GPU.

Si userà il portale di Azure, Azure Cloud Shell e la riga di comando della macchina virtuale per:

  • Creare una macchina virtuale con supporto per GPU
  • Installare l'estensione del driver NVIDIA nella macchina virtuale
  • Configurare un modulo in un dispositivo IoT Edge per allocare il lavoro a una GPU

Prerequisiti

Creare una macchina virtuale ottimizzata per la GPU

Per creare una macchina virtuale ottimizzata per la GPU, è importante sceglierne le dimensioni appropriate. Non tutte le dimensioni delle macchine virtuali supportano l'elaborazione GPU. Sono inoltre disponibili dimensioni di macchina virtuale diverse per carichi di lavoro diversi. Per altre informazioni, vedere Dimensioni delle macchine virtuali ottimizzate per la GPU oppure Selettore di macchine virtuali.

Si creerà una macchina virtuale IoT Edge con il modello di Azure Resource Manager (ARM) in GitHub, quindi la si configurerà in modo che risulti ottimizzata per la GPU.

  1. Passare al modello di distribuzione di macchine virtuali IoT Edge in GitHub: Azure/iotedge-vm-deploy.

  2. Selezionare il pulsante Distribuisci in Azure, che avvia la creazione di una macchina virtuale personalizzata nel portale di Azure.

  3. Compilare i campi Distribuzione personalizzata con le credenziali e le risorse di Azure:

    Proprietà Descrizione o valore di esempio
    Subscription Scegliere la sottoscrizione all’account di Azure.
    Gruppo di risorse Aggiungere il proprio gruppo di risorse di Azure.
    Paese East US
    Le macchine virtuali della GPU non sono disponibili in tutte le aree.
    Prefisso etichetta DNS Creare un nome per la macchina virtuale.
    Nome utente amministratore adminUser
    In alternativa, creare il proprio nome utente.
    Stringa di connessione del dispositivo Copiare la stringa di connessione dal dispositivo IoT Edge, quindi incollarla qui.
    Dimensioni della VM Standard_NV6
    Tipo di autenticazione Scegliere password o chiave pubblica SSH, quindi creare una password o un nome di coppia di chiavi, se necessario.

    Suggerimento

    Controllare quali macchine virtuali GPU sono supportate in ogni area: Prodotti disponibili in base all'area.

    Per controllare l’area consentita dalla sottoscrizione di Azure, provare questo comando di Azure dal portale di Azure. Il N in Standard_N significa che si tratta di una macchina virtuale abilitata per la GPU.

    az vm list-skus --location <YOUR-REGION> --size Standard_N --all --output table
    
  4. Selezionare il pulsante Rivedi e crea nella parte inferiore della pagina, quindi il pulsante Crea. Il completamento della distribuzione può richiedere fino a un minuto.

Installare l'estensione NVIDIA

Ora che è disponibile una macchina virtuale ottimizzata per la GPU, è possibile installare l'estensione NVIDIA nella macchina virtuale usando il portale di Azure.

  1. Aprire la macchina virtuale nel portale di Azure e selezionare Estensioni e applicazioni dal menu a sinistra.

  2. Selezionare Aggiungi e scegliere Estensione del driver GPU NVIDIA dall'elenco, quindi selezionare Avanti.

  3. Scegliere Rivedi e crea, quindi Crea. Il completamento della distribuzione può richiedere fino a 30 minuti.

  4. Per confermare l'installazione nel portale di Azure, tornare al menu Estensioni e applicazioni nella macchina virtuale. La nuova estensione denominata NvidiaGpuDriverLinux deve trovarsi nell'elenco delle estensioni e visualizzare Provisioning riuscitoalla voce Stato.

  5. Per confermare l'installazione utilizzando Azure Cloud Shell, eseguire questo comando per elencare le estensioni. Sostituire i segnaposto <> con i valori:

    az vm extension list --resource-group <YOUR-RESOURCE-GROUP> --vm-name <YOUR-VM-NAME> -o table
    
  6. Con un modulo NVIDIA si userà il programma NVIDIA System Management Interface, noto anche come nvidia-smi.

    Dal dispositivo installare il pacchetto nvidia-smi in base alla versione di Ubuntu. In questa esercitazione viene installato nvidia-utils-515 per Ubuntu 20.04. Selezionare Y quando richiesto nell'installazione.

    sudo apt install nvidia-utils-515
    

    Ecco un elenco di tutte le versioni di nvidia-smi. Se si esegue nvidia-smi senza averlo prima installato, questo elenco verrà stampato nella console.

    Screenshot di tutte le versioni di nvidia-smi.

  7. Dopo l'installazione, eseguire questo comando per verificare che sia installato:

    nvidia-smi
    

    Verrà visualizzata una tabella di conferma simile a questa.

    Screenshot della tabella dei driver NVIDIA.

Nota

L'estensione NVIDIA è un modo semplificato per installare i driver NVIDIA, ma potrebbe essere necessaria una maggiore personalizzazione. Per altre informazioni sulle installazioni personalizzate nelle macchine virtuali serie N, vedere Installare driver GPU NVIDIA in macchine virtuali serie N che eseguono Linux.

Abilitare un modulo con accelerazione GPU

Esistono diversi modi per abilitare un modulo IoT Edge in modo che usi una GPU per l'elaborazione. Un modo è quello di configurare un modulo IoT Edge esistente sul dispositivo in modo che venga accelerato dalla GPU. Un altro modo consiste nell'usare un modulo contenitore prefabbricato, ad esempio un modulo di NVIDIA DIGITS già ottimizzato per la GPU. Vediamo come vengono eseguiti entrambe le modalità.

Abilitare la GPU in un modulo esistente usando DeviceRequests

Se si dispone di un modulo esistente nel dispositivo IoT Edge, l'aggiunta di una configurazione tramite DeviceRequests in createOptions del manifesto della distribuzione rende il modulo ottimizzato per la GPU. Per configurare un modulo esistente, eseguire le operazioni seguenti.

  1. Passare all'hub IoT nel portale di Azure e scegliere Dispositivi nel menu Gestione dispositivi.

  2. Selezionare il dispositivo IoT Edge per aprirlo.

  3. Selezionare la scheda Imposta moduli in cima.

  4. Selezionare il modulo da abilitare per l'uso della GPU nell'elenco Moduli IoT Edge.

  5. Nel pannello laterale che si pare, scegliere la scheda Opzioni di creazione del contenitore.

  6. Copiare questa stringa JSON HostConfig e incollarla nella casella Crea opzioni.

     {
         "HostConfig": {
             "DeviceRequests": 
             [
                 {
                     "Count": -1,
                     "Capabilities": [
                         [
                             "gpu"
                         ]
                     ]
                 }
             ]
         }
     }
    
  7. Selezionare Aggiorna.

  8. Selezionare Rivedi e crea. Il nuovo oggetto HostConfig è ora visibile nella settings del modulo.

  9. Seleziona Crea.

  10. Per confermare il funzionamento della nuova configurazione, eseguire questo comando nella macchina virtuale:

    sudo docker inspect <YOUR-MODULE-NAME>
    

    Verranno visualizzati i parametri specificati per DeviceRequests nella stampa JSON nella console.

Nota

Per comprendere meglio il parametro DeviceRequests, visualizzare il codice sorgente: moby/host_config.go

Abilitare una GPU in un modulo NVIDIA prefabbricato

Aggiungere un modulo NVIDIA DIGITS al dispositivo IoT Edge, quindi allocare una GPU al modulo impostandone le variabili di ambiente. Questo modulo NVIDIA si trova già in un contenitore Docker.

  1. Selezionare il dispositivo IoT Edge nel portale di Azure dal menu Dispositivi dell'hub IoT.

  2. Selezionare la scheda Imposta moduli in cima.

  3. Selezionare + Aggiungi sotto l'intestazione moduli IoT Edge e scegliere Modulo IoT Edge.

  4. Specificare un nome nel campo Nome modulo IoT Edge.

  5. Nella scheda Impostazioni modulo aggiungere nvidia/digits:6.0 al campo URI immagine.

  6. Selezionare la sceda Variabili di ambiente.

  7. Aggiungere il nome della variabile di ambiente NVIDIA_VISIBLE_DEVICES al valore 0. Questa variabile controlla quali GPU sono visibili all'applicazione in contenitori in esecuzione nel dispositivo perimetrale. La variabile di ambiente NVIDIA_VISIBLE_DEVICES può essere impostata su un elenco di ID dispositivo delimitato da virgole, che corrispondono alle GPU fisiche nel sistema. Ad esempio, se nel sistema sono presenti due GPU con ID dispositivo 0 e 1, la variabile può essere impostata su "NVIDIA_VISIBLE_DEVICES=0,1" per rendere visibili entrambe le GPU al contenitore. In questo articolo, poiché la macchina virtuale ha una sola GPU, verrà usata solo e soltanto la prima.

    Nome Type Valore
    NVIDIA_VISIBLE_DEVICES Testo 0
  8. Selezionare Aggiungi.

  9. Selezionare Rivedi e crea. Verranno visualizzate le proprietà del manifesto della distribuzione.

  10. Selezionare Crea per creare il modulo.

  11. Selezionare Aggiorna per aggiornare l’elenco dei moduli. Il modulo impiegherà alcuni minuti per visualizzare in esecuzione nello Stato di runtime, quindi continuare ad aggiornare il dispositivo.

  12. Dal dispositivo eseguire questo comando per verificare che il nuovo modulo NVIDIA esista e sia in esecuzione.

    iotedge list
    

    Il modulo NVIDIA dovrebbe essere visualizzato in un elenco di moduli nel dispositivo IoT Edge con lo stato running.

    Screenshot del risultato del comando 'iotedge list'.

Nota

Per altre informazioni sul modulo contenitore NVIDIA DIGITS, vedere la Documentazione delle cifre di Deep Learning.

Pulire le risorse

Per continuare con altre esercitazioni di IoT Edge, è possibile usare il dispositivo creato per questa esercitazione. In caso contrario, è possibile eliminare le risorse di Azure create per evitare addebiti.

Se la macchina virtuale e l'hub IoT sono stati creati in un nuovo gruppo di risorse, è possibile eliminare il gruppo, cosa che comporterà l’eliminazione di tutte le risorse associate. Verificare il contenuto del gruppo di risorse per assicurarsi che non vi siano dati da conservare. Se non si vuole eliminare l'intero gruppo, è possibile eliminare le singole risorse (macchina virtuale, dispositivo o modulo GPU).

Importante

L'eliminazione di un gruppo di risorse è irreversibile.

Usare il seguente comando per rimuovere il gruppo di risorse di Azure. L'eliminazione di un gruppo di risorse potrebbe richiedere alcuni minuti.

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

Per confermare la rimozione del gruppo di risorse, visualizzare l'elenco dei gruppi di risorse.

az group list

Passaggi successivi

Questo articolo ha consentito di configurare la macchina virtuale e il dispositivo IoT Edge in modo che vengano accelerati dalla GPU. Per eseguire un'applicazione con una configurazione simile, provare il percorso di apprendimento per lo Sviluppo NVIDIA DeepStream con Microsoft Azure. L'esercitazione di Learn illustra come sviluppare applicazioni video intelligenti ottimizzate che possono utilizzare più origini video, immagini e audio.