Hinweis zum Ende des Supports: Am 7. Oktober 2026 AWS wird der Support für eingestellt. AWS IoT Greengrass Version 1 Nach dem 7. Oktober 2026 werden Sie nicht mehr auf die Ressourcen zugreifen können. AWS IoT Greengrass V1 Weitere Informationen finden Sie unter Migrieren von AWS IoT Greengrass Version 1.
Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
So konfigurieren Sie die Inferenz für maschinelles Lernen mit dem AWS-Managementkonsole
Um den Schritten in diesem Tutorial zu folgen, benötigen Sie AWS IoT Greengrass Core v1.10 oder höher.
Sie können Machine Learning (ML)-Inferenz lokal auf einem Greengrass Core-Gerät mit lokal generierten Daten durchführen. Weitere Informationen einschließlich Anforderungen und Einschränkungen finden Sie unter Durchführen von Machine Learning-Inferenzen.
In diesem Tutorial wird beschrieben, wie Sie die verwenden AWS-Managementkonsole , um eine Greengrass-Gruppe so zu konfigurieren, dass sie eine Lambda-Inferenz-App ausführt, die Bilder von einer Kamera lokal erkennt, ohne Daten an die Cloud zu senden. Die Inferenz-App greift auf das Kameramodul auf einem Raspberry Pi zu und führt die Inferenz mithilfe des Open-Source-Modells durch. SqueezeNet
Das Tutorial enthält die folgenden allgemeinen Schritte:
Voraussetzungen
Zum Durchführen dieses Tutorials benötigen Sie Folgendes:
-
Raspberry Pi 4 Model B oder Raspberry Pi 3 Model B/B +, eingerichtet und konfiguriert für die Verwendung mit. AWS IoT Greengrass Um Ihren Raspberry Pi mit AWS IoT Greengrass einzurichten, führen Sie das Greengrass Device Setup-Skript aus oder stellen Sie sicher, dass Sie Modul 1 und Modul 2 von Erste Schritte mit AWS IoT Greengrass abgeschlossen haben.
Anmerkung
Der Raspberry Pi benötigt möglicherweise eine 2,5-A-Stromversorgung
, um die Deep-Learning-Frameworks auszuführen, die normalerweise für die Bildklassifizierung verwendet werden. Ein Netzteil mit einer niedrigeren Nennleistung kann dazu führen, dass das Gerät neu gestartet wird. -
Raspberry Pi Kameramodul V2 – 8 Megapixel, 1080p
. Informationen zur Einrichtung der Kamera finden Sie unter Anschließen der Kamera in der Raspberry Pi-Dokumentation. -
Eine Greengrass-Gruppe und ein Greengrass Core. Informationen zum Erstellen einer Greengrass-Gruppe oder eines Greengrass-Cores finden Sie unterErste Schritte mit AWS IoT Greengrass.
Anmerkung
Dieses Tutorial verwendet einen Raspberry Pi, AWS IoT Greengrass unterstützt aber auch andere Plattformen wie Intel Atom und NVIDIA Jetson TX2. Beim Jetson TX2-Beispiel können Sie statische Abbilder anstelle von Abbildern verwenden, die von einer Kamera gestreamt werden. Wenn Sie das Jetson TX2-Beispiel verwenden, müssen Sie möglicherweise Python 3.6 anstelle von Python 3.7 installieren. Informationen zur Konfiguration Ihres Geräts, sodass Sie die AWS IoT Greengrass Core-Software installieren können, finden Sie unter. Einrichten anderer Geräte
Für Plattformen von Drittanbietern, die AWS IoT Greengrass dies nicht unterstützen, müssen Sie Ihre Lambda-Funktion im nicht containerisierten Modus ausführen. Um im nicht containerisierten Modus zu arbeiten, müssen Sie Ihre Lambda-Funktion als Root ausführen. Weitere Informationen erhalten Sie unter Überlegungen bei der Wahl der Containerisierung von Lambda-Funktionen und Einstellung der Standardzugriffsidentität für Lambda-Funktionen in einer Gruppe.
Schritt 1: Konfigurieren des Raspberry Pi
In diesem Schritt installieren Sie Updates für das Raspbian-Betriebssystem, installieren die Kameramodulsoftware und Python-Abhängigkeiten und aktivieren die Kameraschnittstelle.
Führen Sie im Raspberry Pi-Terminal die folgenden Befehle aus.
-
Installieren von Updates für Raspbian.
sudo apt-get update sudo apt-get dist-upgrade -
Installieren Sie die
picamera-Schnittstelle für das Kameramodul und andere Python-Bibliotheken, die für dieses Tutorial erforderlich sind.sudo apt-get install -y python3-dev python3-setuptools python3-pip python3-picameraÜberprüfen Sie die Installation:
-
Stellen Sie sicher, dass Ihre Python 3.7-Installation pip enthält.
python3 -m pipWenn pip nicht installiert ist, laden Sie es von der pip-Website
herunter und führen Sie dann den folgenden Befehl aus. python3 get-pip.py -
Stellen Sie sicher, dass Ihre Python-Version 3.7 oder höher ist.
python3 --versionWenn in der Ausgabe eine frühere Version aufgelistet ist, führen Sie den folgenden Befehl aus.
sudo apt-get install -y python3.7-dev -
Stellen Sie sicher, dass Setuptools und Picamera erfolgreich installiert wurden.
sudo -u ggc_user bash -c 'python3 -c "import setuptools"' sudo -u ggc_user bash -c 'python3 -c "import picamera"'Wenn die Ausgabe keine Fehler enthält, ist die Überprüfung erfolgreich.
Anmerkung
Wenn die auf Ihrem Gerät installierte ausführbare Python-Datei
python3.7ist, verwenden Siepython3.7anstelle vonpython3für die Befehle in diesem Tutorial. Stellen Sie sicher, dass Ihre pip-Installation der richtigenpython3.7- oderpython3-Version zugeordnet ist, um Abhängigkeitsfehler zu vermeiden. -
-
Starten Sie den Raspberry Pi neu.
sudo reboot -
Öffnen Sie das Raspberry Pi-Konfigurations-Tool.
sudo raspi-config -
Verwenden Sie die Pfeiltasten zum Öffnen von Interfacing Options (Verbindungsoptionen) und aktivieren Sie die Kameraschnittstelle. Wenn Sie dazu aufgefordert werden, lassen Sie den Neustart des Geräts zu.
-
Geben Sie den folgenden Befehl ein, um die Einrichtung der Kamera zu testen.
raspistill -v -o test.jpgSo werden ein Vorschaufenster im Raspberry Pi geöffnet, ein Bild mit dem Namen
test.jpgin Ihrem aktuellen Verzeichnis gespeichert und Informationen über die Kamera im Raspberry Pi-Terminal angezeigt.
Schritt 2: Installieren des MXNet-Frameworks
Installieren Sie in diesem Schritt die MXNet-Bibliotheken auf Ihrem Raspberry Pi.
-
Melden Sie sich per Fernzugriff bei Ihrem Raspberry Pi an.
ssh pi@your-device-ip-address -
Öffnen Sie die MXNet-Dokumentation, öffnen Sie Installing MXNet
und folgen Sie den Anweisungen zur Installation von MXNet auf dem Gerät. Anmerkung
Wir empfehlen, für dieses Tutorial Version 1.5.0 zu installieren und MXNet aus dem Quellcode zu erstellen, um Gerätekonflikte zu vermeiden.
-
Überprüfen Sie nach der Installation von MXNet die folgende Konfiguration:
-
Stellen Sie sicher, dass das
ggc_user-Systemkonto das MXNet-Framework verwenden kann.sudo -u ggc_user bash -c 'python3 -c "import mxnet"' -
Vergewissern Sie sich, dass NumPy es installiert ist.
sudo -u ggc_user bash -c 'python3 -c "import numpy"'
-
Schritt 3: Erstellen eines MXNet-Modellpakets
In diesem Schritt erstellen Sie ein Modellpaket, das ein vortrainiertes MXNet-Beispielmodell zum Hochladen auf Amazon Simple Storage Service (Amazon S3) enthält. AWS IoT Greengrass kann ein Modellpaket von Amazon S3 verwenden, vorausgesetzt, Sie verwenden das tar.gz- oder ZIP-Format.
-
Laden Sie auf Ihrem Computer das MXNet-Beispiel für Raspberry Pi von Beispiele für Machine Learning herunter.
-
Entpacken Sie die heruntergeladene
mxnet-py3-armv7l.tar.gz-Datei. -
Navigieren Sie zum
squeezenetVerzeichnis .cdpath-to-downloaded-sample/mxnet-py3-armv7l/models/squeezenetDie
squeezenet.zip-Datei in diesem Verzeichnis ist Ihr Modellpaket. Es enthält SqueezeNet Open-Source-Modellartefakte für ein Bildklassifizierungsmodell. Später laden Sie dieses Modellpaket auf Amazon S3 hoch.
Schritt 4: Erstellen und veröffentlichen Sie eine Lambda-Funktion
Erstellen Sie in diesem Schritt ein Bereitstellungspaket für die Lambda-Funktion und eine Lambda-Funktion. Veröffentlichen Sie anschließend eine Funktionsversion und erstellen einen Alias.
Erstellen Sie zunächst das Bereitstellungspaket für die Lambda-Funktion.
-
Navigieren Sie auf Ihrem Computer zum
examples-Verzeichnis im Beispielpaket, das Sie in Schritt 3: Erstellen eines MXNet-Modellpakets entpackt haben.cdpath-to-downloaded-sample/mxnet-py3-armv7l/examplesDas
examples-Verzeichnis enthält Funktionscode und Abhängigkeiten.-
greengrassObjectClassification.pyist der in diesem Tutorial verwendete Inferenzcode. Sie können diesen Code als Vorlage verwenden, um eine eigene Inferenzfunktion zu erstellen. -
greengrasssdkist Version 1.5.0 des AWS IoT Greengrass Core SDK für Python.Anmerkung
Wenn eine neue Version verfügbar ist, können Sie sie herunterladen und die SDK-Version in Ihrem Bereitstellungspaket aktualisieren. Weitere Informationen finden Sie unter AWS IoT Greengrass Core SDK für Python
unter GitHub.
-
-
Komprimieren Sie den Inhalt des
examples-Verzeichnisses in eine Datei namensgreengrassObjectClassification.zip. Dies ist Ihr Bereitstellungspaket.zip -r greengrassObjectClassification.zip .Anmerkung
Stellen Sie sicher, dass sich die
.py-Dateien und -Abhängigkeiten im Stammverzeichnis befinden.Erstellen Sie als Nächstes die Lambda-Funktion.
-
Wählen Sie in der AWS IoT Konsole Funktionen und Funktion erstellen aus.
-
Wählen Sie „Von Grund auf neu erstellen“ und verwenden Sie die folgenden Werte, um Ihre Funktion zu erstellen:
-
Geben Sie für Function name (Funktionsname)
greengrassObjectClassificationein. -
Wählen Sie für Runtime (Laufzeit) die Option Python 3.7 aus.
Behalten Sie für Berechtigungen die Standardeinstellung bei. Dadurch wird eine Ausführungsrolle erstellt, die grundlegende Lambda-Berechtigungen gewährt. Diese Rolle wird nicht verwendet von AWS IoT Greengrass.
-
-
Wählen Sie Funktion erstellen.
Laden Sie jetzt Ihr Lambda-Funktionsbereitstellungspaket hoch und registrieren Sie den Handler.
-
Wählen Sie Ihre Lambda-Funktion und laden Sie Ihr Lambda-Funktionsbereitstellungspaket hoch.
-
Wählen Sie auf der Registerkarte Code unter Codequelle die Option Hochladen von aus. Wählen Sie in der Dropdownliste die Option „.zip-Datei“ aus.
-
Wählen Sie Hochladen und dann Ihr
greengrassObjectClassification.zipBereitstellungspaket aus. Wählen Sie dann Save (Speichern) aus. -
Wählen Sie auf der Registerkarte Code für die Funktion unter Laufzeiteinstellungen die Option Bearbeiten aus , und geben Sie dann die folgenden Werte ein.
-
Wählen Sie für Runtime (Laufzeit) die Option Python 3.7 aus.
-
Geben Sie unter Handler
greengrassObjectClassification.function_handlerein.
Wählen Sie Speichern.
-
Veröffentlichen Sie als Nächstes die erste Version Ihrer Lambda-Funktion. Anschließend erstellen Sie einen Alias für die Version.
Anmerkung
Greengrass-Gruppen können eine Lambda-Funktion nach Alias (empfohlen) oder nach Version referenzieren. Die Verwendung eines Alias erleichtert die Verwaltung von Code-Updates, da Sie Ihre Abonnementtabelle oder Gruppendefinition nicht ändern müssen, wenn der Funktionscode aktualisiert wird. Stattdessen verweisen Sie den Alias einfach auf die neue Funktionsversion.
-
-
Wählen Sie im Menü Actions die Option Publish new version aus.
-
Geben Sie unter Version description (Versionsbeschreibung) den Wert
First versionein und wählen Sie dann Publish (Veröffentlichen) aus. -
Wählen Sie auf der Konfigurationsseite von GreengrassObjectClassification: 1 im Menü Aktionen die Option Alias erstellen aus.
-
Geben Sie auf der Seite Create a new alias folgende Werte an:
-
Geben Sie unter Name
mlTestein. -
Geben Sie in Version (Version)
1ein.
Anmerkung
AWS IoT Greengrass unterstützt keine Lambda-Aliase für $LATEST-Versionen.
-
-
Wählen Sie Speichern.
Fügen Sie nun die Lambda-Funktion zu Ihrer Greengrass-Gruppe hinzu.
Schritt 5: Fügen Sie die Lambda-Funktion zur Greengrass-Gruppe hinzu
Fügen Sie in diesem Schritt die Lambda-Funktion zur Gruppe hinzu und konfigurieren Sie dann ihre Lebenszyklus- und Umgebungsvariablen.
Fügen Sie zunächst die Lambda-Funktion zu Ihrer Greengrass-Gruppe hinzu.
-
Erweitern Sie im Navigationsbereich der AWS IoT Konsole unter Verwalten die Option Greengrass-Geräte und wählen Sie dann Gruppen (V1) aus.
-
Wählen Sie auf der Gruppenkonfigurationsseite die Registerkarte Lambda-Funktionen.
-
Wählen Sie im Abschnitt Meine Lambda-Funktionen die Option Hinzufügen aus.
-
Wählen Sie für die Lambda-Funktion Greengrass aus. ObjectClassification
-
Wählen Sie für die Version der Lambda-Funktion. Alias:mlTest
Als Nächstes konfigurieren Sie die Lebenszyklus- und Umgebungsvariablen der Lambda-Funktion.
-
Nehmen Sie im Abschnitt zur Konfiguration der Lambda-Funktion die folgenden Aktualisierungen vor.
Anmerkung
Wir empfehlen, dass Sie Ihre Lambda-Funktion ohne Containerisierung ausführen, es sei denn, Ihr Geschäftsfall erfordert dies. Auf diese Weise können Sie auf die GPU und Kamera Ihres Geräts zugreifen, ohne die Geräteressourcen konfigurieren zu müssen. Wenn Sie ohne Containerisierung arbeiten, müssen Sie auch Root-Zugriff auf Ihre AWS IoT Greengrass Lambda-Funktionen gewähren.
-
Um ohne Containerisierung zu laufen:
-
Wählen Sie für Systembenutzer und -gruppe.
Another user ID/group IDGeben Sie für Systembenutzer-ID den Wert ein0. Geben Sie für Systemgruppen-ID den Wert ein0.Dadurch kann Ihre Lambda-Funktion als Root ausgeführt werden. Weitere Hinweise zur Ausführung als Root finden Sie unterEinstellung der Standardzugriffsidentität für Lambda-Funktionen in einer Gruppe.
Tipp
Sie müssen auch Ihre
config.jsonDatei aktualisieren, um Root-Zugriff auf Ihre Lambda-Funktion zu gewähren. Das Verfahren finden Sie unterEine Lambda-Funktion als Root ausführen. -
Wählen Sie für die Containerisierung der Lambda-Funktion die Option Kein Container aus.
Weitere Hinweise zur Ausführung ohne Containerisierung finden Sie unter. Überlegungen bei der Wahl der Containerisierung von Lambda-Funktionen
-
Geben Sie in Timeout (Zeitüberschreitung)
10 secondsein. -
Wählen Sie für Pinned die Option True aus.
Weitere Informationen finden Sie unter Lebenszykluskonfiguration für Greengrass Lambda-Funktionen.
-
-
Um stattdessen im containerisierten Modus zu arbeiten:
Anmerkung
Wir empfehlen nicht, im containerisierten Modus zu arbeiten, es sei denn, Ihr Geschäftsfall erfordert dies.
-
Wählen Sie für Systembenutzer und Gruppe die Option Gruppenstandard verwenden aus.
-
Wählen Sie für die Containerisierung von Lambda-Funktionen die Option Gruppenstandard verwenden aus.
-
Geben Sie in Memory Limit (Speicherlimit)
96 MBein. -
Geben Sie in Timeout (Zeitüberschreitung)
10 secondsein. -
Wählen Sie für Pinned die Option True aus.
Weitere Informationen finden Sie unter Lebenszykluskonfiguration für Greengrass Lambda-Funktionen.
-
-
-
Erstellen Sie in Environment variables (Umgebungsvariablen) ein Schlüssel-Wert-Paar. Ein Schlüssel-Wert-Paar ist für Funktionen erforderlich, die mit MXNet-Modellen auf einem Raspberry PI interagieren.
Verwenden Sie als Schlüssel MXNET_ENGINE_TYPE. Verwenden NaiveEngine Sie für den Wert.
Anmerkung
In Ihren eigenen benutzerdefinierten Lambda-Funktionen können Sie optional die Umgebungsvariable in Ihrem Funktionscode festlegen.
-
Behalten Sie die Standardwerte für alle anderen Eigenschaften bei und wählen Sie Lambda-Funktion hinzufügen.
Schritt 6: Hinzufügen von Ressourcen zur Greengrass-Gruppe
Erstellen Sie in diesem Schritt Ressourcen für das Kameramodul und das ML-Inferenzmodell und verknüpfen Sie die Ressourcen mit der Lambda-Funktion. Dadurch kann die Lambda-Funktion auf die Ressourcen auf dem Kerngerät zugreifen.
Anmerkung
Wenn Sie im Modus ohne Container arbeiten, AWS IoT Greengrass können Sie auf die GPU und Kamera Ihres Geräts zugreifen, ohne diese Geräteressourcen zu konfigurieren.
Erstellen Sie zunächst zwei lokale Geräteressourcen für die Kamera: eine für den gemeinsam genutzten Speicher und eine für die Geräteschnittstelle. Weitere Informationen zum Zugriff auf lokale Ressourcen finden Sie unter Greifen Sie mit Lambda-Funktionen und Konnektoren auf lokale Ressourcen zu.
-
Wählen Sie auf der Seite mit der Gruppenkonfiguration die Registerkarte Ressourcen aus.
-
Wählen Sie im Abschnitt Lokale Ressourcen die Option Lokale Ressource hinzufügen aus.
-
Verwenden Sie auf der Seite Lokale Ressource hinzufügen die folgenden Werte:
-
Geben Sie für Resource name (Ressourcenname)
videoCoreSharedMemoryein. -
Wählen Sie in Resource type (Ressourcentyp) die Option Device (Gerät) aus.
-
Geben Sie für Lokaler Gerätepfad den Wert ein
/dev/vcsm.Der Gerätepfad ist der lokale absolute Pfad der Geräteressource. Dieser Pfad kann nur auf ein zeichenorientiertes Gerät oder ein Blockgerät unter
/devverweisen. -
Wählen Sie für Systemgruppenbesitzer und Dateizugriffsberechtigungen die Option Dateisystemberechtigungen der Systemgruppe, der die Ressource gehört, automatisch hinzufügen aus.
Mit der Option Systemgruppenbesitzer und Dateizugriffsberechtigungen können Sie dem Lambda-Prozess zusätzliche Dateizugriffsberechtigungen gewähren. Weitere Informationen finden Sie unter Dateizugriffsberechtigung des Gruppenbesitzers.
-
-
Als nächstes fügen Sie eine lokale Geräteressource für die Kameraschnittstelle hinzu.
-
Wählen Sie Lokale Ressource hinzufügen.
-
Verwenden Sie auf der Seite Lokale Ressource hinzufügen die folgenden Werte:
-
Geben Sie für Resource name (Ressourcenname)
videoCoreInterfaceein. -
Wählen Sie in Resource type (Ressourcentyp) die Option Device (Gerät) aus.
-
Geben Sie für Lokaler Gerätepfad den Wert ein
/dev/vchiq. -
Wählen Sie für Systemgruppenbesitzer und Dateizugriffsberechtigungen die Option Dateisystemberechtigungen der Systemgruppe, der die Ressource gehört, automatisch hinzufügen aus.
-
-
Wählen Sie unten auf der Seite Ressource hinzufügen aus.
Fügen Sie nun das Inferenz-Modell als Machine Learning-Ressource hinzu. Dieser Schritt beinhaltet das Hochladen des squeezenet.zip Modellpakets auf Amazon S3.
-
Wählen Sie auf der Registerkarte Ressourcen für Ihre Gruppe im Abschnitt Maschinelles Lernen die Option Ressource für maschinelles Lernen hinzufügen aus.
-
Geben Sie auf der Seite Eine Ressource für maschinelles Lernen hinzufügen als Ressourcenname ein
squeezenet_model. -
Wählen Sie als Modellquelle die Option Ein in S3 gespeichertes Modell verwenden aus, z. B. ein mit dem Deep Learning Compiler optimiertes Modell.
-
Geben Sie für S3-URI einen Pfad ein, in dem der S3-Bucket gespeichert ist.
-
Wählen Sie S3 durchsuchen. Dadurch wird eine neue Registerkarte zur Amazon S3-Konsole geöffnet.
-
Laden Sie die
squeezenet.zipDatei auf der Registerkarte der Amazon S3-Konsole in einen S3-Bucket hoch. Weitere Informationen finden Sie unter Wie lade ich Dateien und Ordner in einen S3-Bucket hoch? im Amazon Simple Storage Service-Benutzerhandbuch.Anmerkung
Damit auf den S3-Bucket zugegriffen werden kann, muss Ihr Bucket-Name die Zeichenfolge enthalten
greengrassund der Bucket muss sich in derselben Region befinden, für die Sie ihn verwenden AWS IoT Greengrass. Wählen Sie einen eindeutigen Namen (wie z. B.:greengrass-bucket-). Verwenden Sie keinen Punkt (user-id-epoch-time.) im Bucket-Namen. -
Suchen Sie auf der Registerkarte „ AWS IoT Greengrass Konsole“ Ihren S3-Bucket und wählen Sie ihn aus. Suchen Sie Ihre hochgeladene Datei
squeezenet.zipund wählen Sie Select (Auswählen). Möglicherweise müssen Sie die Refresh (Aktualisieren) wählen, um die Liste der verfügbaren Buckets und Dateien zu aktualisieren. -
Geben Sie für Destination path (Zielpfad)
/greengrass-machine-learning/mxnet/squeezenetein.Dies ist das Ziel für das lokale Modell im Lambda-Laufzeit-Namespace. Wenn Sie die Gruppe bereitstellen, AWS IoT Greengrass ruft das Quellmodellpaket ab und extrahiert dann den Inhalt in das angegebene Verzeichnis. Die Lambda-Beispielfunktion für dieses Tutorial ist bereits so konfiguriert, dass sie diesen Pfad (in der
model_pathVariablen) verwendet. -
Wählen Sie unter Systemgruppenbesitzer und Dateizugriffsberechtigungen die Option Keine Systemgruppe aus.
-
Wählen Sie Add resource (Ressource hinzufügen) aus.
Verwendung von SageMaker KI-trainierten Modellen
In diesem Tutorial wird ein Modell verwendet, das in Amazon S3 gespeichert ist, aber Sie können auch problemlos SageMaker KI-Modelle verwenden. Die AWS IoT Greengrass Konsole verfügt über eine integrierte SageMaker KI-Integration, sodass Sie diese Modelle nicht manuell auf Amazon S3 hochladen müssen. Die Anforderungen und Einschränkungen für die Verwendung von SageMaker KI-Modellen finden Sie unterUnterstützte Modellquellen.
So verwenden Sie ein SageMaker KI-Modell:
-
Wählen Sie als Modellquelle die Option Ein in AWS SageMaker KI trainiertes Modell verwenden aus, und wählen Sie dann den Namen des Trainingsjobs des Modells aus.
-
Geben Sie als Zielpfad den Pfad zu dem Verzeichnis ein, in dem Ihre Lambda-Funktion nach dem Modell sucht.
Schritt 7: Hinzufügen eines Abonnements zur Greengrass-Gruppe
In diesem Schritt fügen Sie der Gruppe ein Abonnement hinzu. Dieses Abonnement ermöglicht es der Lambda-Funktion, Prognoseergebnisse zu senden, AWS IoT indem sie sie in einem MQTT-Thema veröffentlicht.
-
Wählen Sie auf der Gruppenkonfigurationsseite die Registerkarte Abonnements und dann Abonnement hinzufügen aus.
-
Konfigurieren Sie auf der Seite mit den Abonnementdetails Quelle und Ziel wie folgt:
-
Wählen Sie unter Quelltyp die Lambda-Funktion und dann ObjectClassification Greengrass aus.
-
Wählen Sie unter Zieltyp die Option Service und dann IoT Cloud aus.
-
-
Geben Sie im Themenfilter Folgendes ein
hello/world, und wählen Sie dann Abonnement erstellen aus.
Schritt 8: Bereitstellen der Greengrass-Gruppe
In diesem Schritt stellen Sie die aktuelle Version der Gruppendefinition für das Greengrass Core-Gerät bereit. Die Definition enthält die Lambda-Funktion, die Ressourcen und die Abonnementkonfigurationen, die Sie hinzugefügt haben.
-
Stellen Sie sicher, dass der AWS IoT Greengrass Core läuft. Führen Sie im Raspberry Pi-Terminal die folgenden Befehle aus, falls nötig.
So prüfen Sie, ob der Daemon ausgeführt wird:
ps aux | grep -E 'greengrass.*daemon'Wenn die Ausgabe einen
root-Eintrag für/greengrass/ggc/packages/1.11.6/bin/daemonenthält, dann wird der Daemon ausgeführt.Anmerkung
Die Version im Pfad hängt von der AWS IoT Greengrass Core-Softwareversion ab, die auf Ihrem Core-Gerät installiert ist.
Um den Daemon zu starten:
cd /greengrass/ggc/core/ sudo ./greengrassd start
-
Wählen Sie auf der Seite mit der Gruppenkonfiguration die Option Deploy aus.
-
Wählen Sie auf der Registerkarte Lambda-Funktionen im Abschnitt System Lambda-Funktionen die Option IP Detector aus und klicken Sie auf Bearbeiten.
-
Wählen Sie im Dialogfeld IP-Detektoreinstellungen bearbeiten die Option MQTT-Broker-Endpunkte automatisch erkennen und überschreiben aus.
-
Wählen Sie Speichern.
Damit können Geräte automatisch Core-Verbindungsinformationen abrufen, z. B. die IP-Adresse, DNS und die Portnummer. Die automatische Erkennung wird empfohlen, unterstützt aber AWS IoT Greengrass auch manuell angegebene Endpunkte. Sie werden nur bei der ersten Bereitstellung der Gruppe zur Angabe der Ermittlungsmethode aufgefordert.
Anmerkung
Wenn Sie dazu aufgefordert werden, erteilen Sie die Erlaubnis, die Greengrass-Servicerolle zu erstellen und sie Ihrer AWS-Konto in der aktuellen Rolle zuzuordnen. AWS-Region Diese Rolle ermöglicht AWS IoT Greengrass den Zugriff auf Ihre Ressourcen in AWS Diensten.
Auf der Seite Deployments werden der Zeitstempel, die Versions-ID und der Status der Bereitstellung angegeben. Wenn der Vorgang abgeschlossen ist, sollte der für die Bereitstellung angezeigte Status „Abgeschlossen“ lauten.
Weitere Informationen über Bereitstellungen finden Sie unter Bereitstellen AWS IoT Greengrass Gruppen zu einem AWS IoT Greengrass core. Hilfe zur Problembehebung finden Sie unter Fehlerbehebung AWS IoT Greengrass.
Schritt 9: Testen der Inferenzanwendung
Nun können Sie prüfen, ob die Bereitstellung korrekt konfiguriert ist. Zum Testen abonnieren Sie das hello/world Thema und sehen sich die Prognoseergebnisse an, die von der Lambda-Funktion veröffentlicht werden.
Anmerkung
Wenn ein Bildschirm mit dem Raspberry Pi verbunden ist, wird das Livebild der Kamera in einem Vorschaufenster angezeigt.
-
Wählen Sie in der AWS IoT Konsole unter Test die Option MQTT-Testclient aus.
-
Verwenden Sie für Subscriptions (Abonnements) die folgenden Werte:
-
Verwenden hello/world Sie für das Abonnement-Thema.
-
Wählen Sie unter Zusätzliche Konfiguration für die Anzeige von MQTT-Payloads die Option Payloads als Zeichenfolgen anzeigen aus.
-
-
Wählen Sie Subscribe (Abonnieren) aus.
Wenn der Test erfolgreich ist, werden die Meldungen der Lambda-Funktion unten auf der Seite angezeigt. Jede Nachricht enthält die ersten fünf der gesamten Prognoseergebnisse des Abbildes im Format: Wahrscheinlichkeit, prognostizierte Klassen-ID und zugehöriger Klassenname.
Fehlerbehebung AWS IoT Greengrass ML-Inferenz
Wenn der Test nicht erfolgreich ist, können Sie folgende Schritte ausführen, um den Fehler zu beheben. Führen Sie im Raspberry Pi-Terminal die Befehle aus.
Fehlerprotokolle prüfen
-
Wechseln Sie zum Root-Benutzer und navigieren Sie zum Verzeichnis
log. Für den Zugriff auf AWS IoT Greengrass Protokolle sind Root-Rechte erforderlich.sudo su cd /greengrass/ggc/var/log -
Überprüfen Sie im
system-Verzeichnisruntime.logoderpython_runtime.log.Überprüfen Sie im
user/-Verzeichnisregion/account-idgreengrassObjectClassification.log.Weitere Informationen finden Sie unter Fehlerbehebung mit Protokollen.
Fehler beim Entpacken in "Runtime.log"
Wenn runtime.log einen Fehler enthält, der wie folgt aussieht, stellen Sie sicher, dass Ihr tar.gz-Quellmodellpaket über ein übergeordnetes Verzeichnis verfügt.
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
Wenn Ihr Paket über kein übergeordnetes Verzeichnis verfügt, das die Modelldateien enthält, verwenden Sie den folgenden Befehl, um das Modell erneut zu verpacken:
tar -zcvf model.tar.gz ./model
Beispiel:
─$tar -zcvf test.tar.gz ./test./test ./test/some.file ./test/some.file2 ./test/some.file3
Anmerkung
Verwenden Sie keine abschließenden /*-Zeichen in diesem Befehl.
Stellen Sie sicher, dass die Lambda-Funktion erfolgreich bereitgestellt wurde
-
Listet den Inhalt des bereitgestellten Lambda im Verzeichnis auf
/lambda. Ersetzen Sie die Platzhalterwerte, bevor Sie den Befehl ausführen.cd /greengrass/ggc/deployment/lambda/arn:aws:lambda:region:account:function:function-name:function-versionls -la -
Überprüfen Sie, ob das Verzeichnis denselben Inhalt wie das
greengrassObjectClassification.zip-Bereitstellungspaket enthält, das Sie in Schritt 4: Erstellen und veröffentlichen Sie eine Lambda-Funktion hochgeladen haben.Stellen Sie sicher, dass sich die
.py-Dateien und -Abhängigkeiten im Stammverzeichnis befinden.
Sicherstellen, dass das Inferenzmodell erfolgreich bereitgestellt wird
-
Suchen Sie die Prozess-Identifikationsnummer (PID) des Lambda-Laufzeitprozesses:
ps aux | grep 'lambda-function-name*'In der Ausgabe erscheint die PID in der zweiten Spalte der Zeile für den Lambda-Laufzeitprozess.
-
Geben Sie den Lambda-Laufzeit-Namespace ein. Stellen Sie sicher, dass Sie den
pidPlatzhalterwert ersetzen, bevor Sie den Befehl ausführen.Anmerkung
Dieses Verzeichnis und sein Inhalt befinden sich im Lambda-Laufzeit-Namespace, sodass sie in einem regulären Linux-Namespace nicht sichtbar sind.
sudo nsenter -tpid-m /bin/bash -
Listen Sie den Inhalt des lokalen Verzeichnisses, das Sie für die ML-Ressource angegeben haben, auf.
cd /greengrass-machine-learning/mxnet/squeezenet/ ls -lsDie Dateien sollten folgendermaßen aussehen:
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
Nächste Schritte
Erkunden Sie als Nächstes andere Inferenz-Apps. AWS IoT Greengrass bietet weitere Lambda-Funktionen, mit denen Sie lokale Inferenz ausprobieren können. Sie finden das Beispielpaket im Ordner der vorkompilierten Bibliotheken, den Sie unter Schritt 2: Installieren des MXNet-Frameworks heruntergeladen haben.
Konfigurieren eines Intel Atom
Um dieses Tutorial auf einem Intel Atom-Gerät auszuführen, müssen Sie Quellbilder bereitstellen, die Lambda-Funktion konfigurieren und eine weitere lokale Geräteressource hinzufügen. Um die GPU für die Inferenz zu verwenden, stellen Sie sicher, dass die folgende Software auf Ihrem Gerät installiert ist:
-
OpenCL Version 1.0 oder höher
-
Python 3.7 und pip
Anmerkung
Wenn Ihr Gerät mit Python 3.6 vorkonfiguriert ist, können Sie stattdessen einen Symlink zu Python 3.7 erstellen. Weitere Informationen finden Sie unter Schritt 2.
-
Laden Sie statische PNG- oder JPG-Bilder für die Lambda-Funktion herunter, um sie für die Bildklassifizierung zu verwenden. Das Beispiel funktioniert am besten mit kleinen Bilddateien.
Speichern Sie Ihre Bilddateien in dem Verzeichnis mit der
greengrassObjectClassification.py-Datei (oder in einem Unterverzeichnis dieses Verzeichnisses). Dies ist im Lambda-Funktionsbereitstellungspaket enthalten, in das Sie hochladen. Schritt 4: Erstellen und veröffentlichen Sie eine Lambda-FunktionAnmerkung
Wenn Sie es verwenden AWS DeepLens, können Sie die integrierte Kamera verwenden oder Ihre eigene Kamera montieren, um Rückschlüsse auf aufgenommene Bilder anstelle von statischen Bildern durchzuführen. Wir empfehlen jedoch nachdrücklich, zunächst mit statischen Bildern zu beginnen.
Wenn Sie eine Kamera verwenden, stellen Sie sicher, dass das
awscam-APT-Paket installiert und auf dem neuesten Stand ist. Weitere Informationen finden Sie im AWS DeepLens Entwicklerhandbuch unter Aktualisieren Sie Ihr AWS DeepLens Gerät. -
Wenn Sie Python 3.7 nicht verwenden, stellen Sie sicher, dass Sie einen Symlink von Python 3.x zu Python 3.7 erstellen. Dadurch wird Ihr Gerät für die Verwendung von Python 3 konfiguriert. AWS IoT Greengrass Führen Sie den folgenden Befehl aus, um Ihre Python-Installation zu suchen:
which python3Führen Sie den folgenden Befehl aus, um den Symlink zu erstellen.
sudo ln -spath-to-python-3.x/python3.xpath-to-python-3.7/python3.7Starten Sie das Gerät neu.
-
Bearbeiten Sie die Konfiguration der Lambda-Funktion. Folgen Sie dem Verfahren unter Schritt 5: Fügen Sie die Lambda-Funktion zur Greengrass-Gruppe hinzu.
Anmerkung
Wir empfehlen, dass Sie Ihre Lambda-Funktion ohne Containerisierung ausführen, es sei denn, Ihr Geschäftsfall erfordert dies. Auf diese Weise können Sie auf die GPU und Kamera Ihres Geräts zugreifen, ohne die Geräteressourcen konfigurieren zu müssen. Wenn Sie ohne Containerisierung arbeiten, müssen Sie auch Root-Zugriff auf Ihre AWS IoT Greengrass Lambda-Funktionen gewähren.
-
Um ohne Containerisierung zu laufen:
-
Wählen Sie für Systembenutzer und -gruppe.
Another user ID/group IDGeben Sie für Systembenutzer-ID den Wert ein0. Geben Sie für Systemgruppen-ID den Wert ein0.Dadurch kann Ihre Lambda-Funktion als Root ausgeführt werden. Weitere Hinweise zur Ausführung als Root finden Sie unterEinstellung der Standardzugriffsidentität für Lambda-Funktionen in einer Gruppe.
Tipp
Sie müssen auch Ihre
config.jsonDatei aktualisieren, um Root-Zugriff auf Ihre Lambda-Funktion zu gewähren. Das Verfahren finden Sie unterEine Lambda-Funktion als Root ausführen. -
Wählen Sie für die Containerisierung der Lambda-Funktion die Option Kein Container aus.
Weitere Hinweise zur Ausführung ohne Containerisierung finden Sie unter. Überlegungen bei der Wahl der Containerisierung von Lambda-Funktionen
-
Aktualisieren Sie den Wert für Timeout auf 5 Sekunden. Dies stellt sicher, dass die Zeit für die Anforderung nicht zu schnell überschritten wird. Nach der Einrichtung dauert es einige Minuten, bis die Inferenz ausgeführt wird.
-
Wählen Sie unter Fixiert die Option True aus.
-
Wählen Sie unter Zusätzliche Parameter für Lesezugriff auf das Verzeichnis /sys die Option Aktiviert aus.
-
Wählen Sie für Lambda-Lebenszyklus die Option Diese Funktion langlebig einstellen und unbegrenzt ausführen aus.
-
-
Um stattdessen im containerisierten Modus zu arbeiten:
Anmerkung
Wir empfehlen nicht, im containerisierten Modus zu arbeiten, es sei denn, Ihr Geschäftsfall erfordert dies.
-
Aktualisieren Sie den Wert für Timeout auf 5 Sekunden. Dies stellt sicher, dass die Zeit für die Anforderung nicht zu schnell überschritten wird. Nach der Einrichtung dauert es einige Minuten, bis die Inferenz ausgeführt wird.
-
Wählen Sie für Pinned die Option True aus.
-
Wählen Sie unter Zusätzliche Parameter für Lesezugriff auf das Verzeichnis /sys die Option Aktiviert aus.
-
-
-
Wenn Sie im containerisierten Modus arbeiten, fügen Sie die erforderliche lokale Geräteressource hinzu, um Zugriff auf die GPU Ihres Geräts zu gewähren.
Anmerkung
Wenn Sie im nicht containerisierten Modus arbeiten, AWS IoT Greengrass können Sie auf die GPU Ihres Geräts zugreifen, ohne Geräteressourcen konfigurieren zu müssen.
-
Wählen Sie auf der Seite mit der Gruppenkonfiguration die Registerkarte Ressourcen aus.
-
Wählen Sie Lokale Ressource hinzufügen aus.
-
Definieren Sie die Ressource:
-
Geben Sie für Resource name (Ressourcenname)
renderD128ein. -
Wählen Sie als Ressourcentyp die Option Lokales Gerät aus.
-
Geben Sie im Feld Device path (Gerätepfad)
/dev/dri/renderD128ein. -
Wählen Sie für Systemgruppenbesitzer und Dateizugriffsberechtigungen die Option Dateisystemberechtigungen der Systemgruppe, der die Ressource gehört, automatisch hinzufügen aus.
-
Gewähren Sie Ihrer Lambda-Funktion Lese- und Schreibzugriff für Ihre Lambda-Funktion, wenn Sie einer Lambda-Funktion angehören.
-
-
Konfigurieren eines NVIDIA Jetson TX2
Um dieses Tutorial auf einem NVIDIA Jetson TX2 auszuführen, stellen Sie Quellbilder bereit und konfigurieren Sie die Lambda-Funktion. Bei Verwendung der GPU müssen Sie zusätzlich lokale Geräteressourcen hinzufügen.
-
Stellen Sie sicher, dass Ihr Jetson-Gerät so konfiguriert ist, dass Sie die Core-Software installieren können. AWS IoT Greengrass Weitere Informationen zur Konfiguration des Geräts finden Sie unter Einrichten anderer Geräte.
-
Öffnen Sie die MXNet-Dokumentation, gehen Sie zu Installing MXNet on a Jetson
und folgen Sie den Anweisungen zur Installation von MXNet auf dem Jetson-Gerät. Anmerkung
Wenn Sie MXNet aus der Quelle erstellen möchten, folgen Sie den Anweisungen zum Erstellen der freigegebenen Bibliothek. Bearbeiten Sie die folgenden Einstellungen in Ihrer
config.mk-Datei für das Arbeiten mit einem Jetson TX2-Gerät:-
Fügen Sie
-gencode arch=compute-62, code=sm_62derCUDA_ARCH-Einstellung hinzu. -
Schalten Sie CUDA ein.
USE_CUDA = 1
-
-
Laden Sie statische PNG- oder JPG-Bilder für die Lambda-Funktion herunter, um sie für die Bildklassifizierung zu verwenden. Die App funktioniert am besten mit kleinen Bilddateien. Alternativ können Sie eine Kamera auf der Jetson-Karte instrumentieren, um die Quellbilder zu erfassen.
Speichern Sie Ihre Abbilddateien in dem Verzeichnis, das die
greengrassObjectClassification.py-Datei enthält. Sie können sie auch in einem Unterverzeichnis dieses Verzeichnisses speichern. Dieses Verzeichnis befindet sich im Lambda-Funktionsbereitstellungspaket, in das Sie hochladen. Schritt 4: Erstellen und veröffentlichen Sie eine Lambda-Funktion -
Erstellen Sie einen Symlink von Python 3.7 zu Python 3.6, um Python 3 mit zu verwenden. AWS IoT Greengrass Führen Sie den folgenden Befehl aus, um Ihre Python-Installation zu suchen:
which python3Führen Sie den folgenden Befehl aus, um den Symlink zu erstellen.
sudo ln -spath-to-python-3.6/python3.6path-to-python-3.7/python3.7Starten Sie das Gerät neu.
-
Stellen Sie sicher, dass das
ggc_user-Systemkonto das MXNet-Framework verwenden kann:“sudo -u ggc_user bash -c 'python3 -c "import mxnet"' -
Bearbeiten Sie die Konfiguration der Lambda-Funktion. Folgen Sie dem Verfahren unter Schritt 5: Fügen Sie die Lambda-Funktion zur Greengrass-Gruppe hinzu.
Anmerkung
Wir empfehlen, dass Sie Ihre Lambda-Funktion ohne Containerisierung ausführen, es sei denn, Ihr Geschäftsfall erfordert dies. Auf diese Weise können Sie auf die GPU und Kamera Ihres Geräts zugreifen, ohne die Geräteressourcen konfigurieren zu müssen. Wenn Sie ohne Containerisierung arbeiten, müssen Sie auch Root-Zugriff auf Ihre AWS IoT Greengrass Lambda-Funktionen gewähren.
-
Um ohne Containerisierung zu laufen:
-
Wählen Sie für Systembenutzer und -gruppe.
Another user ID/group IDGeben Sie für Systembenutzer-ID den Wert ein0. Geben Sie für Systemgruppen-ID den Wert ein0.Dadurch kann Ihre Lambda-Funktion als Root ausgeführt werden. Weitere Hinweise zur Ausführung als Root finden Sie unterEinstellung der Standardzugriffsidentität für Lambda-Funktionen in einer Gruppe.
Tipp
Sie müssen auch Ihre
config.jsonDatei aktualisieren, um Root-Zugriff auf Ihre Lambda-Funktion zu gewähren. Das Verfahren finden Sie unterEine Lambda-Funktion als Root ausführen. -
Wählen Sie für die Containerisierung der Lambda-Funktion die Option Kein Container aus.
Weitere Hinweise zur Ausführung ohne Containerisierung finden Sie unter. Überlegungen bei der Wahl der Containerisierung von Lambda-Funktionen
-
Wählen Sie unter Zusätzliche Parameter für Lesezugriff auf das Verzeichnis /sys die Option Aktiviert aus.
-
Fügen Sie Ihrer Lambda-Funktion unter Umgebungsvariablen die folgenden Schlüssel-Wert-Paare hinzu. Dadurch wird die Verwendung des AWS IoT Greengrass MXNet-Frameworks konfiguriert.
Key (Schlüssel)
Value (Wert)
PATH
/usr/local/cuda/bin: $PATH
MXNET_HOME
$HOME/mxnet/
PYTHONPATH
$MXNET_HOME/python: $ PYTHONPFAD
CUDA_HOME
usr/local//cuda
LD_LIBRARY_PATH
$LD_LIBRARY_PATH:${CUDA_HOME}/lib64
-
-
Um stattdessen im containerisierten Modus zu laufen:
Anmerkung
Wir empfehlen nicht, im containerisierten Modus zu arbeiten, es sei denn, Ihr Geschäftsfall erfordert dies.
-
Erhöhen Sie den Wert für Speicherlimit. Verwenden Sie 500 MB für die CPU oder mindestens 2000 MB für die GPU.
-
Wählen Sie unter Zusätzliche Parameter für Lesezugriff auf das Verzeichnis /sys die Option Aktiviert aus.
-
Fügen Sie Ihrer Lambda-Funktion unter Umgebungsvariablen die folgenden Schlüssel-Wert-Paare hinzu. Dadurch wird die Verwendung des AWS IoT Greengrass MXNet-Frameworks konfiguriert.
Key (Schlüssel)
Value (Wert)
PATH
/usr/local/cuda/bin: $PATH
MXNET_HOME
$HOME/mxnet/
PYTHONPATH
$MXNET_HOME/python: $ PYTHONPFAD
CUDA_HOME
usr/local//cuda
LD_LIBRARY_PATH
$LD_LIBRARY_PATH:${CUDA_HOME}/lib64
-
-
-
Wenn Sie im containerisierten Modus arbeiten, fügen Sie die folgenden lokalen Geräteressourcen hinzu, um Zugriff auf die GPU Ihres Geräts zu gewähren. Folgen Sie dem Verfahren unter Schritt 6: Hinzufügen von Ressourcen zur Greengrass-Gruppe.
Anmerkung
Wenn Sie im nicht containerisierten Modus arbeiten, AWS IoT Greengrass können Sie auf die GPU Ihres Geräts zugreifen, ohne Geräteressourcen konfigurieren zu müssen.
Für jede Ressource:
-
Wählen Sie in Resource type (Ressourcentyp) die Option Device (Gerät) aus.
-
Wählen Sie für Systemgruppenbesitzer und Dateizugriffsberechtigungen die Option Dateisystemberechtigungen der Systemgruppe, der die Ressource gehört, automatisch hinzufügen aus.
Name
Gerätepfad
nvhost-strg
/dev/nvhost-ctrl
nvhost-gpu
/-gpu dev/nvhost
nvhost-strg-gpu
/-strg-gpu dev/nvhost
nvhost-dbg-gpu
/dev/nvhost-dbg-gpu
nvhost-prof-gpu
/dev/nvhost-prof-gpu
nvmap
/dev/nvmap
nvhost-vic
/dev/nvhost-vic
tegra_dc_ctrl
/dev/tegra_dc_ctrl
-
-
Wenn Sie im containerisierten Modus arbeiten, fügen Sie die folgende lokale Volume-Ressource hinzu, um Zugriff auf die Kamera Ihres Geräts zu gewähren. Folgen Sie dem Verfahren unter Schritt 6: Hinzufügen von Ressourcen zur Greengrass-Gruppe.
Anmerkung
Wenn Sie im Modus ohne Container arbeiten, AWS IoT Greengrass können Sie auf die Kamera Ihres Geräts zugreifen, ohne die Volume-Ressourcen konfigurieren zu müssen.
-
Wählen Sie für Resource type (Ressourcentyp) die Option Volume aus.
-
Wählen Sie für Systemgruppenbesitzer und Dateizugriffsberechtigungen die Option Dateisystemberechtigungen der Systemgruppe, der die Ressource gehört, automatisch hinzufügen aus.
Name
Quellpfad
Zielpfad
shm
/dev/shm
/dev/shm
tmp
/tmp
/tmp
-