So konfigurieren Sie Machine Learning-Inferenz mit der AWS Management Console - AWS IoT Greengrass

AWS IoT Greengrass Version 1 trat am 30. Juni 2023 in die erweiterte Lebensphase ein. Weitere Informationen finden Sie in der AWS IoT Greengrass V1 Wartungsrichtlinie. Nach diesem Datum AWS IoT Greengrass V1 werden keine Updates mehr veröffentlicht, die Funktionen, Verbesserungen, Bugfixes oder Sicherheitspatches bieten. Geräte, die auf laufen, werden AWS IoT Greengrass V1 nicht gestört und funktionieren weiterhin und stellen eine Verbindung zur Cloud her. Wir empfehlen Ihnen dringend, zu migrieren AWS IoT Greengrass Version 2, da dies wichtige neue Funktionen und Unterstützung für zusätzliche Plattformen bietet.

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 Machine Learning-Inferenz mit der AWS Management Console

Um die Schritte in diesem Tutorial ausführen zu können, benötigen SieAWS IoT GreengrassCore 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 dasAWS Management Consoleum eine Greengrass-Gruppe so zu konfigurieren, dass sie eine Lambda-Inferenz-App ausführt, die Kamerabilder lokal erkennt, ohne dass Daten in die Cloud gesendet werden. Die Inferenz-App greift auf das Kameramodul auf einem Raspberry Pi zu und führt Inferenz mithilfe der Open Source ausSqueezeNet-Modell

Das Tutorial enthält die folgenden allgemeinen Schritte:

Voraussetzungen

Zum Durchführen dieses Tutorials benötigen Sie Folgendes:

Anmerkung

Dieses Tutorial verwendet ein Raspberry Pi, aber AWS IoT Greengrass unterstützt andere Plattformen, wie z. B. 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. Weitere Informationen zur Konfiguration des -Geräts finden SieDaskönnen Sie dasAWS IoT GreengrassCore-Software finden Sie unterEinrichten anderer Geräte.

Für Plattformen von Drittanbietern, dieAWS IoT Greengrassunterstützt nicht, Sie müssen Ihre Lambda-Funktion im nicht containerisierten Modus ausführen. Um im nicht containerisierten Modus auszuführen, müssen Sie Ihre Lambda-Funktion als Root-Benutzer ausführen. Weitere Informationen erhalten Sie unter Überlegungen bei der Auswahl der Containerisierung von Lambda-Funktionen und Festlegen 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.

  1. Installieren von Updates für Raspbian.

    sudo apt-get update sudo apt-get dist-upgrade
  2. 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 pip

      Wenn 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 --version

      Wenn 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.7 ist, verwenden Sie python3.7 anstelle von python3 für die Befehle in diesem Tutorial. Stellen Sie sicher, dass Ihre pip-Installation der richtigen python3.7- oder python3-Version zugeordnet ist, um Abhängigkeitsfehler zu vermeiden.

  3. Starten Sie den Raspberry Pi neu.

    sudo reboot
  4. Öffnen Sie das Raspberry Pi-Konfigurations-Tool.

    sudo raspi-config
  5. 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.

  6. Geben Sie den folgenden Befehl ein, um die Einrichtung der Kamera zu testen.

    raspistill -v -o test.jpg

    So werden ein Vorschaufenster im Raspberry Pi geöffnet, ein Bild mit dem Namen test.jpg in 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.

  1. Melden Sie sich per Fernzugriff bei Ihrem Raspberry Pi an.

    ssh pi@your-device-ip-address
  2. Ö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, Version 1.5.0 zu installieren und MXNet für dieses Tutorial zu erstellen, um Gerätekonflikte zu vermeiden.

  3. Ü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"'
    • Stellen Sie Folgendes sicher NumPy ist installiert.

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

Schritt 3: Erstellen eines MXNet-Modellpakets

Erstellen Sie in diesem Schritt ein Modellpaket, das ein vortrainiertes MXNet-Modell zum Hochladen auf Amazon Simple Storage Service (Amazon S3) enthält.AWS IoT Greengrasskann ein Modellpaket von Amazon S3 verwenden, vorausgesetzt, Sie verwenden das Format tar.gz oder zip.

  1. Laden Sie auf Ihrem Computer das MXNet-Beispiel für Raspberry Pi von Beispiele für Machine Learning herunter.

  2. Entpacken Sie die heruntergeladene mxnet-py3-armv7l.tar.gz-Datei.

  3. Navigieren Sie zum Verzeichnis squeezenet.

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

    Die squeezenet.zip-Datei in diesem Verzeichnis ist Ihr Modellpaket. Sie 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 einer Lambda-Funktion

Erstellen Sie in diesem Schritt ein Bereitstellungspaket für 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.

  1. Navigieren Sie auf Ihrem Computer zum examples-Verzeichnis im Beispielpaket, das Sie in Schritt 3: Erstellen eines MXNet-Modellpakets entpackt haben.

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

    Das examples-Verzeichnis enthält Funktionscode und Abhängigkeiten.

    • greengrassObjectClassification.py ist 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 vonAWS IoT GreengrassCore-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 unterAWS IoT GreengrassCore-SDK für Pythonauf GitHub.

  2. Komprimieren Sie den Inhalt des examples-Verzeichnisses in eine Datei namens greengrassObjectClassification.zip. Dies ist Ihr Bereitstellungspaket.

    zip -r greengrassObjectClassification.zip .
    Anmerkung

    Stellen Sie sicher, dass sich die .py-Dateien und -Abhängigkeiten im Stammverzeichnis befinden.

     

    Als nächstes erstellen Sie die Lambda-Funktion.

  3. VonAWS IoT-Konsole, die OptionFunktionenundFunktion.

  4. Klicken Sie aufAuthor from scratchund verwenden Sie die folgenden Werte zum Erstellen der Funktion:

    • Geben Sie für Function name (Funktionsname) greengrassObjectClassification ein.

    • Wählen Sie für Runtime (Laufzeit) die Option Python 3.7 aus.

    FürBerechtigungenverwenden Sie die Standardeinstellung bei. Dadurch wird eine Ausführungsrolle erstellt, die grundlegende Lambda-Berechtigungen gewährt. Diese Rolle wird nicht verwendetAWS IoT Greengrass.

  5. Wählen Sie Create function (Funktion erstellen).

     

    Laden Sie nun das Bereitstellungspaket Ihrer Lambda-Funktion hoch und registrieren Sie den Handler

  6. Wählen Sie Ihre Lambda-Funktion und laden Sie Ihr Bereitstellungspaket für Ihre Lambda

    1. Auf derCodeunterQuellcode, wählenHochladen von. Wählen Sie in der Dropdown-Liste die Option.Zip-Datei.

      Die Dropdownliste Upload from mit hervorgehobener ZIP-Datei.
    2. Klicken Sie aufHochladenund wählen Sie dann IhregreengrassObjectClassification.zipBereitstellungspaket Wählen Sie dann Save (Speichern) aus.

    3. Auf derCodefür die Funktion, unterEinstellungen zur Laufzeit, wählenBearbeitenund 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_handler ein.

      Wählen Sie Save (Speichern) aus.

    Als Nächstes veröffentlichen Sie die erste Version der Lambda-Funktion. Anschließend erstellen Sie einen Alias für die Version.

    Anmerkung

    Greengrass-Gruppen können eine Lambda-Funktion per Alias (empfohlen) oder nach Version referenzieren. Mit einem Alias lassen sich Code-Updates einfacher verwalten, da die Abonnementtabelle oder Gruppendefinition nicht geändert werden muss, wenn der Funktionscode aktualisiert wird. Stattdessen zeigen Sie einfach den Alias auf die neue Funktionsversion.

  7. Wählen Sie im Menü Actions die Option Publish new version aus.

    Menü „Actions“ mit der Option „Publish new version“.
  8. Geben Sie unter Version description (Versionsbeschreibung) den Wert First version ein und wählen Sie dann Publish (Veröffentlichen) aus.

  9. Auf dergreengrassObjectClassification: 1-Konfigurationsseite, von derAktionen-Menü, wählen SieErstellen eines Alias.

    Menü „Actions“ mit der Option „Create alias“
  10. Geben Sie auf der Seite Create a new alias folgende Werte an:

    • Geben Sie unter Name mlTest ein.

    • Geben Sie in Version (Version) 1 ein.

    Anmerkung

    AWS IoT Greengrassunterstützt keine Lambda-Aliase für$LATEST-Versionen.

  11. Wählen Sie Save (Speichern) aus.

     

    Fügen Sie nun die Lambda-Funktion zur Greengrass-Gruppe hinzu.

Schritt 5: Hinzufügen der Lambda-Funktion zur Greengrass-Gruppe

In diesem Schritt fügen Sie die Lambda-Funktion der Gruppe hinzu und konfigurieren dann den Lebenszyklus und die Umgebungsvariablen.

Zunächst fügen Sie die Lambda-Funktion zur Greengrass-Gruppe hinzu.

  1. In derAWS IoTNavigationsbereich der -Konsole unterVerwalten, erweiternGreengrass-Geräteund wählen Sie dann aus.Gruppen (V1).

  2. Wählen Sie auf der Gruppenkonfigurationsseite die OptionLambda-Funktionender Wert ein.

  3. Zeigen Sie unter dem Verzeichnis die folgenden Dateien an.Meine Lambda-FunktionenBereichAdd.

  4. Für denLambda-Funktion, wählengreengrassObjectClassification.

  5. Für denVersioning der Lambda-Funktion, wählenAlias: mltest.

     

    Konfigurieren Sie dann den Lebenszyklus und die Umgebungsvariablen der Lambda-Funktion.

  6. Auf derKonfiguration der Lambda-Funktiondie folgenden Änderungen vor.

    Anmerkung

    Wir empfehlen, dass Sie Ihre Lambda-Funktion ohne Containerisierung ausführen, es sei denn, Ihr Geschäftsfall erfordert dies. Dies ermöglicht den Zugriff auf die GPU und die Kamera Ihres Geräts, ohne die Geräteressourcen zu konfigurieren. Wenn Sie ohne Containerisierung laufen, müssen Sie auch Root-Zugriff auf IhreAWS IoT GreengrassLambda-Funktionen

    1. So laufen Sie ohne Containerisierung aus:

    2. Um stattdessen im Containermodus zu laufen:

      Anmerkung

      Wir empfehlen, nicht im Containermodus auszuführen, es sei denn, Ihr Geschäftsfall erfordert dies.

      • FürSystembenutzer und Gruppe, wählenGruppen-Standardnamen.

      • FürContainerisierung der Lambda-Funktion, wählenGruppen-Standardnamen.

      • Geben Sie in Memory Limit (Speicherlimit) 96 MB ein.

      • Geben Sie in Timeout (Zeitüberschreitung) 10 seconds ein.

      • FürPinned, wählenWahr.

        Weitere Informationen finden Sie unter Lebenszykluskonfiguration für Greengrass-Lambda-Funktionen.

  7. 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 Sie als Wert den WertNaiveEngine.

    Anmerkung

    Bei Ihren eigenen benutzerdefinierten Lambda-Funktionen können Sie die Umgebungsvariable auch in Ihrem Funktionscode festlegen.

  8. Übernehmen Sie die Standardwerte für alle anderen Eigenschaften und wählen SieRessource Lambda-Funktion.

Schritt 6: Hinzufügen von Ressourcen zur Greengrass-Gruppe

Erstellen Sie in diesem Schritt Ressourcen für das Kameramodul und das ML-Inferenzmodell und ordnen Sie die Ressourcen der Lambda-Funktion zu. Dies ermöglicht es der Lambda-Funktion, auf die Ressourcen auf dem Core-Gerät zuzugreifen.

Anmerkung

Wenn Sie im nicht containerisierten Modus laufen,AWS IoT Greengrasskann 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.

  1. Wählen Sie auf der Gruppenkonfigurationsseite die OptionRessourcender Wert ein.

  2. In derLokale RessourcenBereichRessource „Lokale Ressource“.

  3. Auf derEine lokalen Ressourceverwenden Sie die folgenden Werte:

    • Geben Sie für Resource name (Ressourcenname) videoCoreSharedMemory ein.

    • Wählen Sie in Resource type (Ressourcentyp) die Option Device (Gerät) aus.

    • FürLokaler Gerätepfadden 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 /dev verweisen.

    • FürEigentümer der Systemgruppe und Dateizugriffsberechtigungen, wählenAutomatisch Dateisystemberechtigungen der Systemgruppe hinzufügen, zu der die Ressource gehört.

      DieEigentümer der Systemgruppe und Dateizugriffsberechtigungenkönnen Sie zusätzliche Dateizugriffsberechtigungen für den Lambda-Prozess erteilen. Weitere Informationen finden Sie unter Dateizugriffsberechtigung des Gruppenbesitzers.

  4. Als nächstes fügen Sie eine lokale Geräteressource für die Kameraschnittstelle hinzu.

  5. Klicken Sie aufRessource „Lokale Ressource“.

  6. Auf derEine lokalen Ressourceverwenden Sie die folgenden Werte:

    • Geben Sie für Resource name (Ressourcenname) videoCoreInterface ein.

    • Wählen Sie in Resource type (Ressourcentyp) die Option Device (Gerät) aus.

    • FürLokaler Gerätepfadden Wert ein./dev/vchiq.

    • FürEigentümer der Systemgruppe und Dateizugriffsberechtigungen, wählenAutomatisch Dateisystemberechtigungen der Systemgruppe hinzufügen, zu der die Ressource gehört.

  7. Wählen Sie unten auf der SeiteRessource hinzufügen.

 

Fügen Sie nun das Inferenz-Modell als Machine Learning-Ressource hinzu. Dieser Schritt umfasst das Hochladensqueezenet.zipModellpaket nach Amazon S3.

  1. Auf derRessourcenfür Ihre Gruppe, unter demMaschinelles Lernen-BereichRessource für Machine Learning.

  2. Auf derEine Ressource für maschinelles Lernen hinzufügen-SeiteRessourcennameden Wert ein.squeezenet_model.

  3. FürModellschulung, wählenVerwenden Sie ein in S3 gespeichertes Modell, z. B. ein mit Deep Learning Compiler optimiertes Modell.

  4. FürS3einen Pfad ein, in dem der S3-Bucket gespeichert wird.

  5. Wählen Sie Browse S3 (S3 durchsuchen). Auf diese Weise wird eine neue Registerkarte in der Amazon-S3-Konsole geöffnet.

  6. Laden Sie auf der Registerkarte der Amazon-S3-Konsole die Optionsqueezenet.zipDatei in einen S3-Bucket. Weitere Informationen finden Sie unterWie lade ich Dateien und Ordner in einen S3-Bucket hoch?imAmazon Simple Storage Service — Benutzerhandbuch.

    Anmerkung

    Um den Zugriff auf den S3-Bucket zu ermöglichen, muss der Bucket-Name die Zeichenfolge enthaltengreengrassund der -Bucket muss sich in der gleichen -Region befinden, für die SieAWS IoT Greengrass. Wählen Sie einen eindeutigen Namen (wie z. B.: greengrass-bucket-user-id-epoch-time). Verwenden Sie keinen Punkt (.) im Bucket-Namen.

  7. Auf derAWS IoT Greengrassauf der -Konsole Ihren S3-Bucket und wählen Sie ihn aus. Suchen Sie Ihre hochgeladene Datei squeezenet.zip und 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.

  8. Geben Sie für Destination path (Zielpfad) /greengrass-machine-learning/mxnet/squeezenet ein.

    Dies ist das Ziel für das lokale Modell im Namespace der Lambda-Laufzeit. Wenn Sie die Gruppe bereitstellen, ruft AWS IoT Greengrass das Quellmodellpaket ab und extrahiert dann den Inhalt in das angegebene Verzeichnis. Die Beispiel-Lambda-Funktion für dieses Tutorial ist bereits so konfiguriert, dass sie diesen Pfad verwendet (immodel_path-Variable)

  9. UNEigentümer der Systemgruppe und Dateizugriffsberechtigungen, wählenKeine Systemgruppe.

  10. Wählen Sie Add resource (Ressource hinzufügen) aus.

benutzen SageMaker -geschulte Modelle

Dieses Tutorial verwendet ein Modell, das in Amazon S3 gespeichert ist, das Sie jedoch einfach verwenden können SageMaker -Modell auch. DieAWS IoT GreengrassKonsole ist eingebaut SageMaker -Integration, sodass Sie diese Modelle nicht manuell auf Amazon S3 hochladen müssen. Anforderungen und Einschränkungen für die Nutzung SageMaker Modelle finden Sie unterUnterstützte Modellquellen.

Um ein SageMaker -Modell:

  • FürModellschulung, wählenVerwenden Sie ein in geschultes ModellAWS SageMakerund wählen Sie dann den Namen des Schulungsauftrags des Modells aus.

  • FürZielpfadden 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. Mit diesem Abonnement kann die Lambda-Funktion Prognoseergebnisse senden anAWS IoTindem Sie in einem MQTT-Thema veröffentlichen.

  1. Wählen Sie auf der Gruppenkonfigurationsseite die OptionAbonnementsund wählen Sie dann aus.Abo hinzufügen.

  2. Auf derEinzelheiten zum Abonnementdie Quelle und das Ziel wie folgt:

    1. In :Ressourcentyp, wählenLambda-Funktionund wählen Sie dann aus.greengrassObjectClassification.

    2. In :Zieltyp, wählenServiceund wählen Sie dann aus.IoT Cloud.

  3. In :Themenfilterden Wert ein.hello/worldund wählen Sie dann aus.Abonnement.

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, Ressourcen und Abonnementkonfigurationen, die Sie hinzugefügt haben.

  1. Stellen Sie sicher, dassAWS IoT Greengrasscore läuft. Führen Sie im Raspberry Pi-Terminal die folgenden Befehle aus, falls nötig.

    1. 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/daemon enthält, dann wird der Daemon ausgeführt.

      Anmerkung

      Die Version in dem Pfad hängt von der AWS IoT Greengrass-Core-Softwareversion ab, die auf Ihrem Core-Gerät installiert ist.

    2. So starten Sie den Daemon:

      cd /greengrass/ggc/core/ sudo ./greengrassd start
  2. Wählen Sie auf der Gruppenkonfigurationsseite die OptionBereitstellen.

    Die Seite der Gruppe mit hervorgehobenen Optionen „Bereitstellungen“ und „Bereitstellen“.
  3. In derLambda-Funktionenunter der RegisterkarteSystem-Lambda-FunktionenAbschnitt, wählen SieIP-Detektorund wähleBearbeiten.

  4. In derEinstellungen für IP-Detektor bearbeitenwählen Sie aus.Automatisches Erkennen und Überschreiben von MQTT-Broker-.

  5. Wählen Sie Save (Speichern) aus.

    Damit können Geräte automatisch Core-Verbindungsinformationen abrufen, z. B. die IP-Adresse, DNS und die Portnummer. Die automatische Ermittlung wird empfohlen, aber AWS IoT Greengrass unterstützt auch manuell angegebene Endpunkte. Sie werden nur bei der ersten Bereitstellung der Gruppe zur Angabe der Ermittlungsmethode aufgefordert.

    Anmerkung

    Erteilen Sie bei Aufforderung die Berechtigung zum Erstellen desGreengrass-Servicerolleund assoziiere es mit deinemAWS-Kontoim aktuellenAWS-Region. Diese Rolle erlaubtAWS IoT Greengrassum auf Ihre Ressourcen inAWS-Services.

    Auf der Seite Deployments werden der Zeitstempel, die Versions-ID und der Status der Bereitstellung angegeben. Nach abgeschlossener Bereitstellung sollte der Status wie folgt lautenCompleted (Abgeschlossen).

    Weitere Informationen über Bereitstellungen finden Sie unterBereitstellen von AWS IoT Greengrass-Gruppen für einen AWS IoT Greengrass Core. Hilfe zur Problembehebung finden Sie unter Fehlerbehebung für AWS IoT Greengrass.

Schritt 9: Testen der Inferenzanwendung

Nun können Sie prüfen, ob die Bereitstellung korrekt konfiguriert ist. Um zu testen, abonnieren Sie dashello/worldund zeigen Sie 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.

  1. In derAWS IoT-Konsole, unterTest, wählenMTT-Test-Client.

  2. Verwenden Sie für Subscriptions (Abonnements) die folgenden Werte:

    • Verwenden Sie als Abonnementthema „hello/world“.

    • UNZusätzliche Konfiguration, fürMQTT-Nutzlast-Anzeige, wählenZeigt Nutzlasten als Zeichenfolgen an.

  3. Wählen Sie Subscribe aus.

    Wenn der Test erfolgreich ist, werden die Nachrichten von 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.

    Die Seite „Subscriptions“ zeigt Testergebnisse mit Nachrichtendaten an.

Fehlerbehebung bei 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

  1. Wechseln Sie zum Root-Benutzer und navigieren Sie zum Verzeichnis log. Der Zugriff auf AWS IoT Greengrass-Protokolle erfordert Root-Berechtigungen.

    sudo su cd /greengrass/ggc/var/log
  2. Überprüfen Sie im system-Verzeichnis runtime.log oder python_runtime.log.

    Überprüfen Sie im user/region/account-id-Verzeichnis greengrassObjectClassification.log.

    Weitere Informationen finden Sie unter Fehlerbehebung mit Protokollen.

AuspackenFehlerruntime.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, umneu verpackenedas Modell:

tar -zcvf model.tar.gz ./model

Zum 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 wird

  1. Listen Sie den Inhalt des bereitgestellten Lambdain/lambda-Verzeichnis Ersetzen Sie die Platzhalterwerte, bevor Sie den Befehl ausführen.

    cd /greengrass/ggc/deployment/lambda/arn:aws:lambda:region:account:function:function-name:function-version ls -la
  2. Überprüfen Sie, ob das Verzeichnis denselben Inhalt wie das greengrassObjectClassification.zip-Bereitstellungspaket enthält, das Sie in Schritt 4: Erstellen und Veröffentlichen einer 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

  1. Finden Sie die Prozessidentifikationsnummer (PID) des Lambda-Laufzeitprozesses:

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

    In der Ausgabe wird die PID in der zweiten Spalte der Zeile für den Lambda-Laufzeitprozess angezeigt.

  2. Geben Sie den Lambda-Laufzeit-Namespace ein Stellen Sie sicher, den pid-Wert des Platzhalters zu ersetzen, bevor Sie den Befehl ausführen.

    Anmerkung

    Dieses Verzeichnis und sein Inhalt befinden sich im Namespace der Lambda-Laufzeitumgebung, daher sind sie nicht in einem regulären Linux-Namespace sichtbar.

    sudo nsenter -t pid -m /bin/bash
  3. Listen Sie den Inhalt des lokalen Verzeichnisses, das Sie für die ML-Ressource angegeben haben, auf.

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

    Die 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 Greengrassbietet 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 Quellabbilder 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.

  • NumPy

  • OpenCV on Wheels

  1. Laden Sie statische PNG- oder JPG-Bilder für die Lambda-Funktion für die Bildklassifizierung herunter. 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 Bereitstellungspaket der Lambda-Funktion enthalten, das Sie in hochgeladen habenSchritt 4: Erstellen und Veröffentlichen einer Lambda-Funktion.

    Anmerkung

    Wenn Sie AWS DeepLens verwenden, können Sie die integrierte Kamera verwenden oder Ihre eigene Kamera mounten, um Inferenzen auf aufgenommenen Abbildern anstelle von statischen Abbildern 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 unterAktualisieren derAWS DeepLensGerätimAWS DeepLensEntwicklerhandbuch.

  2. Bearbeiten Sie die Konfiguration der Lambda-Funktion. Folgen Sie dem Verfahren unter Schritt 5: Hinzufügen der Lambda-Funktion zur Greengrass-Gruppe.

    Anmerkung

    Wir empfehlen, dass Sie Ihre Lambda-Funktion ohne Containerisierung ausführen, es sei denn, Ihr Geschäftsfall erfordert dies. Dies ermöglicht den Zugriff auf die GPU und die Kamera Ihres Geräts, ohne die Geräteressourcen zu konfigurieren. Wenn Sie ohne Containerisierung laufen, müssen Sie auch Root-Zugriff auf IhreAWS IoT GreengrassLambda-Funktionen

    1. So laufen Sie ohne Containerisierung aus:

      • FürSystembenutzer und Gruppe, wählenAnother user ID/group ID. FürSystembenutzer-IDden Wert ein.0. FürSystemgruppen-IDden Wert ein.0.

        Auf diese Weise kann Ihre Lambda-Funktion als root ausgeführt werden. Weitere Informationen zum Ausführen als root finden Sie unterFestlegen der Standardzugriffsidentität für Lambda-Funktionen in einer Gruppe.

        Tipp

        Sie müssen auch Ihreconfig.json-Datei, um Root-Zugriff auf Ihre Lambda-Funktion zu gewähren. Die -Prozedur finden Sie unterAusführen einer Lambda-Funktion als Root.

      • FürContainerisierung der Lambda-Funktion, wählenKein Container.

        Weitere Informationen zur Ausführung ohne Containerisierung finden Sie unterÜberlegungen bei der Auswahl 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.

      • UNPinned, wählenWahr.

      • UNZusätzliche Parameter, fürLesezugriff auf das /sys-Verzeichnis, wählenEnabled.

      • Wählen Sie für Lambda-Lebenszyklus die Option Diese Funktion langlebig einstellen und unbegrenzt ausführen aus.

    2. Um stattdessen im Containermodus zu laufen:

      Anmerkung

      Wir empfehlen, nicht im Containermodus auszuführen, 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.

      • FürPinned, wählenWahr.

      • UNZusätzliche Parameter, fürLesezugriff auf das /sys-Verzeichnis, wählenEnabled.

  3. Wenn es im Containermodus ausgeführt wirddie erforderliche lokale Geräteressource hinzu, um Zugriff auf die GPU Ihres Geräts zu gewähren.

    Anmerkung

    Wenn Sie im nicht containerisierten Modus laufen,AWS IoT Greengrasskann auf die GPU Ihres Geräts zugreifen, ohne Geräteressourcen zu konfigurieren

    1. Wählen Sie auf der Gruppenkonfigurationsseite die OptionRessourcender Wert ein.

    2. Klicken Sie aufRessource „Lokale Ressource“.

    3. Definieren Sie die Ressource:

      • Geben Sie für Resource name (Ressourcenname) renderD128 ein.

      • FürResource type (Ressourcentyp), wählenLokales Gerät.

      • Geben Sie im Feld Device path (Gerätepfad) /dev/dri/renderD128 ein.

      • FürEigentümer der Systemgruppe und Dateizugriffsberechtigungen, wählenAutomatisch Dateisystemberechtigungen der Systemgruppe hinzufügen, zu der die Ressource gehört.

      • FürZugehörigkeit zu Lambda-Funktion,Lese- und Schreibzugriffzu Ihrer Lambda-Funktion

Konfigurieren eines NVIDIA Jetson TX2

Um dieses Tutorial auf einem NVIDIA Jetson TX2 auszuführen, stellen Sie Quellabbilder bereit und konfigurieren Sie die Lambda-Funktion. Bei Verwendung der GPU müssen Sie zusätzlich lokale Geräteressourcen hinzufügen.

  1. Stellen Sie sicher, dass Ihr Jetson-Gerät konfiguriert ist, damit Sie die AWS IoT Greengrass Core-Software installieren können. Weitere Informationen zur Konfiguration des Geräts finden Sie unter Einrichten anderer Geräte.

  2. Ö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_62 der CUDA_ARCH-Einstellung hinzu.

    • Schalten Sie CUDA ein.

      USE_CUDA = 1
  3. Laden Sie statische PNG- oder JPG-Bilder für die Lambda-Funktion für die Bildklassifizierung herunter. 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 ist im Bereitstellungspaket der Lambda-Funktion enthalten, das Sie in hochgeladen habenSchritt 4: Erstellen und Veröffentlichen einer Lambda-Funktion.

  4. Erstellen Sie einen Symlink von Python 3.7 zu Python 3.6, um Python 3 mit AWS IoT Greengrass zu verwenden. Führen Sie den folgenden Befehl aus, um Ihre Python-Installation zu suchen:

    which python3

    Führen Sie den folgenden Befehl aus, um den Symlink zu erstellen.

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

    Starten Sie das Gerät neu.

  5. Stellen Sie sicher, dass das ggc_user-Systemkonto das MXNet-Framework verwenden kann:

    “sudo -u ggc_user bash -c 'python3 -c "import mxnet"'
  6. Bearbeiten Sie die Konfiguration der Lambda-Funktion. Folgen Sie dem Verfahren unter Schritt 5: Hinzufügen der Lambda-Funktion zur Greengrass-Gruppe.

    Anmerkung

    Wir empfehlen, dass Sie Ihre Lambda-Funktion ohne Containerisierung ausführen, es sei denn, Ihr Geschäftsfall erfordert dies. Dies ermöglicht den Zugriff auf die GPU und die Kamera Ihres Geräts, ohne die Geräteressourcen zu konfigurieren. Wenn Sie ohne Containerisierung laufen, müssen Sie auch Root-Zugriff auf IhreAWS IoT GreengrassLambda-Funktionen

    1. So laufen Sie ohne Containerisierung aus:

      • FürSystembenutzer und Gruppe, wählenAnother user ID/group ID. FürSystembenutzer-IDden Wert ein.0. FürSystemgruppen-IDden Wert ein.0.

        Auf diese Weise kann Ihre Lambda-Funktion als root ausgeführt werden. Weitere Informationen zum Ausführen als root finden Sie unterFestlegen der Standardzugriffsidentität für Lambda-Funktionen in einer Gruppe.

        Tipp

        Sie müssen auch Ihreconfig.json-Datei, um Root-Zugriff auf Ihre Lambda-Funktion zu gewähren. Die -Prozedur finden Sie unterAusführen einer Lambda-Funktion als Root.

      • FürContainerisierung der Lambda-Funktion, wählenKein Container.

        Weitere Informationen zur Ausführung ohne Containerisierung finden Sie unterÜberlegungen bei der Auswahl der Containerisierung von Lambda-Funktionen.

      • UNZusätzliche Parameter, fürLesezugriff auf das /sys-Verzeichnis, wählenEnabled.

      • UNUmgebungsvariablen, fügen Sie die folgenden Schlüssel-Wert-Paare zu Ihrer Lambda-Funktion hinzu. Hiermit wird AWS IoT Greengrass für die Verwendung des MXNet-Frameworks konfiguriert.

        Schlüssel

        Wert

        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. Um stattdessen im Containermodus zu laufen:

      Anmerkung

      Wir empfehlen, nicht im Containermodus auszuführen, 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.

      • UNZusätzliche Parameter, fürLesezugriff auf das /sys-Verzeichnis, wählenEnabled.

      • UNUmgebungsvariablen, fügen Sie die folgenden Schlüssel-Wert-Paare zu Ihrer Lambda-Funktion hinzu. Hiermit wird AWS IoT Greengrass für die Verwendung des MXNet-Frameworks konfiguriert.

        Schlüssel

        Wert

        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. Wenn es im Containermodus ausgeführt wirddie 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 laufen,AWS IoT Greengrasskann auf die GPU Ihres Geräts zugreifen, ohne Geräteressourcen zu konfigurieren

    Für jede Ressource:

    • Wählen Sie in Resource type (Ressourcentyp) die Option Device (Gerät) aus.

    • FürEigentümer der Systemgruppe und Dateizugriffsberechtigungen, wählenAutomatisch Dateisystemberechtigungen der Systemgruppe hinzufügen, zu der die Ressource gehört.

       

      Name

      Gerätepfad

      nvhost-strg

      /dev/nvhost-strg

      nvhost-gpu

      /dev/nvhost-gpu

      nvhost-ctrl-gpu

      /nvhost-ctrl-gpu

      nvhost-dbg-gpu

      /nvhost-dbg-gpu

      nvhost-prof-gpu

      /nvhost-prof-gpu

      nvmap

      /dev/nvmap

      nvhost-vic

      /dev/nvhost-vic

      tegra_dc_ctrl

      /dev/tegra_dc_ctrl

  8. Wenn es im Containermodus ausgeführt wirddie 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 nicht containerisierten Modus laufen,AWS IoT Greengrasskann auf die Kamera Ihres Geräts zugreifen, ohne Volume-Ressourcen zu konfigurieren.

    • Wählen Sie für Resource type (Ressourcentyp) die Option Volume aus.

    • FürEigentümer der Systemgruppe und Dateizugriffsberechtigungen, wählenAutomatisch Dateisystemberechtigungen der Systemgruppe hinzufügen, zu der die Ressource gehört.

       

      Name

      Quellpfad

      Zielpfad

      shm

      /dev/shm

      /dev/shm

      tmp

      /tmp

      /tmp