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

Um die Schritte in diesem Tutorial ausführen zu können, müssen SieAWS IoT GreengrassCore v1.10 oder höher.

Sie können das SageMaker Neo-Deep-Learning-Compiler zur Optimierung der Prognoseeffizienz nativer Inferenzmodelle für Machine Learning in Tensorflow, Apache MXNet, PyTorch, ONNX und XGBoost-Frameworks für eine kleinere Stellfläche und schnellere Leistung. Sie können dann das optimierte Modell herunterladen und die SageMaker Neo Deep Learning Runtime und stellen Sie sie in IhremAWS IoT GreengrassGeräte für schnellere Rückschlüsse.

In diesem Tutorial wird beschrieben, wie SieAWS Management Consoleum eine Greengrass-Gruppe für die Ausführung eines Lambda-Inferenzbeispiels auszuführen, das Kamerabilder lokal erkennt, ohne dass Daten in die Cloud gesendet werden. Das Inferenzbeispiel greift auf das Kameramodul auf einem Raspberry Pi zu. In diesem Tutorial laden Sie ein vorkonfiguriertes Modell herunter, das von Resnet-50 trainiert und im Neo-Deep-Learning-Compiler optimiert wird. Anschließend führen Sie mit dem Modell eine lokale Bildklassifikation auf Ihrem AWS IoT Greengrass-Gerät durch.

Das Tutorial enthält die folgenden allgemeinen Schritte:

Voraussetzungen

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

  • Raspberry Pi 4 Modell B oder Raspberry Pi 3 Modell B/B +, eingerichtet und konfiguriert für die Verwendung mitAWS 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 ein 2,5A-Netzteilum 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. Weitere Informationen zum Einrichten der Kamera finden Sie unter Verbinden der Kamera in der Raspberry Pi-Dokumentation.

  • Eine Greengrass-Gruppe und ein Greengrass Core. Weitere Informationen zum Erstellen einer Greengrass-Gruppe oder eines Greengrass-Cores finden Sie unter Erste Schritte mit AWS IoT Greengrass.

Anmerkung

Dieses Tutorial verwendet ein Raspberry Pi, aber AWS IoT Greengrass unterstützt andere Plattformen, wie z. B. Intel Atom und NVIDIA Jetson TX2. Wenn Sie das Intel Atom-Beispiel verwenden, müssen Sie möglicherweise Python 3.6 anstelle von Python 3.7 installieren. Weitere Informationen zum Konfigurieren des Geräts, damit Sie die AWS IoT Greengrass Core-Software installieren können, finden Sie unter Einrichten 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 Sie das Amazon-Programm SageMaker Neo Deep Learning Runtime

Installieren Sie in diesem Schritt die Neo Deep Learning Runtime (DLR) auf Ihrem Raspberry Pi.

Anmerkung

Wir empfehlen, Version 1.1.0 für dieses Tutorial zu installieren.

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

    ssh pi@your-device-ip-address
  2. Öffnen Sie die DLR-Dokumentation, öffnen Sie Installing DLR und suchen Sie die Wheel-URL für Raspberry Pi-Geräte. Folgen Sie dann den Anweisungen, um die DLR auf Ihrem Gerät zu installieren. Sie können beispielsweise pip verwenden:

    pip3 install rasp3b-wheel-url
  3. Überprüfen Sie nach der Installation der DLR die folgende Konfiguration:

    • Stellen Sie sicher, dass das ggc_user-Systemkonto die DLR-Bibliothek verwenden kann.

      sudo -u ggc_user bash -c 'python3 -c "import dlr"'
    • Stellen Sie Folgendes sicher NumPy ist installiert.

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

Schritt 3: Erstellen Sie eine Inferenz-Lambda-Funktion

Erstellen Sie in diesem Schritt ein Bereitstellungspaket für Lambda-Funktionen und eine Lambda-Funktion. Veröffentlichen Sie anschließend eine Funktionsversion und erstellen einen Alias.

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

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

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

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

    • inference.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 GreengrassKern-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 GreengrassKern-SDK für Pythonauf GitHub.

  3. Komprimieren Sie den Inhalt des examples-Verzeichnisses in eine Datei namens optimizedImageClassification.zip. Dies ist das Bereitstellungspaket.

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

    Das Bereitstellungspaket enthält den Funktionscode und die Abhängigkeiten. Dazu gehört auch der Code, der die -Python-APIs der Neo-Deep-Learning-Laufzeit aufruft, um die Inferenz mit den Deep-Learning-Compiler

    Anmerkung

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

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

    Wählen Sie auf der Seite Lambda-KonsoleFunktionenund wähleFunktion erstellen.

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

    • Geben Sie für Function name (Funktionsname) optimizedImageClassification 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 verwendet vonAWS IoT Greengrass.

    Der Abschnitt Basisinformationen auf der der Seite Funktion erstellen.
  6. Wählen Sie Create function (Funktion erstellen).

 

Laden Sie nun das Bereitstellungspaket für Lambda-Funktionen hoch und registrieren Sie den Handler

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

    Die Dropdownliste Upload from mit hervorgehobener ZIP-Datei.
  2. Wählen Sie IhreoptimizedImageClassification.zipBereitstellungspaket, und wählen Sie dannSave.

  3. Auf derCodefür die Funktion, unterRuntime-Einstellungen, wählenBearbeiten, 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 inference.handler ein.

    Wählen Sie Save (Speichern) aus.

    Bereich Runtime-Einstellungen mit hervorgehobener Option Upload.

 

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 die Gruppendefinition nicht geändert werden muss, wenn der Funktionscode aktualisiert wird. Stattdessen verweisen Sie einfach den Alias auf die neue Funktionsversion.

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

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

  3. Auf deroptimizedImageClassification: 1-Konfigurationsseite, von derAktionen-Menü, AuswahlErstellen eines Alias.

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

    • Geben Sie unter Name mlTestOpt ein.

    • Geben Sie in Version (Version) 1 ein.

    Anmerkung

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

  5. Wählen Sie Create (Erstellen) aus.

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

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

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

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

  1. In derAWS IoTNavigationsbereich der -Konsole unterVerwalten, vektorGreengrass-Geräteund wählen Sie und anschließend ausGruppen (V1).

  2. Wählen Sie auf der Gruppenkonfigurationsseite die OptionLambda-Funktionenund wählen SieAdd.

  3. Wählen Sie das SymbolLambda-Funktionund selectoptimizedImageClassification.

  4. Auf derVersioning der Lambda-Funktion, wählen Sie den Alias für die Version, die Sie veröffentlicht haben.

 

Als Nächstes konfigurieren Sie den Lebenszyklus der Lambda-Funktion.

  1. In derKonfiguration der Lambda-Funktiondie folgenden Änderungen vor.

    Anmerkung

    Wir empfehlen, dass Sie Ihre Lambda-Funktion ohne Containerisierung ausführen, sofern es Ihr Business Case nicht erfordert. 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ählenVerwenden Sie Gruppenstandard.

      • FürContainerisierung der Lambda-Funktion, wählenVerwenden Sie Gruppenstandard.

      • Geben Sie in Memory Limit (Speicherlimit) 1024 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.

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

  2. Klicken Sie aufHinzufügen einer Lambda-Funktion.

Schritt 5: Hinzufügen einer SageMaker Neo-optimierte Modellressource für die Greengrass-Gruppe

Erstellen Sie in diesem Schritt eine Ressource für das optimierte ML-Inferenzmodell und laden Sie sie in einen Amazon S3 Bucket hoch. Suchen Sie dann das von Amazon S3 hochgeladene Modell in derAWS IoT Greengrass-Konsole und ordnen die neu erstellte Ressource mit der Lambda-Funktion zu. Dies ermöglicht es der Funktion, auf ihre Ressourcen auf dem Core-Gerät zuzugreifen.

  1. Navigieren Sie auf Ihrem Computer zum resnet50-Verzeichnis im Beispielpaket, das Sie in Schritt 3: Erstellen Sie eine Inferenz-Lambda-Funktion entpackt haben.

    Anmerkung

    Wenn Sie das NVIDIA Jetson-Beispiel verwenden, müssen Sie stattdessen das resnet18-Verzeichnis im Beispielpaket verwenden. Weitere Informationen finden Sie unter Konfigurieren eines NVIDIA Jetson TX2.

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

    Dieses Verzeichnis enthält vorkompilierte Modellartefakte für ein mit Resnet-50 trainiertes Bildklassifikationsmodell.

  2. Komprimieren Sie die Dateien innerhalb des resnet50-Verzeichnisses in eine Datei namens resnet50.zip.

    zip -r resnet50.zip .
  3. Auf der Gruppenkonfigurationsseite fürAWS IoT GreengrassGruppe aus und wählen Sie dieRessourcen-Registerkarte. Navigieren Sie zum Abschnitt Machine Learning und wählen Sie Add machine learning resource (Maschinelle Lernressource hinzufügen) aus. Geben Sie auf der Seite Eine maschinelle Lernressource erstellen für Ressourcenname resnet50_model ein.

  4. FürModel-Quelle, wählenVerwenden Sie ein in S3 gespeichertes Modell, z. B. ein mit Deep Learning Compiler optimiertes Modell.

  5. UNDERVEKTOR, wählenDurchsuchen von S3.

    Anmerkung

    Derzeit optimiert SageMaker Modelle werden automatisch in Amazon S3 gespeichert. Sie können Ihr optimiertes Modell mit dieser Option in Ihrem Amazon S3 Bucket finden. Weitere Informationen zur Modelloptimierung in SageMaker, finden Sie unterSageMaker Neo Dokumentation.

  6. Wählen Sie Upload a model (Ein Modell hochladen).

  7. Laden Sie auf der Registerkarte der Amazon S3 -Konsole Ihre ZIP-Datei in einen Amazon S3 Bucket hoch. Weitere Informationen finden Sie unterWie lade ich Dateien und Ordner in einen S3-Bucket hoch?imAmazon Simple Storage Service — Benutzerhandbuch.

    Anmerkung

    Ihr Bucket-Name muss die Zeichenfolge greengrass enthalten. Wählen Sie einen eindeutigen Namen (wie z. B.: greengrass-dlr-bucket-user-id-epoch-time). Verwenden Sie keinen Punkt (.) im Bucket-Namen.

  8. In derAWS IoT Greengrassauf der Registerkarte der -Konsole Ihren Amazon S3 S3-Bucket und wählen Sie ihn aus. Suchen Sie Ihre hochgeladene Datei resnet50.zip und wählen Sie Select (Auswählen). Möglicherweise müssen Sie die Seite aktualisieren, um die Liste der verfügbaren Buckets und Dateien zu aktualisieren.

  9. In :Zielpfadden Wert ein./ml_model.

    Der aktualisierte Zielpfad.

    Dies ist das Ziel für das lokale Modell im Lambda-Laufzeit-Namespace. Wenn Sie die Gruppe bereitstellen, ruft AWS IoT Greengrass das Quellmodellpaket ab und extrahiert dann den Inhalt in das angegebene Verzeichnis.

    Anmerkung

    Wir empfehlen Ihnen dringend, den genauen Pfad für Ihren lokalen Pfad zu verwenden. Die Verwendung eines anderen lokalen Modellzielverzeichnisses in diesem Schritt führt dazu, dass einige in diesem Tutorial enthaltene Befehle zur Fehlerbehebung ungenau sind. Wenn Sie einen anderen Pfad verwenden, müssen Sie eine MODEL_PATH-Umgebungsvariable einrichten, die genau den von Ihnen hier angegebenen Pfad verwendet. Weitere Informationen zu Umgebungsvariablen finden Sie unter AWS Lambda-Umgebungsvariablen.

  10. Wenn es im Containermodus ausgeführt wird:

    1. UNDEREigentümer der Systemgruppe und Dateizugriffsberechtigungen, wählenGeben Sie die Systemgruppe und Berechtigungen an.

    2. Klicken Sie aufSchreibgeschützter Zugriffund wählen Sie dannRessource hinzufügen.

Schritt 6: Hinzufügen einer Kamerageräte-Ressource zur Greengrass-Gruppe

Erstellen Sie in diesem Schritt eine Ressource für das Kameramodul und ordnen Sie es der Lambda-Funktion zu. Dies ermöglicht es der Lambda-Funktion, auf die Ressource 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äteressource zu konfigurieren.

  1. Wählen Sie auf der Gruppenkonfigurationsseite die OptionRessourcen-Registerkarte.

  2. Auf derLokale Ressourcen-Registerkarte aus.Hinzufügen einer lokalen Ressource.

  3. Auf derHinzufügen einer lokalen Ressourcedie 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 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.

      Mit der Option Group owner file access permission (Dateizugriffsberechtigung des Gruppenbesitzers) können Sie zusätzliche Dateizugriffsberechtigungen für den Lambda-Prozess erteilen. Weitere Informationen finden Sie unter Dateizugriffsberechtigung des Gruppenbesitzers.

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

  5. FromRessourceneine weitere lokale Ressource erstellen, indem SieAddund verwenden 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.

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

Schritt 7: Hinzufügen von Abonnements zur Greengrass-Gruppe

In diesem Schritt fügen Sie der Gruppe Abonnements hinzu. Mit diesen Abonnements kann die Lambda-Funktion Prognoseergebnisse anAWS IoTindem Sie in einem MQTT-Thema.

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

  2. Auf derErstellen eines Abonnementsdie Quelle und das Ziel wie folgt:

    1. In :Ressourcentyp, wählenLambda-Funktionund wählen Sie und anschließend ausoptimizedImageClassification.

    2. In :Zieltyp, wählenServiceund wählen Sie und anschließend ausIoT Cloud.

    3. In derThemenfilterden Wert ein./resnet-50/predictionsund wählen Sie und anschließend ausErstellen eines Abonnements.

  3. Hinzufügen eines zweiten Abonnements. Wählen Sie das SymbolAbonnements-Registerkarte aus.Abo hinzufügen, und konfigurieren Sie die Quelle und das Ziel wie folgt:

    1. In :Ressourcentyp, wählenServicesund wählen Sie und anschließend ausIoT Cloud.

    2. In :Zieltyp, wählenLambda-Funktionund wählen Sie und anschließend ausoptimizedImageClassification.

    3. In derThemenfilterden Wert ein./resnet-50/testund wählen Sie und anschließend ausErstellen eines Abonnements.

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, dass dieAWS 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/latest-core-version/bin/daemon enthält, dann wird der Daemon ausgeführt.

    2. So starten Sie den Daemon:

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

  3. Auf derLambda-Funktionen, wählen SieIPdetektorund wähleBearbeiten.

  4. FromEinstellungen für IP-Detektor bearbeitenund wählen Sie aus.Automatisches Erkennen und Überschreiben von MQTT-Broker-und wähleSave.

    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 zuzugreifenAWS-Services.

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

    Weitere Informationen zu 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.

Testen des Inferenzbeispiels

Nun können Sie prüfen, ob die Bereitstellung korrekt konfiguriert ist. Um zu testen, abonnieren Sie das Thema /resnet-50/predictions und veröffentlichen Sie jede Nachricht zum /resnet-50/test-Thema. Dies löst die Lambda-Funktion aus, um ein Foto mit Ihrem Raspberry Pi aufzunehmen und die Inferenz auf das aufgenommene Bild auszuführen.

Anmerkung

Wenn Sie das NVIDIA Jetson-Beispiel verwenden, stellen Sie sicher, dass Sie stattdessen die Themen resnet-18/predictions und resnet-18/test verwenden.

Anmerkung

Wenn ein Bildschirm mit dem Raspberry Pi verbunden ist, wird das Livebild der Kamera in einem Vorschaufenster angezeigt.

  1. Auf derAWS IoTKonsolen-Startseite, unterTest, wählenMQTT-Test-Client.

  2. FürAbonnements, wählenAbonnieren eines Themas. Verwenden Sie die folgenden Werte. Übernehmen Sie für die verbleibenden Optionen die Standardwerte.

    • Geben Sie für Abonnementthema /resnet-50/predictions ein.

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

  3. Wählen Sie Subscribe aus.

  4. Klicken Sie aufVeröffentlichung für ein Themaden Wert ein./resnet-50/testwie derTopic-Nameund wähleVeröffentlichen.

  5. Wenn der Test erfolgreich ist, veranlasst die veröffentlichte Nachricht die Raspberry Pi-Kamera, ein Bild aufzunehmen. Eine Meldung der Lambda-Funktion erscheint unten auf der Seite. Diese Meldung enthält das Vorhersageergebnis des Bildes im Format: vorhergesagter Klassenname, Wahrscheinlichkeit und maximaler Speicherverbrauch.

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:

  1. Laden Sie statische PNG- oder JPG-Bilder für die Lambda-Funktion herunter, um die Bildklassifizierung durchzuführen. Das Beispiel funktioniert am besten mit kleinen Bilddateien.

    Speichern Sie Ihre Bilddateien in dem Verzeichnis mit der inference.py-Datei (oder in einem Unterverzeichnis dieses Verzeichnisses). Dies ist im Bereitstellungspaket für Lambda-Funktionen enthalten, das Sie in hochgeladen habenSchritt 3: Erstellen Sie eine Inferenz-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 IhrerAWS DeepLensGerätimAWS DeepLensEntwicklerhandbuch.

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

    Anmerkung

    Wir empfehlen, dass Sie Ihre Lambda-Funktion ohne Containerisierung ausführen, sofern es Ihr Business Case nicht erfordert. 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.

        Dadurch kann Ihre Lambda-Funktion als root ausgeführt werden. Weitere Informationen zur Ausführung 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 zum Ausführen ohne Containerisierung finden Sie unterÜberlegungen bei der Auswahl der Containerisierung von Lambda-Funktionen.

      • Erhöhen Sie den Wert für Timeout auf 2 Minuten. 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.

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

    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 auf 3000 MB.

      • Erhöhen Sie den Wert für Timeout auf 2 Minuten. 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.

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

  3. Fügen Sie Ihrer Neo-optimierten Modellressource der Gruppe hinzu. Laden Sie die Modellressourcen in das resnet50-Verzeichnis des Beispielpakets hoch, das Sie in Schritt 3: Erstellen Sie eine Inferenz-Lambda-Funktion entpackt haben. Dieses Verzeichnis enthält vorkompilierte Modellartefakte für ein mit Resnet-50 trainiertes Bildklassifikationsmodell. Folgen Sie dem Verfahren unter Schritt 5: Hinzufügen einer SageMaker Neo-optimierte Modellressource für die Greengrass-Gruppe mit den folgenden Updates:

    • Komprimieren Sie die Dateien innerhalb des resnet50-Verzeichnisses in eine Datei namens resnet50.zip.

    • Geben Sie auf der Seite Eine maschinelle Lernressource erstellen für Ressourcenname resnet50_model ein.

    • Hochladen der resnet50.zip-Datei

  4. 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 OptionRessourcen-Registerkarte.

    2. In derLokale Ressourcenund wählen Sie aus.Hinzufügen einer lokalen Ressource.

    3. Definieren Sie die Ressource:

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

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

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

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

Konfigurieren eines NVIDIA Jetson TX2

Um dieses Tutorial auf einem NVIDIA Jetson TX2 auszuführen, stellen Sie Quellabbilder bereit, konfigurieren Sie die Lambda-Funktion und fügen Sie weitere lokale Geräteressourcen hinzu.

  1. Stellen Sie sicher, dass Ihr Jetson-Gerät konfiguriert ist, damit Sie die AWS IoT Greengrass Core-Software installieren und die GPU für Inferenzzwecke verwenden können. Weitere Informationen zur Konfiguration des Geräts finden Sie unter Einrichten anderer Geräte. Um die GPU für Inferenzzwecke auf einem NVIDIA Jetson TX2 zu verwenden, müssen Sie CUDA 10.0 und cuDNN 7.0 auf Ihrem Gerät installieren, wenn Sie Ihr Board mit Jetpack 4.3 abbilden.

  2. Laden Sie statische PNG- oder JPG-Bilder für die Lambda-Funktion herunter, um die Bildklassifizierung durchzuführen. Das Beispiel funktioniert am besten mit kleinen Bilddateien.

    Speichern Sie Ihre Abbilddateien in dem Verzeichnis, das die inference.py-Datei enthält. Sie können sie auch in einem Unterverzeichnis dieses Verzeichnisses speichern. Dieses Verzeichnis ist im Bereitstellungspaket für Lambda-Funktionen enthalten, das Sie in hochgeladen habenSchritt 3: Erstellen Sie eine Inferenz-Lambda-Funktion.

    Anmerkung

    Sie können auf Wunsch stattdessen eine Kamera auf der Jetson-Karte instrumentieren, um die Quellbilder zu erfassen. Wir empfehlen jedoch nachdrücklich, zunächst mit statischen Bildern zu beginnen.

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

    Anmerkung

    Wir empfehlen, dass Sie Ihre Lambda-Funktion ohne Containerisierung ausführen, sofern es Ihr Business Case nicht erfordert. 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ürRun as (Ausführen als), wählenAnother user ID/group ID. FürUIDden Wert ein.0. FürGUIDden Wert ein.0.

        Dadurch kann Ihre Lambda-Funktion als root ausgeführt werden. Weitere Informationen zur Ausführung 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 zum Ausführen ohne Containerisierung finden Sie unterÜberlegungen bei der Auswahl der Containerisierung von Lambda-Funktionen.

      • Erhöhen Sie den Wert für Timeout auf 5 Minuten. 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.

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

    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. Für die Verwendung des bereitgestellten Modells im GPU-Modus verwenden Sie mindestens 2000 MB.

      • Erhöhen Sie den Wert für Timeout auf 5 Minuten. 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.

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

  4. Fügen Sie Ihrer Neo-optimierten Modellressource der Gruppe hinzu. Laden Sie die Modellressourcen in das resnet18-Verzeichnis des Beispielpakets hoch, das Sie in Schritt 3: Erstellen Sie eine Inferenz-Lambda-Funktion entpackt haben. Dieses Verzeichnis enthält vorkompilierte Modellartefakte für ein mit Resnet-18 geschultes Bildklassifikationsmodell. Folgen Sie dem Verfahren unter Schritt 5: Hinzufügen einer SageMaker Neo-optimierte Modellressource für die Greengrass-Gruppe mit den folgenden Updates:

    • Komprimieren Sie die Dateien innerhalb des resnet18-Verzeichnisses in eine Datei namens resnet18.zip.

    • Geben Sie auf der Seite Eine maschinelle Lernressource erstellen für Ressourcenname resnet18_model ein.

    • Hochladen der resnet18.zip-Datei

  5. Wenn es im Containermodus ausgeführt wirddie erforderlichen lokalen Geräteressourcen 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 OptionRessourcen-Registerkarte.

    2. In derLokale Ressourcenund wählen Sie aus.Hinzufügen einer lokalen Ressource.

    3. Definieren Sie die einzelnen Ressourcen:

      • Verwenden Sie für Resource name (Ressourcenname) und Device path (Gerätepfad) die Werte in der folgenden Tabelle. Erstellen Sie für jede Zeile in der Tabelle genau eine Geräteressource.

      • 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

        /vvvektornvhost-ctrl-gpu

        nvhost-dbg-gpu

        /vvvektornvhost-dbg-gpu

        nvhost-prof-gpu

        /vvvektornvhost-prof-gpu

        nvmap

        /dev/nvmap

        nvhost-vic

        /dev/nvhost-vic

        tegra_dc_ctrl

        /dev/tegra_dc_ctrl

  6. 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 5: Hinzufügen einer SageMaker Neo-optimierte Modellressource für die Greengrass-Gruppe.

    Anmerkung

    Wenn Sie im nicht containerisierten Modus laufen,AWS IoT Greengrasskann auf Ihre Gerätekamera zugreifen, ohne Geräteressourcen 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

  7. Aktualisieren Sie Ihre Gruppenabonnements, um das richtige Verzeichnis zu verwenden. Folgen Sie dem Verfahren unter Schritt 7: Hinzufügen von Abonnements zur Greengrass-Gruppe mit den folgenden Updates:

    • Geben Sie für den ersten Themenfilter /resnet-18/predictions ein.

    • Geben Sie für den zweiten Themenfilter /resnet-18/test ein.

  8. Aktualisieren Sie Ihre Testabonnements, um das richtige Verzeichnis zu verwenden. Folgen Sie dem Verfahren unter Testen des Inferenzbeispiels mit den folgenden Updates:

    • FürAbonnements, wählenAbonnieren eines Themas. Geben Sie für Abonnementthema /resnet-18/predictions ein.

    • Geben Sie auf der Seite /resnet-18/predictions das /resnet-18/test-Thema an, zu dem veröffentlicht werden soll.

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. Checkruntime.logfür Fehler.

    cat system/runtime.log | grep 'ERROR'

    Sie können auch im benutzerdefinierten Lambda-Funktionsprotokoll nach Fehlern suchen:

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

    Weitere Informationen finden Sie unter Fehlerbehebung mit Protokollen.

 

Sicherstellen, dass die Lambda-Funktion erfolgreich bereitgestellt wird

  1. Listen Sie den Inhalt des bereitgestellten Lambdas in/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 optimizedImageClassification.zip-Bereitstellungspaket enthält, das Sie in Schritt 3: Erstellen Sie eine Inferenz-Lambda-Funktion hochgeladen haben.

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

 

Stellen Sie sicher, 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 Lambda-Laufzeit-Namespace, 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.

    Anmerkung

    Wenn Ihr ML-Ressourcenpfad anders als ml_model lautet, müssen Sie ihn hier ersetzen.

    cd /ml_model ls -ls

    Die Dateien sollten folgendermaßen aussehen:

    56 -rw-r--r-- 1 ggc_user ggc_group 56703 Oct 29 20:07 model.json 196152 -rw-r--r-- 1 ggc_user ggc_group 200855043 Oct 29 20:08 model.params 256 -rw-r--r-- 1 ggc_user ggc_group 261848 Oct 29 20:07 model.so 32 -rw-r--r-- 1 ggc_user ggc_group 30564 Oct 29 20:08 synset.txt

 

Die Lambda-Funktion kann /dev/dri/renderD128 nicht finden.

Dies kann passieren, wenn OpenCL keine Verbindung zu den benötigten GPU-Geräten herstellen kann. Sie müssen für die Geräte, die für Ihre Lambda-Funktion erforderlich sind, Geräteressourcen erstellen.

Nächste Schritte

Betrachten Sie als Nächstes weitere optimierte Modelle. Weitere Informationen finden Sie in der SageMaker Neo-Dokumentation.