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 sourceSqueezeNet
Il tutorial include le seguenti fasi di alto livello:
Prerequisiti
Per completare questo tutorial, è necessario quanto segue:
-
Raspberry Pi 4 Model B o Raspberry Pi 3 Model B/B+, impostato e configurato per l'uso conAWS IoT Greengrass. Per configurare Raspberry Pi con AWS IoT Greengrass, eseguire lo script di configurazione del dispositivo Greengrass o assicurarsi di aver completato il modulo 1 e il modulo 2 di Guida introduttiva con AWS IoT Greengrass.
Nota
Il Raspberry Pi potrebbe richiedere un 2.5Aalimentatore
per eseguire i framework di deep learning generalmente utilizzati per la classificazione delle immagini. Un alimentatore con una potenza inferiore potrebbe causare il riavvio del dispositivo. -
Modulo della telecamera Raspberry Pi V2 da 8 Megapixel, 1080p
. Per informazioni sucome configurare la fotocamera, consultaCollegamento della fotocamera nella documentazione di Raspberry Pi. -
Un gruppo e un core Greengrass. Per informazioni sucome creare un gruppo o un core Greengrass, consulta.Guida introduttiva con AWS IoT Greengrass.
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.
-
Installare gli aggiornamenti in Raspbian.
sudo apt-get update sudo apt-get dist-upgrade
-
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
, utilizzarepython3.7
invece dipython3
per i comandi in questo tutorial. Assicurati che l'installazione di pip sia mappata alla versionepython3.7
opython3
corretta per evitare errori di dipendenza. -
-
Riavvia il dispositivo Raspberry Pi.
sudo reboot
-
Apri lo strumento di configurazione di Raspberry Pi.
sudo raspi-config
-
Utilizza i tasti freccia per aprire Interfacing Options (Opzioni di interfaccia) e abilita l'interfaccia della telecamera. Se richiesto, consenti il riavvio del dispositivo.
-
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.
-
Accedere al Raspberry Pi da remoto.
ssh pi@
your-device-ip-address
-
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.
-
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.
-
Sul computer, scaricare l'esempio MxNet per Raspberry Pi da Esempi di Machine Learning.
-
Decomprimere il file
mxnet-py3-armv7l.tar.gz
scaricato. -
Passa alla directory
squeezenet
.cd
path-to-downloaded-sample
/mxnet-py3-armv7l/models/squeezenetIl 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.
-
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/examplesLa 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 Python
sul GitHub.
-
-
Comprimere il contenuto della directory
examples
in un file denominatogreengrassObjectClassification.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.
-
Da (sì)AWS IoTconsole, scegliFunzionieCrea funzione Create.
-
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.
-
-
Scegli Create function (Crea funzione).
A questo punto, carica il pacchetto di distribuzione della funzione Lambda e registra il gestore.
-
Scegli la funzione Lambda e carica il pacchetto di distribuzione della funzione Lambda.
-
SulCodescheda, sottoFonte di codice, scegliCarica da. Dal menu a discesa, scegli.zip.
-
ScegliereCaricamentoquindi scegliere il
greengrassObjectClassification.zip
pacchetto di distribuzione. Quindi, scegliere Save (Salva). -
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.
-
-
Nel menu Actions (Operazioni), seleziona Publish new version (Pubblica nuova versione).
-
Per Version description (Descrizione versione), immettere
First version
, quindi scegliere Publish (Pubblica). -
SulgreengrassObjectClassification: 1pagina di configurazione, dallaOperazionimenu, scegliCreare alias.
-
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.
-
-
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.
-
NellaAWS IoTRiquadro di navigazione della console, sottoManage (Gestione), EspandereDispositivi Greengrassquindi scegliereGruppi (V1).
-
Nella pagina di configurazione del gruppo, scegli l'opzioneFunzioni Lambdatabulatore.
-
InFunzioni Lambdasezione, scegliInserisci.
-
Per ilLambda function (Funzione Lambda), scegligreengrassObjectClassification.
-
Per ilVersione delle funzioni Lambda, scegliAlias: MLTEST.
A questo punto, configura il ciclo di vita e le variabili di ambiente della funzione Lambda.
-
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.
-
Per eseguire senza containerizzazione:
-
PerUtente e gruppo di sistema, scegli
Another 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 tuo
config.json
per 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.
-
Per Timeout, immettere
10 seconds
. -
PerPinned, scegliTrue.
Per ulteriori informazioni, consulta la pagina Configurazione del ciclo di vita per le funzioni Greengrass Lambda .
-
-
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 .
-
-
-
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.
-
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.
-
Nella pagina di configurazione del gruppo, scegli l'opzioneRisorsetabulatore.
-
NellaRisorse localisezione, scegliAggiungere una risorsa locale.
-
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 .
-
-
A questo punto, aggiungi una risorsa del dispositivo locale per l'interfaccia della telecamera.
-
ScegliereAggiungere una risorsa locale.
-
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.
-
-
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.zip
pacchetto di modello in Amazon S3.
-
SulRisorsescheda per il tuo gruppo, sotto laMachine Learningsezione, scegliAdd machine learning.
-
SulAggiungere una risorsa di machine learning(Certificato creato)Nome risorsaimmettere
squeezenet_model
. -
PerFonte del modello, scegliUtilizzare un modello archiviato in S3, ad esempio un modello ottimizzato tramite Deep Learning Compiler.
-
Per(AVVIO), immettere un percorso in cui viene salvato il bucket S3.
-
Seleziona Sfoglia S3. La console di Amazon S3 viene aperta in una nuova scheda.
-
Nella scheda della console Amazon S3, carica il
squeezenet.zip
in 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 stringa
greengrass
e il bucket deve trovarsi nella stessa regione in cui si utilizzaAWS IoT Greengrass. Scegliere un nome univoco (ad esempiogreengrass-bucket-
). Non utilizzare un punto (user-id
-epoch-time
.
) nel nome del bucket. -
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. -
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 (nella
model_path
(Variabile). -
UNDERAutorizzazioni di accesso ai file e al proprietario, scegliNessun gruppo di sistema.
-
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.
-
Nella pagina di configurazione del gruppo, scegli l'opzioneAbbonamentischeda, quindi scegliAggiungi sottoscrizione.
-
SulDettagli dell'abbonamenti, configura l'origine e la destinazione come indicato di seguito:
-
Nello statoTipo di origine, scegliLambda function (Funzione Lambda)quindi sceglieregreengrassObjectClassification.
-
Nello statoTarget type (Tipo di destinazione), scegliService (Servizio)quindi scegliereIoT Cloud.
-
-
Nello statoFiltro di argomentiimmettere
hello/world
quindi 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.
-
Assicurarsi che il fileAWS IoT Greengrasscore è in esecuzione. Esegui i seguenti comandi nel terminale di Raspberry Pi in base alle esigenze.
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.
Per avviare il daemon:
cd /greengrass/ggc/core/ sudo ./greengrassd start
-
Nella pagina di configurazione del gruppo, scegli:Distribuzione.
-
NellaFunzioni Lambdascheda, sotto ilFunzioni Lambda di sistemasezione, selezionarilevatore IPe scegliModificare.
-
NellaModifica impostazioni rilevatore IPfinestra di dialogo, selezionareRileva e sostituisci automaticamente gli endpoint del broker MQTT.
-
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/world
argomento 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.
-
NellaAWS IoTconsole, sottoTest, scegliClient di test MQTT.
-
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.
-
-
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.
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
-
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
-
Nella directory
system
, controllareruntime.log
opython_runtime.log
.Nella directory
user/
, controllareregion
/account-id
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
-
Elencare i contenuti della Lambda distribuita nella
/lambda
directory. 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 -
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
-
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.
-
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 -
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 .
-
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. -
Se non stai usando Python 3.7, assicurati di creare un collegamento simbolico da Python 3.x a Python 3.7. Questa operazione configura il dispositivo per utilizzare 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.x/
python3.xpath-to-python-3.7/
python3.7Riavviare il dispositivo.
-
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.
-
Per eseguire senza containerizzazione:
-
PerUtente e gruppo di sistema, scegli
Another 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 tuo
config.json
per 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).
-
-
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).
-
-
-
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.
-
Nella pagina di configurazione del gruppo, scegli l'opzioneRisorsetabulatore.
-
ScegliereAggiungere una risorsa locale.
-
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.
-
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.
-
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'impostazioneCUDA_ARCH
. -
Attivare CUDA.
USE_CUDA = 1
-
-
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. -
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.6path-to-python-3.7/
python3.7Riavviare il dispositivo.
-
Assicurarsi che l'account di sistema
ggc_user
possa utilizzare il framework MXNet:“sudo -u ggc_user bash -c 'python3 -c "import mxnet"'
-
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.
-
Per eseguire senza containerizzazione:
-
PerUtente e gruppo di sistema, scegli
Another 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 tuo
config.json
per 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
-
-
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
-
-
-
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
-
-
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
-