Come configurare l'inferenza di Machine Learning ottimizzata mediante la AWS Management Console - AWS IoT Greengrass

AWS IoT Greengrass Version 1 è entrato nella fase di estensione della vita utile il 30 giugno 2023. Per ulteriori informazioni, consulta la politica AWS IoT Greengrass V1 di manutenzione. Dopo questa data, AWS IoT Greengrass V1 non rilascerà aggiornamenti che forniscano funzionalità, miglioramenti, correzioni di bug o patch di sicurezza. I dispositivi che funzionano AWS IoT Greengrass V1 non subiranno interruzioni e continueranno a funzionare e a connettersi al cloud. Ti consigliamo vivamente di eseguire la migrazione a AWS IoT Greengrass Version 2, che aggiunge nuove importanti funzionalità e supporto per piattaforme aggiuntive.

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Come configurare l'inferenza di Machine Learning ottimizzata mediante la AWS Management Console

Per seguire le fasi di questo tutorial, è necessario utilizzareAWS IoT GreengrassCore v1.10 o successivo.

Puoi utilizzare il plugin SageMaker Compilatore di Deep Learning per ottimizzare l'efficienza delle previsioni dei modelli di inferenza Machine Learning nativi in Tensorflow, PyTorchframework, ONNX e XGBoost per un ingombro ridotto e prestazioni più veloci. Potrai quindi scaricare il modello ottimizzato e installare SageMaker Neo Deep Learning Runtime e distribuiscili nellaAWS IoT Greengrassdispositivi per un'inferenza più rapida.

Questo tutorial descrive come utilizzareAWS Management Consoleconfigurare un gruppo Greengrass per l'esecuzione di un esempio di inferenza Lambda che riconosca le immagini acquisite da una telecamera in locale, senza inviare i dati al cloud. L'esempio di inferenza seguente consente di accedere al modulo della telecamera in un Raspberry Pi. In questo tutorial, scaricherai un modello preconfigurato preparato da Resnet-50 e ottimizzato nel compilatore di Deep Learning. Utilizzerai quindi il modello per eseguire la classificazione delle immagini in locale sul dispositivo AWS IoT Greengrass.

Il tutorial include le seguenti fasi di alto livello:

Prerequisiti

Per completare questo tutorial, è necessario quanto segue:

Nota

In questo tutorial viene utilizzato un dispositivo Raspberry Pi, ma AWS IoT Greengrass supporta altre piattaforme, ad esempio Intel Atom e NVIDIA Jetson TX2. Se si utilizza l'esempio Intel Atom, potrebbe essere necessario installare Python 3.6 invece di Python 3.7. Per informazioni sulla configurazione del dispositivo in modo da poter installare il software AWS IoT Greengrass Core, consulta Configurazione di altri dispositivi.

Per piattaforme di terze parti cheAWS IoT Greengrassnon supporta, è necessario eseguire la funzione Lambda in modalità non containerizzata. Per eseguire in modalità non containerizzata, è necessario eseguire la funzione Lambda come radice. Per ulteriori informazioni, consulta Considerazioni sulla scelta della containerizzazione delle funzioni Lambda e Impostazione dell'identità di accesso predefinita per le funzioni Lambda in un gruppo.

Fase 1: Configurare il dispositivo Raspberry Pi

In questa fase, verranno installati gli aggiornamenti del sistema operativo Raspbian, il software del modulo della telecamera e le dipendenze Python e verrà abilitata l'interfaccia della telecamera.

Esegui i seguenti comandi nel terminale Raspberry Pi.

  1. Installare gli aggiornamenti in Raspbian.

    sudo apt-get update sudo apt-get dist-upgrade
  2. Installare l'interfaccia picamera per il modulo della telecamera e le altre librerie Python necessarie per questo tutorial.

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

    Convalidare l'installazione:

    • Assicurati che l'installazione di Python 3.7 includa pip.

      python3 -m pip

      Se pip non è installato, scaricarlo dal sito Web pip ed eseguire il comando seguente.

      python3 get-pip.py
    • Assicurati che la versione Python sia 3.7 o superiore.

      python3 --version

      Se l'output elenca una versione precedente, eseguire il comando seguente.

      sudo apt-get install -y python3.7-dev
    • Assicurati che Setuptools e Picamera siano stati installati correttamente.

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

      Se l'output non contiene errori, la convalida ha esito positivo.

    Nota

    Se l'eseguibile Python installato sul dispositivo è python3.7, utilizzare python3.7 invece di python3 per i comandi in questo tutorial. Assicurati che l'installazione di pip sia mappata alla versione python3.7 o python3 corretta per evitare errori di dipendenza.

  3. Riavvia il dispositivo Raspberry Pi.

    sudo reboot
  4. Apri lo strumento di configurazione di Raspberry Pi.

    sudo raspi-config
  5. Utilizza i tasti freccia per aprire Interfacing Options (Opzioni di interfaccia) e abilita l'interfaccia della telecamera. Se richiesto, consenti il riavvio del dispositivo.

  6. Utilizza il seguente comando per eseguire il test della configurazione della telecamera.

    raspistill -v -o test.jpg

    Viene visualizzata una finestra di anteprima sul dispositivo Raspberry Pi, viene salvata un'immagine denominata test.jpg nella directory corrente e vengono visualizzati informazioni sulla telecamera nel terminale Raspberry Pi.

Fase 2: Installa Amazon SageMaker Neo Deep Learning Runtime

In questa fase, installare il runtime di apprendimento profondo (DLR) sul Raspberry Pi.

Nota

Per questo tutorial si consiglia di installare la versione 1.1.0.

  1. Accedere al Raspberry Pi da remoto.

    ssh pi@your-device-ip-address
  2. Aprire la documentazione DLR, aprire Installazione DLR e individuare il wheel URL dei dispositivi Raspberry Pi. Seguire quindi le istruzioni per installare il DLR sul dispositivo. Ad esempio, è possibile utilizzare pip:

    pip3 install rasp3b-wheel-url
  3. Dopo aver installato il DLR, convalidare la seguente configurazione:

    • Assicurarsi che l'account di sistema ggc_user possa utilizzare la libreria DLR.

      sudo -u ggc_user bash -c 'python3 -c "import dlr"'
    • Assicurarsi che NumPy è installato.

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

Fase 3: Creazione di una funzione Lambda di inferenza

In questa fase, creare un pacchetto di distribuzione della funzione Lambda e una funzione Lambda. Quindi pubblicare una versione della funzione e creare un alias.

  1. Sul computer, scaricare l'esempio DLR per Raspberry Pi da Esempi di Machine Learning.

  2. Decomprimere il file dlr-py3-armv7l.tar.gz scaricato.

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

    La directory examples nel pacchetto di esempio estratto contiene il codice di funzione e le dipendenze.

    • inference.py è il codice di inferenza utilizzato in questo tutorial. È possibile utilizzare questo codice come modello per creare la propria funzione di inferenza.

    • greengrasssdkè la versione 1.5.0 diAWS IoT GreengrassSDK di base per Python.

      Nota

      Se è disponibile una nuova versione, è possibile scaricarla e aggiornare la versione dell'SDK nel pacchetto di distribuzione. Per ulteriori informazioni, consultaAWS IoT GreengrassSDK di Core per Pythonsul GitHub.

  3. Comprimere il contenuto della directory examples in un file denominato optimizedImageClassification.zip. Questo è il pacchetto di distribuzione.

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

    Il pacchetto di distribuzione contiene il codice di funzione e le dipendenze. Ciò include il codice che richiama le API Python del runtime di Deep Learning di Neo per eseguire l'inferenza con i modelli del compilatore Deep Learning.

    Nota

    Assicurarsi inoltre che i file .py e le dipendenze si trovino nella radice della directory.

  4. A questo punto, aggiungi la funzione Lambda al gruppo Greengrass.

    Dalla pagina della console Lambda, scegliFunzionie scegliCrea funzione.

  5. ScegliereAuthor from scratch (Crea da zero)e utilizzare i seguenti valori per creare la funzione:

    • Nel campo Function name (Nome funzione), immettere optimizedImageClassification.

    • In Runtime, scegliere Python 3.7.

    PerAutorizzazioni, mantenere l'impostazione predefinita. Questo crea un ruolo di esecuzione che concede le autorizzazioni Lambda di base. Tale ruolo non viene utilizzato daAWS IoT Greengrass.

    La sezione sulle informazioni di base della pagina Crea funzione.
  6. Scegli Create function (Crea funzione).

 

A questo punto, carica il pacchetto di distribuzione della funzione Lambda e registra il gestore.

  1. SulCodescheda, sottoCodice sorgente, scegliCarica da. Dal menu a discesa, scegli.zip.

    Il menu a discesa Carica da con file.zip evidenziato.
  2. Scegli iloptimizedImageClassification.zippacchetto di distribuzione, quindi scegliSave (Salva).

  3. SulCodetab per la funzione, sottoImpostazioni Runtime, scegliModificaree quindi immettere i valori seguenti.

    • In Runtime, scegliere Python 3.7.

    • Per Handler (Gestore), inserire inference.handler.

    Seleziona Save (Salva.

    La sezione delle impostazioni di Runtime con l'opzione Upload

 

A questo punto, pubblica la prima versione della funzione Lambda. Quindi, creare un alias per la versione.

Nota

I gruppi Greengrass possono fare riferimento a una funzione Lambda tramite alias (consigliato) o per versione. L'utilizzo di un alias semplifica la gestione degli aggiornamenti del codice perché non è necessario modificare la tabella di sottoscrizione o la definizione del gruppo quando il codice funzione viene aggiornato. Invece, è sufficiente puntare l'alias alla nuova versione della funzione.

  1. Nel menu Actions (Operazioni), seleziona Publish new version (Pubblica nuova versione).

    L'opzione Publish new version (Pubblica nuova versione) nel menu Actions (Azioni).
  2. Per Version description (Descrizione versione), immettere First version, quindi scegliere Publish (Pubblica).

  3. SuloptimizedImageClassification: 1pagina di configurazione, dallaOperazionimenu, scegliCreazione dell'alias.

    L'opzione Create alias (Crea alias) nel menu Actions (Azioni).
  4. Nella pagina Create a new alias (Crea un nuovo alias), utilizza i seguenti valori:

    • In Name (Nome), inserire mlTestOpt.

    • Per Version (Versione), immettere 1.

    Nota

    AWS IoT Greengrassnon supporta alias Lambda per$Versioni.

  5. Scegli Crea.

    A questo punto, aggiungi la funzione Lambda al gruppo Greengrass.

Fase 4: Aggiunta della funzione Lambda al gruppo Greengrass

In questa fase, aggiungere la funzione Lambda al gruppo, quindi configurarne il ciclo di vita.

Innanzitutto, aggiungi la funzione Lambda al gruppo Greengrass.

  1. NellaAWS IoTRiquadro di navigazione della console, sottoManage (Gestione), espanificareDispositivi Greengrassquindi scegliereGruppi (V1).

  2. Nella pagina di configurazione dei gruppi, scegliereFunzioni Lambdatab e scegliInserisci.

  3. SelezionaLambda function (Funzione Lambda)e sceglioptimizedImageClassification.

  4. SulVersione delle funzioni Lambda, scegli l'alias della versione che hai pubblicato.

 

A questo punto, configura il ciclo di vita della funzione Lambda.

  1. NellaConfigurazione delle funzioni Lambda, effettuare i seguenti aggiornamenti.

    Nota

    Ti consigliamo di usare la funzione Lambda senza containerizzazione solo se richiesto dal business case. Ciò consente l'accesso alla GPU e alla fotocamera del dispositivo senza configurare le risorse del dispositivo. Se si esegue senza containerizzazione, è necessario concedere anche l'accesso root al proprioAWS IoT GreengrassFunzioni Lambda.

    1. Per eseguire senza containerizzazione:

    2. Per eseguire invece in modalità containerizzata:

      Nota

      Ti consigliamo di non usare l'esecuzione in modalità containerizzata solo se richiesto dal business case.

      • PerUtente e gruppo di sistema, scegliUtilizza il gruppo predefinito.

      • PerContainerizzazione della funzione Lambda, scegliUtilizza il gruppo predefinito.

      • Per Memory limit (Limite memoria), immettere 1024 MB.

      • Per Timeout, immettere 10 seconds.

      • PerPinned, scegliTrue.

        Per ulteriori informazioni, consulta la pagina Configurazione del ciclo di vita per le funzioni Greengrass Lambda .

      • UNDERUlteriori parametri, perRead access to /sys directory (Accesso in lettura alla directory /sys), scegliEnabled (Abilitato).

  2. ScegliereAggiungi funzione Lambda.

Fase 5: Aggiungi un SageMaker Risorsa del modello ottimizzato Neo al gruppo Greengrass

In questa fase, creare una risorsa per il modello di inferenza ML ottimizzato e caricarla in un bucket Amazon S3. Quindi, individua il modello caricato da Amazon S3 nel fileAWS IoT Greengrassconsole e l'associazione della risorsa appena creata alla funzione Lambda. In questo modo la funzione potrà accedere alle risorse nel dispositivo core.

  1. Nel computer, passare alla directory resnet50 nel pacchetto di esempio decompresso in Fase 3: Creazione di una funzione Lambda di inferenza.

    Nota

    Se si utilizza l'esempio NVIDIA Jetson, è necessario utilizzare la directory resnet18 nel pacchetto di esempio. Per ulteriori informazioni, consulta la pagina Configurazione di un NVIDIA Jetson TX2 .

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

    Questa directory contiene artefatti di modelli precompilati di un modello di classificazione delle immagini basato su Resnet-50.

  2. Comprimere i file all'interno della directory resnet50 in un file denominato resnet50.zip.

    zip -r resnet50.zip .
  3. Nella pagina di configurazione del gruppoAWS IoT Greengrassgruppo, scegliere ilRisorsetabulatore. Accedi alla sezione Machine Learning e scegli Add Machine Learning resource (Aggiungi risorsa Machine Learning). Nella pagina Create a Machine Learning resource (Crea una risorsa Machine Learning), per Resource name (Nome risorsa), immetti resnet50_model.

  4. PerFonte del modello, scegliUtilizzare un modello archiviato in S3, ad esempio un modello ottimizzato tramite Deep Learning Compiler.

  5. UNDERURI, scegliSfoglia S3.

    Nota

    Attualmente, ottimizzato SageMaker i modelli sono archiviati automaticamente in Amazon S3. Puoi utilizzare questa opzione per trovare il modello ottimizzato nel bucket Amazon S3. Per ulteriori informazioni sull'ottimizzazione dei modelli, consulta SageMaker, consulta ilSageMaker Documentazione Neo.

  6. Scegli Upload a model (Carica un modello).

  7. Nella scheda della console di Amazon S3, carica il file zip in un bucket Amazon S3. Per informazioni, consulta .Come caricare file e cartelle in un bucket S3?nellaGuida dell'utente di Amazon Simple Storage Service.

    Nota

    Il nome del bucket deve contenere la stringa greengrass. Scegliere un nome univoco (ad esempio greengrass-dlr-bucket-user-id-epoch-time). Non utilizzare un punto (.) nel nome del bucket.

  8. NellaAWS IoT Greengrassnella scheda della console, individua e scegli il bucket Amazon S3. Individuare e il file resnet50.zip caricato e scegliere Select (Seleziona). Potrebbe essere necessario aggiornare la pagina per aggiornare l'elenco dei bucket e dei file disponibili.

  9. Nello statoPercorso di destinazione, immettere/ml_model.

    Il percorso di destinazione aggiornato.

    Questa è la destinazione del modello locale nello spazio Lambda del runtime di. Quando distribuisci il gruppo, AWS IoT Greengrass recupera il pacchetto del modello di origine e poi estrae i contenuti nella directory specificata.

    Nota

    Ti consigliamo di utilizzare lo stesso percorso fornito per il percorso locale. Se in questa fase utilizzi un percorso di destinazione del modello locale diverso, alcuni comandi di risoluzione dei problemi specificati in questo tutorial potrebbero risultare imprecisi. Se utilizzi un percorso diverso, dovrai impostare una variabile di ambiente MODEL_PATH che utilizzi lo stesso percorso specificato qui. Per informazioni sulle variabili di ambiente, consulta Variabili di ambiente AWS Lambda.

  10. Se in esecuzione in modalità containerizzata:

    1. UNDERAutorizzazioni di accesso ai file e al proprietario, scegliSpecifica il gruppo di sistema e le autorizzazioni.

    2. ScegliereAccesso in sola letturae quindi scegliAdd resource (Aggiungi risorsa).

Fase 6: Aggiunta della risorsa del dispositivo della telecamera al gruppo Greengrass

In questa fase, creare una risorsa per il modulo della telecamera e associarla alla funzione Lambda. In questo modo la funzione Lambda potrà accedere alle risorse nel dispositivo core.

Nota

Se si esegue in modalità non containerizzata,AWS IoT Greengrasspuò accedere alla GPU e alla fotocamera del dispositivo senza configurare questa risorsa del dispositivo.

  1. Nella pagina di configurazione del gruppo, scegliereRisorsetabulatore.

  2. SulRisorse localischeda, scegliAggiungere risorsa locale.

  3. SulAggiungere una risorsa localepage, utilizza i seguenti valori:

    • Per Resource Name (Nome risorsa) immetti videoCoreSharedMemory.

    • Per Resource type (Tipo di risorsa), scegli Device (Dispositivo).

    • PerPercorso dispositivo locale, immettere/dev/vcsm.

      Il percorso del dispositivo è il percorso assoluto locale della risorsa del dispositivo. Questo percorso fa riferimento solo a un dispositivo a caratteri o un dispositivo a blocchi in /dev.

    • PerAutorizzazioni di accesso ai file e al proprietario, scegliAggiungi automaticamente le autorizzazioni del gruppo file system del gruppo di possiede la risorsa.

      L'opzione Group owner file access permission (Autorizzazione per l'accesso al file del proprietario del gruppo) consente di concedere al processo Lambda ulteriori autorizzazioni di accesso ai file. Per ulteriori informazioni, consulta la pagina Autorizzazione di accesso ai file dell'owner del gruppo .

  4. Nella parte inferiore della pagina scegliAdd resource (Aggiungi risorsa).

  5. DaRisorsescheda, crea un'altra risorsa locale scegliendoInseriscie utilizza i seguenti valori:

    • Per Resource Name (Nome risorsa) immetti videoCoreInterface.

    • Per Resource type (Tipo di risorsa), scegli Device (Dispositivo).

    • PerPercorso dispositivo locale, immettere/dev/vchiq.

    • PerAutorizzazioni di accesso ai file e al proprietario, scegliAggiungi automaticamente le autorizzazioni del gruppo file system del gruppo di possiede la risorsa.

  6. Scegliere Add resource (Aggiungi risorsa).

Fase 7: Aggiunta di sottoscrizioni al gruppo Greengrass

In questa fase, si aggiungono le sottoscrizioni al gruppo. Tali abbonamenti consentono alla funzione Lambda di inviare i risultati delle previsioni aAWS IoTpubblicando in un argomento MQTT.

  1. Nella pagina di configurazione del gruppo, scegliereAbbonamentischeda, quindi scegliAggiungi sottoscrizione.

  2. SulCreazione di una sottoscrizione, configura l'origine e la destinazione come indicato di seguito:

    1. Nello statoTipo di origine, scegliLambda function (Funzione Lambda)quindi scegliereoptimizedImageClassification.

    2. Nello statoTarget type (Tipo di destinazione), scegliService (Servizio)quindi scegliereIoT Cloud.

    3. NellaFiltro di argomenti, immettere/resnet-50/predictionsquindi scegliereCreazione della sottoscrizione.

  3. Aggiungere un secondo abbonamento. SelezionaAbbonamentischeda, scegliAggiungi sottoscrizionee configura l'origine e la destinazione come indicato di seguito:

    1. Nello statoTipo di origine, scegliServiziquindi scegliereIoT Cloud.

    2. Nello statoTarget type (Tipo di destinazione), scegliLambda function (Funzione Lambda)quindi scegliereoptimizedImageClassification.

    3. NellaFiltro di argomenti, immettere/resnet-50/testquindi scegliereCreazione della sottoscrizione.

Fase 8: Distribuire il gruppo Greengrass

In questa fase, distribuire la versione corrente della definizione del gruppo nel dispositivo core Greengrass. La definizione contiene la funzione Lambda, le risorse e le configurazioni di sottoscrizioni aggiunte.

  1. Assicurarsi che il fileAWS IoT Greengrasscore è in esecuzione. Esegui i seguenti comandi nel terminale di Raspberry Pi in base alle esigenze.

    1. Per controllare se il daemon è in esecuzione:

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

      Se l'output contiene una voce root per /greengrass/ggc/packages/latest-core-version/bin/daemon, allora il daemon è in esecuzione.

    2. Per avviare il daemon:

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  2. Nella pagina di configurazione del gruppo, scegliereDistribuzione.

  3. SulFunzioni Lambdascheda, selezionaRilevatore IPe scegliModificare.

  4. DaModifica impostazioni rilevatore IPfinestra di dialogo, selezionaRileva e sostituisci automaticamente gli endpoint del broker MQTTe scegliSave (Salva).

    Questo consente ai dispositivi di acquisire automaticamente informazioni di base sulla connettività, come, ad esempio indirizzo IP, DNS e numero della porta. È consigliato il rilevamento automatico, ma AWS IoT Greengrass supporta anche endpoint specifici manualmente. Ti viene chiesto il metodo di individuazione solo la prima volta che il gruppo viene distribuito.

    Nota

    Se richiesto, concedi l'autorizzazione per creare ilRuolo del servizio Greengrasse associalo al tuoAccount AWSin corsoRegione AWS. Tale ruolo consente aAWS IoT Greengrassper accedere alle risorse inAWSServizi .

    Nella pagina Deployments (Distribuzioni) vengono visualizzati il timestamp della distribuzione, l'ID versione e lo stato. Una volta completata, la distribuzione dovrebbe mostrare lo statoCompletato.

    Per ulteriori informazioni sull'eliminazione di distribuzioni, consultaDistribuzione di gruppi AWS IoT Greengrass in un AWS IoT Greengrass Core. Per la risoluzione dei problemi, consultare Risoluzione dei problemi relativi a AWS IoT Greengrass.

Esecuzione del test dell'esempio di inferenza

Ora puoi verificare se la distribuzione è configurata correttamente. Per eseguire il test, devi abbonarti all'argomento /resnet-50/predictions e pubblicare eventuali messaggi nell'argomento /resnet-50/test. In questo modo viene attivata la funzione Lambda per acquisire una foto con il dispositivo Raspberry Pi e eseguire l'inferenza sull'immagine acquisita.

Nota

Se si utilizza l'esempio di NVIDIA Jetson, assicurarsi di utilizzare invece gli argomenti resnet-18/predictions e resnet-18/test.

Nota

Se a dispositivo Raspberry Pi è collegato un monitor, il segnale attivo della telecamera viene visualizzato in una finestra di anteprima.

  1. SulAWS IoTHome page della console, sottoTest, scegliClient di test MQTT.

  2. PerAbbonamenti, scegliSottoscrizione a un argomento. Utilizzare i seguenti valori. Non modificare i valori predefiniti delle altre opzioni:

    • Per Argomento sottoscrizione, immetti /resnet-50/predictions.

    • UNDERConfigurazione aggiuntiva, perVisualizzazione payload MQTT, scegliVisualizza i payload come stringhe.

  3. Scegliere Subscribe (Effettua sottoscrizione).

  4. SceglierePubblicazione in un argomento, immettere/resnet-50/testcome ilNome argomentoe scegliPubblicare.

  5. Se il test viene completato senza errori, il messaggio pubblicato richiederà a Raspberry Pi di acquisire un'immagine. Nella parte inferiore della pagina verrà visualizzato un messaggio della funzione Lambda. Questo messaggio contiene il risultato predittivo dell'immagine nel formato: nome classe prevista, probabilità e picco di utilizzo della memoria.

Configurazione di un dispositivo Intel Atom

Per eseguire questo tutorial su un dispositivo Intel Atom, è necessario fornire immagini di origine, configurare la funzione Lambda e aggiungere un'altra risorsa locale del dispositivo. Per utilizzare la GPU per l'inferenza, assicurarsi che sul dispositivo sia installato il seguente software:

  1. Scarica le immagini PNG o JPG statiche per la funzione Lambda da utilizzare per la classificazione delle immagini. L'esempio funziona in modo ottimale con file immagine di dimensioni ridotte.

    Salva i file immagine nella directory contenente il file inference.py (o in una sottodirectory di questa directory). Questo file si trova nel pacchetto di distribuzione della funzione Lambda che hai caricato nellaFase 3: Creazione di una funzione Lambda di inferenza.

    Nota

    Se si utilizza AWS DeepLens, è possibile utilizzare la telecamera integrata o montare la propria telecamera per eseguire l'inferenza sulle immagini catturate anziché sulle immagini statiche. Tuttavia, ti consigliamo di iniziare con le immagini statiche.

    Se si utilizza una telecamera, assicurarsi che il pacchetto APT awscam sia installato e aggiornato. Per ulteriori informazioni, consultaAggiornamento diAWS DeepLensdispositivonellaAWS DeepLensGuida per gli sviluppatori.

  2. Modifica la configurazione della funzione Lambda. Segui la procedura riportata in Fase 4: Aggiunta della funzione Lambda al gruppo Greengrass.

    Nota

    Ti consigliamo di usare la funzione Lambda senza containerizzazione solo se richiesto dal business case. Ciò consente l'accesso alla GPU e alla fotocamera del dispositivo senza configurare le risorse del dispositivo. Se si esegue senza containerizzazione, è necessario concedere anche l'accesso root al proprioAWS IoT GreengrassFunzioni Lambda.

    1. Per eseguire senza containerizzazione:

      • PerUtente e gruppo di sistema, scegliAnother user ID/group ID. PerID utente del sistema, immettere0. PerID gruppo di sistema, immettere0.

        Questo consente alla funzione Lambda di funzionare come root. Per ulteriori informazioni sull'esecuzione come root, consultaImpostazione dell'identità di accesso predefinita per le funzioni Lambda in un gruppo.

        Suggerimento

        Devi anche aggiornare il tuoconfig.jsonper concedere a l'accesso come root alla funzione Lambda. Per la procedura, consultaEsecuzione di una funzione Lambda come utente root.

      • PerContainerizzazione della funzione Lambda, scegliNessun container.

        Per ulteriori informazioni sull'esecuzione senza containerizzazione, consultaConsiderazioni sulla scelta della containerizzazione delle funzioni Lambda.

      • Aumenta il valore di Timeout a 2 minuti. In questo modo, il timeout della richiesta non viene eseguito troppo presto. L'esecuzione dell'inferenza richiede alcuni minuti dopo la configurazione.

      • PerPinned, scegliTrue.

      • UNDERUlteriori parametri, perRead access to /sys directory (Accesso in lettura alla directory /sys), scegliEnabled (Abilitato).

    2. Per eseguire invece in modalità containerizzata:

      Nota

      Ti consigliamo di non usare l'esecuzione in modalità containerizzata solo se richiesto dal business case.

      • Aumenta il valore di Memory limit (Limite memoria) a 3000 MB.

      • Aumenta il valore di Timeout a 2 minuti. In questo modo, il timeout della richiesta non viene eseguito troppo presto. L'esecuzione dell'inferenza richiede alcuni minuti dopo la configurazione.

      • PerPinned, scegliTrue.

      • UNDERUlteriori parametri, perRead access to /sys directory (Accesso in lettura alla directory /sys), scegliEnabled (Abilitato).

  3. Aggiungere la risorsa del modello ottimizzato Neo al gruppo Caricare le risorse del modello nella directory resnet50 del pacchetto di esempio decompresso in Fase 3: Creazione di una funzione Lambda di inferenza. Questa directory contiene artefatti di modelli precompilati di un modello di classificazione delle immagini basato su Resnet-50. Segui la procedura descritta in Fase 5: Aggiungi un SageMaker Risorsa del modello ottimizzato Neo al gruppo Greengrass, con i seguenti aggiornamenti:

    • Comprimere i file all'interno della directory resnet50 in un file denominato resnet50.zip.

    • Nella pagina Create a Machine Learning resource (Crea una risorsa Machine Learning), per Resource name (Nome risorsa), immetti resnet50_model.

    • Caricare il file resnet50.zip

  4. Se in esecuzione in modalità containerizzata, aggiungi la risorsa del dispositivo locale richiesta per concedere l'accesso alla GPU del tuo dispositivo.

    Nota

    Se si esegue in modalità non containerizzata,AWS IoT Greengrasspuò accedere alla GPU del dispositivo senza configurare le risorse del dispositivo.

    1. Nella pagina di configurazione del gruppo, scegliereRisorsetabulatore.

    2. NellaRisorse localisezione, scegliAggiungere risorsa locale.

    3. Definisci la risorsa:

      • Per Resource Name (Nome risorsa) immetti renderD128.

      • Per Resource type (Tipo di risorsa), scegli Device (Dispositivo).

      • PerPercorso dispositivo locale, immettere/dev/dri/renderD128.

      • PerAutorizzazioni di accesso ai file e al proprietario, scegliAggiungi automaticamente le autorizzazioni del gruppo file system del gruppo di possiede la risorsa.

Configurazione di un NVIDIA Jetson TX2

Per eseguire questo tutorial su NVIDIA Jetson TX2, fornire immagini di origine, configurare la funzione Lambda e aggiungere altre risorse locali del dispositivo.

  1. Assicurarsi che il dispositivo Jetson sia configurato in modo da poter installare il software AWS IoT Greengrass Core e utilizzare la GPU per inferenza. Per ulteriori informazioni sulla configurazione del dispositivo, consulta Configurazione di altri dispositivi. Per utilizzare la GPU per inferenza su un dispositivo NVIDIA Jetson TX2, è necessario installare CUDA 10.0 e cuDNN 7.0 sul dispositivo NVIDIA Jetson TX2 sul dispositivo NVIDIA Jetson TX2.

  2. Scarica le immagini PNG o JPG statiche per la funzione Lambda da utilizzare per la classificazione delle immagini. L'esempio funziona in modo ottimale con file immagine di dimensioni ridotte.

    Salvare i file immagine nella directory contenente il file inference.py. È possibile salvarli anche in una sottodirectory di questa directory. Questa directory si trova nel pacchetto di distribuzione della funzione Lambda che hai caricato nellaFase 3: Creazione di una funzione Lambda di inferenza.

    Nota

    In alternativa, puoi scegliere di implementare una telecamera sulla scheda Jetson per acquisire le immagini di origine. Tuttavia, ti consigliamo di iniziare con le immagini statiche.

  3. Modifica la configurazione della funzione Lambda. Segui la procedura riportata in Fase 4: Aggiunta della funzione Lambda al gruppo Greengrass.

    Nota

    Ti consigliamo di usare la funzione Lambda senza containerizzazione solo se richiesto dal business case. Ciò consente l'accesso alla GPU e alla fotocamera del dispositivo senza configurare le risorse del dispositivo. Se si esegue senza containerizzazione, è necessario concedere anche l'accesso root al proprioAWS IoT GreengrassFunzioni Lambda.

    1. Per eseguire senza containerizzazione:

      • PerRun as (Esegui come), scegliAnother user ID/group ID. PerUID, immettere0. PerGUID, immettere0.

        Questo consente alla funzione Lambda di funzionare come root. Per ulteriori informazioni sull'esecuzione come root, consultaImpostazione dell'identità di accesso predefinita per le funzioni Lambda in un gruppo.

        Suggerimento

        Devi anche aggiornare il tuoconfig.jsonper concedere a l'accesso come root alla funzione Lambda. Per la procedura, consultaEsecuzione di una funzione Lambda come utente root.

      • PerContainerizzazione della funzione Lambda, scegliNessun container.

        Per ulteriori informazioni sull'esecuzione senza containerizzazione, consultaConsiderazioni sulla scelta della containerizzazione delle funzioni Lambda.

      • Aumenta il valore Timeout a 5 minuti. In questo modo, il timeout della richiesta non viene eseguito troppo presto. L'esecuzione dell'inferenza richiede alcuni minuti dopo la configurazione.

      • PerPinned, scegliTrue.

      • UNDERUlteriori parametri, perRead access to /sys directory (Accesso in lettura alla directory /sys), scegliEnabled (Abilitato).

    2. Per eseguire invece in modalità containerizzata:

      Nota

      Ti consigliamo di non usare l'esecuzione in modalità containerizzata solo se richiesto dal business case.

      • Aumenta il valore di Memory limit (Limite memoria). Per utilizzare il modello fornito in modalità GPU, utilizza almeno 2000 MB.

      • Aumenta il valore Timeout a 5 minuti. In questo modo, il timeout della richiesta non viene eseguito troppo presto. L'esecuzione dell'inferenza richiede alcuni minuti dopo la configurazione.

      • PerPinned, scegliTrue.

      • UNDERUlteriori parametri, perRead access to /sys directory (Accesso in lettura alla directory /sys), scegliEnabled (Abilitato).

  4. Aggiungere la risorsa del modello ottimizzato Neo al gruppo Caricare le risorse del modello nella directory resnet18 del pacchetto di esempio decompresso in Fase 3: Creazione di una funzione Lambda di inferenza. Questa directory contiene artefatti di modelli precompilati di un modello di classificazione delle immagini basato su Resnet-18. Segui la procedura descritta in Fase 5: Aggiungi un SageMaker Risorsa del modello ottimizzato Neo al gruppo Greengrass, con i seguenti aggiornamenti:

    • Comprimere i file all'interno della directory resnet18 in un file denominato resnet18.zip.

    • Nella pagina Create a Machine Learning resource (Crea una risorsa Machine Learning), per Resource name (Nome risorsa), immetti resnet18_model.

    • Caricare il file resnet18.zip

  5. Se in esecuzione in modalità containerizzata, aggiungere le risorse del dispositivo locale necessarie per concedere l'accesso alla GPU del dispositivo.

    Nota

    Se si esegue in modalità non containerizzata,AWS IoT Greengrasspuò accedere alla GPU del dispositivo senza configurare le risorse del dispositivo.

    1. Nella pagina di configurazione del gruppo, scegliereRisorsetabulatore.

    2. NellaRisorse localisezione, scegliAggiungere risorsa locale.

    3. Definisci ogni risorsa:

      • Per Resource name (Nome risorsa) e Device path (Percorso dispositivo), utilizza i valori nella tabella seguente. Crea una risorsa del dispositivo per ogni riga nella tabella.

      • Per Resource type (Tipo di risorsa), scegli Device (Dispositivo).

      • PerAutorizzazioni di accesso ai file e al proprietario, scegliAggiungi automaticamente le autorizzazioni del gruppo file system del gruppo di possiede la risorsa.

         

        Nome

        Percorso dispositivo

        nvhost-ctrl

        /dev/nvhost-ctrl

        nvhost-gpu

        /dev/nvhost-gpu

        nvhost-ctrl-gpu

        /nvhost-ctrl-gpu

        nvhost-dbg-gpu

        /nvhost-dbg-gpu

        nvhost-prof-gpu

        /nvhost-prof-gpu

        nvmap

        /dev/nvmap

        nvhost-vic

        /dev/nvhost-vic

        tegra_dc_ctrl

        /dev/tegra_dc_ctrl

  6. Se in esecuzione in modalità containerizzata, aggiungi la seguente risorsa volume locale per concedere l'accesso alla fotocamera del tuo dispositivo. Segui la procedura riportata in Fase 5: Aggiungi un SageMaker Risorsa del modello ottimizzato Neo al gruppo Greengrass.

    Nota

    Se si esegue in modalità non containerizzata,AWS IoT Greengrasspuò accedere alla fotocamera del dispositivo senza configurare le risorse del dispositivo.

    • Per Resource type (Tipo di risorsa), scegli Volume.

    • PerAutorizzazioni di accesso ai file e al proprietario, scegliAggiungi automaticamente le autorizzazioni del gruppo file system del gruppo di possiede la risorsa.

       

      Nome

      Percorso di origine

      Percorso di destinazione

      shm

      /dev/shm

      /dev/shm

      tmp

      /tmp

      /tmp

  7. Aggiornare le sottoscrizioni di gruppo per utilizzare la directory corretta. Segui la procedura descritta in Fase 7: Aggiunta di sottoscrizioni al gruppo Greengrass, con i seguenti aggiornamenti:

    • Per il primo filtro di argomenti, immettere /resnet-18/predictions.

    • Per il secondo filtro di argomenti, immettere /resnet-18/test.

  8. Aggiornare le sottoscrizioni di test per utilizzare la directory corretta. Segui la procedura descritta in Esecuzione del test dell'esempio di inferenza, con i seguenti aggiornamenti:

    • PerAbbonamenti, scegliSottoscrizione a un argomento. Per Argomento sottoscrizione, immetti /resnet-18/predictions.

    • Nella pagina /resnet-18/predictions, specificare l'argomento /resnet-18/test in cui effettuare la pubblicazione.

Risoluzione dei problemi relativi all'inferenza ML di AWS IoT Greengrass

Se il test non viene completato correttamente, puoi provare a eseguire la procedura di risoluzione dei problemi riportata di seguito. Esegui i comandi nel terminale Raspberry Pi.

Controlla i log degli errori

  1. Passare all'utente root e navigare alla directory log. L'accesso ai log AWS IoT Greengrass richiede autorizzazioni di root.

    sudo su cd /greengrass/ggc/var/log
  2. Checkruntime.logper eventuali errori.

    cat system/runtime.log | grep 'ERROR'

    Puoi anche verificare se il log della funzione Lambda definita dall'utente contiene errori:

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

    Per ulteriori informazioni, consulta la pagina Risoluzione dei problemi con i log .

 

Verifica che la funzione Lambda sia stata distribuita correttamente

  1. Elenca i contenuti della Lambda distribuita nella/lambdadirectory. Prima di eseguire il comando, sostituisci i valori dei segnaposti.

    cd /greengrass/ggc/deployment/lambda/arn:aws:lambda:region:account:function:function-name:function-version ls -la
  2. Verifica che la directory contenga gli stessi file inclusi nel pacchetto di distribuzione optimizedImageClassification.zip caricato in Fase 3: Creazione di una funzione Lambda di inferenza.

    Assicurati inoltre che i file .py e le dipendenze si trovino nella root della directory.

 

Verifica che il modello di inferenza sia stato distribuito correttamente

  1. Trova il numero di identificazione (PID) Lambda runtime di:

    ps aux | grep lambda-function-name

    Nell'output, il PID viene visualizzato nella seconda colonna della riga relativa al processo runtime Lambda.

  2. Inserisci lo spazio dei nomi Lambda Runtime. Assicurati di sostituire il valore pid del segnaposto prima di eseguire il comando.

    Nota

    Questa directory e il relativo contenuto si trovano Lambda dei nomi del runtime di; pertanto, non sono visibili in uno spazio dei nomi

    sudo nsenter -t pid -m /bin/bash
  3. Elenca i contenuti della directory locale specificata per la risorsa ML.

    Nota

    Se il percorso della risorsa ML è diverso da ml_model, dovrai sostituirlo qui.

    cd /ml_model ls -ls

    Dovrebbero essere visualizzati i seguenti file:

    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 funzione Lambda non trova /dev/dri/renderD128

Questa situazione può verificarsi se OpenCL non è in grado di connettersi ai dispositivi GPU necessari. È necessario creare le risorse dei dispositivi necessari per la funzione Lambda.

Fasi successive

Esplorare altri modelli ottimizzati. Per ulteriori informazioni, consulta la documentazione SageMaker Neo.