Come configurare l'inferenza di Machine Learning 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 mediante la AWS Management Console

Per seguire le fasi di questo tutorial, è necessarioAWS IoT GreengrassCore v1.10 o versioni successive.

Puoi eseguire l'inferenza di Machine Learning (ML) in locale su un dispositivo core Greengrass utilizzando i dati generati localmente. Per informazioni, inclusi i requisiti e i vincoli, consulta Esecuzione dell'inferenza di Machine Learning.

Questa esercitazione descrive come utilizzareAWS Management Consoleconfigurare un gruppo Greengrass per l'esecuzione di un'app di inferenza Lambda in grado di riconoscere le immagini acquisite da una telecamera in locale, senza inviare i dati al cloud. L'app di inferenza accede al modulo della telecamera su un dispositivo Raspberry Pi ed esegue l'inferenza utilizzando l'open sourceSqueezeNetModello di.

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. Nell'esempio relativo a Jetson TX2 è possibile utilizzare immagini statiche anziché immagini trasmesse da una telecamera. Se si utilizza l'esempio Jetson TX2, potrebbe essere necessario installare Python 3.6 invece di Python 3.7. Per informazioni sulla configurazione del dispositivo, quindichepuoi installare ilAWS IoT GreengrassSoftware Core, consultaConfigurazione 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: Installazione del framework MXNet.

In questa fase installare le librerie MxNet sul Raspberry Pi.

  1. Accedere al Raspberry Pi da remoto.

    ssh pi@your-device-ip-address
  2. Aprire la documentazione di MxNet, aprire Installazione di MxNet e seguire le istruzioni per installare MxNet sul dispositivo.

    Nota

    Per questo tutorial, si consiglia di installare la versione 1.5.0 e creare MXNet dai sorgenti.

  3. Dopo aver installato MXNet, convalidare la seguente configurazione:

    • Assicurarsi che l'account di sistema ggc_user possa utilizzare il framework MXNet.

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

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

Fase 3: Creazione di un pacchetto del modello MXNet

In questa fase, creare un pacchetto del modello contenente un modello MXNet preformato di esempio da caricare su Amazon Simple Storage Service (Amazon S3).AWS IoT Greengrasspuò utilizzare un pacchetto del modello da Amazon S3, a condizione che si utilizzi il formato tar.gz o zip.

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

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

  3. Passa alla directory squeezenet.

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

    Il file squeezenet.zip in questa directory è il pacchetto del modello. Contiene SqueezeNet artefatti del modello open source per un modello di classificazione delle immagini. Successivamente, il pacchetto del modello verrà caricato in Amazon S3.

Fase 4: Creazione e pubblicazione di una funzione Lambda

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.

Innanzitutto, creare il pacchetto di implementazione della funzione Lambda.

  1. Nel computer, passare alla directory examples nel pacchetto di esempio decompresso in Fase 3: Creazione di un pacchetto del modello MXNet.

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

    La directory examples contiene il codice di funzione e le dipendenze.

    • greengrassObjectClassification.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 Core 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 Core per Pythonsul GitHub.

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

    zip -r greengrassObjectClassification.zip .
    Nota

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

     

    Creare quindi la funzione Lambda.

  3. Da (sì)AWS IoTconsole, scegliFunzionieCrea funzione Create.

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

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

    • 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 è utilizzato daAWS IoT Greengrass.

  5. Scegli Create function (Crea funzione).

     

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

  6. Scegli la funzione Lambda e carica il pacchetto di distribuzione della funzione Lambda.

    1. SulCodescheda, sottoFonte di codice, scegliCarica da. Dal menu a discesa, scegli.zip.

      Il menu a discesa Carica da con file.zip evidenziato.
    2. ScegliereCaricamentoquindi scegliere ilgreengrassObjectClassification.zippacchetto di distribuzione. Quindi, scegliere Save (Salva).

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

      • In Runtime, scegliere Python 3.7.

      • Per Handler (Gestore), inserire greengrassObjectClassification.function_handler.

      Seleziona Save (Salva.

    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.

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

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

  9. SulgreengrassObjectClassification: 1pagina di configurazione, dallaOperazionimenu, scegliCreare alias.

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

    • In Name (Nome), inserire mlTest.

    • Per Version (Versione), immettere 1.

    Nota

    AWS IoT Greengrassnon supporta alias Lambda per$LATESTVersioni.

  11. Seleziona Save (Salva.

     

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

Fase 5: Aggiunta della funzione Lambda al gruppo Greengrass

In questa fase, aggiungere la funzione Lambda al gruppo, quindi configurare il ciclo di vita e le variabili di ambiente della funzione.

Innanzitutto, aggiungi la funzione Lambda al gruppo Greengrass.

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

  2. Nella pagina di configurazione del gruppo, scegli l'opzioneFunzioni Lambdatabulatore.

  3. InFunzioni Lambdasezione, scegliInserisci.

  4. Per ilLambda function (Funzione Lambda), scegligreengrassObjectClassification.

  5. Per ilVersione delle funzioni Lambda, scegliAlias: MLTEST.

     

    A questo punto, configura il ciclo di vita e le variabili di ambiente della funzione Lambda.

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

      Non è consigliabile usare l'esecuzione in modalità containerizzata solo se richiesto dal business case.

      • PerUtente e gruppo di sistema, scegliUsa predefinito di gruppo.

      • PerContainerizzazione della funzione Lambda, scegliUsa predefinito di gruppo.

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

      • Per Timeout, immettere 10 seconds.

      • PerPinned, scegliTrue.

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

  7. In Environment variables (Variabili di ambiente), creare una coppia chiave-valore. Una coppia chiave-valore è obbligatoria per le funzioni che interagiscono con i modelli MXNet su un dispositivo Raspberry Pi.

    Per la chiave, utilizzare MXNET_ENGINE_TYPE. Per il valore, utilizzareNaiveEngine.

    Nota

    Nelle funzioni Lambda definite dall'utente, puoi impostare la variabile di ambiente nel codice della funzione.

  8. Mantieni i valori predefiniti per tutte le altre proprietà e scegli:Funzione Lambda.

Fase 6: Aggiunta di risorse al gruppo Greengrass

In questa fase, creare le risorse per il modulo telecamera e il modello di inferenza ML e associare le risorse 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 queste risorse del dispositivo.

Innanzitutto, crea due risorse locali per la telecamera: una per la memoria condivisa e una per l'interfaccia del dispositivo. Per ulteriori informazioni sull'accesso alle risorse locali, consulta Accedi alle risorse locali con funzioni e connettori Lambda.

  1. Nella pagina di configurazione del gruppo, scegli l'opzioneRisorsetabulatore.

  2. NellaRisorse localisezione, scegliAggiungere una risorsa locale.

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

    • Per Resource Name (Nome risorsa) immetti videoCoreSharedMemory.

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

    • PerPercorso di dispositivoimmettere/dev/vcsm.

      Il percorso del dispositivo è il percorso assoluto locale della risorsa del dispositivo. Questo percorso può fare 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 di sistema che possiede la risorsa.

      LaAutorizzazioni di accesso ai file e al proprietarioconsente 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. A questo punto, aggiungi una risorsa del dispositivo locale per l'interfaccia della telecamera.

  5. ScegliereAggiungere una risorsa locale.

  6. SulAggiungere una risorsa locale, utilizza i seguenti valori:

    • Per Resource Name (Nome risorsa) immetti videoCoreInterface.

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

    • PerPercorso di dispositivoimmettere/dev/vchiq.

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

  7. Nella parte inferiore della pagina scegli:Add resource (Aggiungi risorsa).

 

Ora aggiungi il modello di inferenza come una risorsa Machine Learning. Questa fase include il caricamento dellasqueezenet.zippacchetto di modello in Amazon S3.

  1. SulRisorsescheda per il tuo gruppo, sotto laMachine Learningsezione, scegliAdd machine learning.

  2. SulAggiungere una risorsa di machine learning(Certificato creato)Nome risorsaimmetteresqueezenet_model.

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

  4. Per(AVVIO), immettere un percorso in cui viene salvato il bucket S3.

  5. Seleziona Sfoglia S3. La console di Amazon S3 viene aperta in una nuova scheda.

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

    Nota

    Perché il bucket S3 risulti accessibile, il suo nome deve includere la stringagreengrasse il bucket deve trovarsi nella stessa regione in cui si utilizzaAWS IoT Greengrass. Scegliere un nome univoco (ad esempio greengrass-bucket-user-id-epoch-time). Non utilizzare un punto (.) nel nome del bucket.

  7. SulAWS IoT Greengrassscheda della console, individua e scegli il bucket S3. Individuare e il file squeezenet.zip caricato e scegliere Select (Seleziona). Potrebbe essere necessario scegliere Refresh (Aggiorna) per aggiornare l'elenco dei bucket e dei file disponibili.

  8. Per Destination path (Percorso di destinazione), immetti /greengrass-machine-learning/mxnet/squeezenet.

    Questa è la destinazione del modello locale nello spazio dei nomi del runtime di Lambda. Quando distribuisci il gruppo, AWS IoT Greengrass recupera il pacchetto del modello di origine e poi estrae i contenuti nella directory specificata. La funzione Lambda di esempio per questo tutorial è già configurata per l'utilizzo di questo percorso (nellamodel_path(Variabile).

  9. UNDERAutorizzazioni di accesso ai file e al proprietario, scegliNessun gruppo di sistema.

  10. Scegliere Add resource (Aggiungi risorsa).

Utilizzo di SageMaker Modelli qualificati

Questo tutorial utilizza un modello archiviato in Amazon S3, ma puoi utilizzare facilmente SageMaker anche dei modelli. LaAWS IoT Greengrassla console è integrata SageMaker integrazione, pertanto non è necessario caricare manualmente questi modelli in Amazon S3. Per i requisiti e le limitazioni per l'utilizzo SageMaker modelli, vediOrigini di modello supportate.

Per utilizzare un SageMaker Modello di:

  • PerFonte del modello, scegliUsa un modello addestrato inAWS SageMaker, quindi scegli il nome del processo di addestramento del modello.

  • PerPercorso di destinazione, immetti il percorso della directory in cui la funzione Lambda cerca il modello.

Fase 7: Aggiunta di una sottoscrizione al gruppo Greengrass

In questa fase, aggiungere una sottoscrizione al gruppo. Questa sottoscrizione consente alla funzione Lambda di inviare i risultati delle previsioni aAWS IoTpubblicando in un argomento MQTT.

  1. Nella pagina di configurazione del gruppo, scegli l'opzioneAbbonamentischeda, quindi scegliAggiungi sottoscrizione.

  2. SulDettagli dell'abbonamenti, configura l'origine e la destinazione come indicato di seguito:

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

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

  3. Nello statoFiltro di argomentiimmetterehello/worldquindi scegliereCreazione di abbonamenti.

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/1.11.6/bin/daemon, allora il daemon è in esecuzione.

      Nota

      La versione nel percorso dipende dalla versione del software AWS IoT Greengrass Core installata sul dispositivo core.

    2. Per avviare il daemon:

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

    La pagina del gruppo con le opzioni Deployments (Distribuzioni) e Deploy (Distribuisci) evidenziate.
  3. NellaFunzioni Lambdascheda, sotto ilFunzioni Lambda di sistemasezione, selezionarilevatore IPe scegliModificare.

  4. NellaModifica impostazioni rilevatore IPfinestra di dialogo, selezionareRileva e sostituisci automaticamente gli endpoint del broker MQTT.

  5. Seleziona Save (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 consenteAWS 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.

Fase 9: Esecuzione del test dell'app di inferenza

Ora puoi verificare se la distribuzione è configurata correttamente. Per eseguire il test, devi abbonarti allahello/worldargomento e visualizza i risultati della previsione pubblicati dalla funzione Lambda.

Nota

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

  1. NellaAWS IoTconsole, sottoTest, scegliClient di test MQTT.

  2. In Subscriptions (Sottoscrizioni), utilizza i seguenti valori:

    • Per l’argomento della sottoscrizione, utilizzare ciao/mondo.

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

  3. Scegliere Subscribe (Effettua sottoscrizione).

    Se il test viene completato correttamente, nella parte inferiore della pagina vengono visualizzati i messaggi della funzione Lambda. Ogni messaggio contiene i primi cinque risultati predittivi dell'immagine nel formato: probabilità, ID classe prevista e nome della classe corrispondente.

    La pagina Subscriptions (Sottoscrizioni) in cui sono visualizzati i risultati del test con i dati del messaggio.

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. Nella directory system, controllare runtime.log o python_runtime.log.

    Nella directory user/region/account-id, controllare greengrassObjectClassification.log.

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

DisimballareErrore inruntime.log

Se runtime.log contiene un errore simile al seguente, assicurati che il pacchetto del modello di origine tar.gz contenga una directory principale.

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

Se il pacchetto non dispone di una directory principale contenente i file del modello, utilizza il seguente comando perrepackageil modello:

tar -zcvf model.tar.gz ./model

Ad esempio:

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

Non includere i caratteri finali /* in questo comando.

 

Verifica che la funzione Lambda sia stata distribuita correttamente

  1. Elencare 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 greengrassObjectClassification.zip caricato in Fase 4: Creazione e pubblicazione di una funzione Lambda.

    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) del processo runtime Lambda:

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

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

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

    Nota

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

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

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

    Dovrebbero essere visualizzati i seguenti file:

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

Fasi successive

Esplorare altre app di inferenza.AWS IoT Greengrassfornisce altre funzioni Lambda che puoi usare per provare l'inferenza locale. Il pacchetto degli esempi è disponibile nella cartella delle librerie precompilate scaricata nella Fase 2: Installazione del framework MXNet..

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:

  • OpenCL versione 1.0 o successiva

  • Python 3.7 e pip

    Nota

    Se il dispositivo è preconfigurato con Python 3.6, puoi invece creare un collegamento simbolico a Python 3.7. Per ulteriori informazioni, consulta la pagina Passo 2 .

  • NumPy

  • OpenCV su Wheels

  1. Scarica le immagini PNG o JPG statiche per la funzione Lambda 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 greengrassObjectClassification.py (o in una sottodirectory di questa directory). Questo file si trova nel pacchetto di distribuzione della funzione Lambda che hai caricato nellaFase 4: Creazione e pubblicazione di una funzione Lambda.

    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 di unAWS DeepLensdispositivonellaAWS DeepLensGuida per gli sviluppatori.

  2. Modifica la configurazione della funzione Lambda. Segui la procedura riportata in Fase 5: 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 dell'utente del sistemaimmettere0. PerID gruppo di sistemaimmettere0.

        Ciò consente alla funzione Lambda di funzionare come root. Per ulteriori informazioni sull'esecuzione come root, consulta.Impostazione 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.

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

      • UNDERPinned, scegliTrue.

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

      • Per Lambda lifecycle (Ciclo di vita Lambda), scegli Make this function long-lived and keep it running indefinitely (Rendi questa funzione di lunga durata e mantieni in esecuzione a tempo indeterminato).

    2. Per eseguire invece in modalità containerizzata:

      Nota

      Non è consigliabile usare l'esecuzione in modalità containerizzata solo se richiesto dal business case.

      • Aggiornare il valore Timeout a 5 secondi. 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. 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, scegli l'opzioneRisorsetabulatore.

    2. ScegliereAggiungere una risorsa locale.

    3. Definisci la risorsa:

      • Per Resource Name (Nome risorsa) immetti renderD128.

      • PerTipo di risorsa, scegliDispositivo locale.

      • Per Device path (Percorso dispositivo), immetti /dev/dri/renderD128.

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

      • PerAffiliazioni delle funzioni Lambda, concedereAccesso in lettura e scritturaalla funzione Lambda.

Configurazione di un NVIDIA Jetson TX2

Per eseguire questo tutorial su un NVIDIA Jetson TX2, fornire le immagini di origine e configurare la funzione Lambda. Se stai utilizzando la GPU, devi anche aggiungere le risorse locali del dispositivo.

  1. Assicurati che il dispositivo Jetson sia configurato in modo da poter installare il software AWS IoT Greengrass Core. Per ulteriori informazioni sulla configurazione del dispositivo, consulta Configurazione di altri dispositivi.

  2. Aprire la documentazione di MxNet, andare su Installazione di MxNet su un dispositivo Jetson, e seguire le istruzioni per installare MXNet sul dispositivo Jetson.

    Nota

    Se si desidera compilare MXNet dall'origine, seguire le istruzioni per compilare la libreria condivisa. Modificare le seguenti impostazioni nel file config.mk per utilizzare un dispositivo Jetson TX2:

    • Aggiungere -gencode arch=compute-62, code=sm_62 all'impostazione CUDA_ARCH.

    • Attivare CUDA.

      USE_CUDA = 1
  3. Scarica le immagini PNG o JPG statiche per la funzione Lambda utilizzare per la classificazione delle immagini. L'app funziona in modo ottimale con i file immagine di dimensioni ridotte. In alternativa, puoi implementare una telecamera sulla scheda Jetson per acquisire le immagini di origine.

    Salvare i file immagine nella directory contenente il file greengrassObjectClassification.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 4: Creazione e pubblicazione di una funzione Lambda.

  4. Creare un collegamento simbolico da Python 3.7 a Python 3.6 per usare Python 3 con AWS IoT Greengrass. Eseguire il seguente comando per individuare l'installazione di Python:

    which python3

    Eseguire il comando seguente per creare il collegamento simbolico.

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

    Riavviare il dispositivo.

  5. Assicurarsi che l'account di sistema ggc_user possa utilizzare il framework MXNet:

    “sudo -u ggc_user bash -c 'python3 -c "import mxnet"'
  6. Modifica la configurazione della funzione Lambda. Segui la procedura riportata in Fase 5: 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 dell'utente del sistemaimmettere0. PerID gruppo di sistemaimmettere0.

        Ciò consente alla funzione Lambda di funzionare come root. Per ulteriori informazioni sull'esecuzione come root, consulta.Impostazione 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.

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

      • UNDERVariabili di ambiente, aggiungere le seguenti coppie chiave-valore alla funzione Lambda. Questa operazione configura AWS IoT Greengrass per utilizzare il framework MXNet.

        Key (Chiave)

        Value (Valore)

        PATH

        /usr/local/cuda/bin:$PATH

        MXNET_HOME

        $HOME/mxnet/

        PYTHONPATH

        $MXNET_HOME/python:$PYTHONPATH

        CUDA_HOME

        /usr/local/cuda

        LD_LIBRARY_PATH

        $LD_LIBRARY_PATH:${CUDA_HOME}/lib64

    2. Per eseguire invece in modalità containerizzata:

      Nota

      Non è consigliabile usare l'esecuzione in modalità containerizzata solo se richiesto dal business case.

      • Aumenta il valore di Memory limit (Limite memoria). Utilizzare 500 MB per la CPU o almeno 2000 MB per la GPU.

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

      • UNDERVariabili di ambiente, aggiungere le seguenti coppie chiave-valore alla funzione Lambda. Questa operazione configura AWS IoT Greengrass per utilizzare il framework MXNet.

        Key (Chiave)

        Value (Valore)

        PATH

        /usr/local/cuda/bin:$PATH

        MXNET_HOME

        $HOME/mxnet/

        PYTHONPATH

        $MXNET_HOME/python:$PYTHONPATH

        CUDA_HOME

        /usr/local/cuda

        LD_LIBRARY_PATH

        $LD_LIBRARY_PATH:${CUDA_HOME}/lib64

  7. Se in esecuzione in modalità containerizzata, aggiungi le seguenti risorse del dispositivo locale per concedere l'accesso alla GPU del tuo dispositivo. Segui la procedura riportata in Fase 6: Aggiunta di risorse al gruppo Greengrass.

    Nota

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

    Per ogni risorsa:

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

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

       

      Nome

      Percorso dispositivo

      nvhost-ctrl

      /dev/nvhost-ctrl

      nvhost-gpu

      /dev/nvhost-gpu

      nvhost-ctrl-gpu

      /dev/dev/nvhost-ctrl-gpu

      nvhost-dbg-gpu

      /dev/dev/nvhost-dbg-gpu

      nvhost-prof-gpu

      /dev/dev/nvhost-prof-gpu

      nvmap

      /dev/nvmap

      nvhost-vic

      /dev/nvhost-vic

      tegra_dc_ctrl

      /dev/tegra_dc_ctrl

  8. 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 6: Aggiunta di risorse al gruppo Greengrass.

    Nota

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

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

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

       

      Nome

      Percorso di origine

      Percorso di destinazione

      shm

      /dev/shm

      /dev/shm

      tmp

      /tmp

      /tmp