Visualisieren Sie KI/ML-Modellergebnisse mit Flask und AWS Elastic Beanstalk - AWS Prescriptive Guidance

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.

Visualisieren Sie KI/ML-Modellergebnisse mit Flask und AWS Elastic Beanstalk

Erstellt von Chris Caudill (AWS) und Durga Sury

Umgebung: PoC oder Pilotprojekt

Technologien: Maschinelles Lernen und KI; Analytik DevOps; Web- und mobile Apps

Arbeitslast: Open Source

AWS-Services: Amazon Comprehend; AWS Elastic Beanstalk

Übersicht

Die Visualisierung der Ergebnisse von Diensten für künstliche Intelligenz und maschinelles Lernen (AI/ML) erfordert häufig komplexe API-Aufrufe, die von Ihren Entwicklern und Technikern angepasst werden müssen. Dies kann ein Nachteil sein, wenn Ihre Analysten schnell einen neuen Datensatz untersuchen möchten.

Sie können die Zugänglichkeit Ihrer Dienste verbessern und eine interaktivere Form der Datenanalyse bereitstellen, indem Sie eine webbasierte Benutzeroberfläche (UI) verwenden, über die Benutzer ihre eigenen Daten hochladen und die Modellergebnisse in einem Dashboard visualisieren können.

Dieses Muster verwendet Flask und Plotly, um Amazon Comprehend in eine benutzerdefinierte Webanwendung zu integrieren und Stimmungen und Entitäten anhand von Benutzerdaten zu visualisieren. Das Muster enthält auch die Schritte zur Bereitstellung einer Anwendung mithilfe von AWS Elastic Beanstalk. Sie können die Anwendung mithilfe der KI-Services von Amazon Web Services (AWS) oder mithilfe eines speziell trainierten Modells anpassen, das auf einem Endpunkt (z. B. einem SageMaker Amazon-Endpunkt) gehostet wird.

Voraussetzungen und Einschränkungen

Voraussetzungen

Einschränkungen

  • Die Flask-Anwendung dieses Musters wurde für die Arbeit mit CSV-Dateien entwickelt, die eine einzige Textspalte verwenden und auf 200 Zeilen beschränkt sind. Der Anwendungscode kann an andere Dateitypen und Datenmengen angepasst werden.

  • Die Anwendung berücksichtigt keine Datenspeicherung und aggregiert weiterhin hochgeladene Benutzerdateien, bis sie manuell gelöscht werden. Sie können die Anwendung mit Amazon Simple Storage Service (Amazon S3) für persistenten Objektspeicher integrieren oder eine Datenbank wie Amazon DynamoDB für die serverlose Speicherung von Schlüsselwerten verwenden.

  • Die Anwendung berücksichtigt nur Dokumente in englischer Sprache. Sie können Amazon Comprehend jedoch verwenden, um die Hauptsprache eines Dokuments zu ermitteln. Weitere Informationen zu den unterstützten Sprachen für jede Aktion finden Sie in der API-Referenz in der Amazon Comprehend Comprehend-Dokumentation.

  • Eine Liste zur Fehlerbehebung, die häufig auftretende Fehler und deren Lösungen enthält, finden Sie im Abschnitt Zusätzliche Informationen.

Architektur

Die Architektur der Flask-Anwendung

Flask ist ein leichtes Framework für die Entwicklung von Webanwendungen in Python. Es wurde entwickelt, um die leistungsstarke Datenverarbeitung von Python mit einer umfangreichen Weboberfläche zu kombinieren. Die Flask-Anwendung des Musters zeigt Ihnen, wie Sie eine Webanwendung erstellen, mit der Benutzer Daten hochladen, die Daten zur Inferenz an Amazon Comprehend senden und dann die Ergebnisse visualisieren können.   Die Anwendung hat die folgende Struktur:

  • static— Enthält alle statischen Dateien, die die Weboberfläche unterstützen (z. JavaScript B. CSS und Bilder)

  • templates— Enthält alle HTML-Seiten der Anwendung

  • userData— Speichert hochgeladene Benutzerdaten

  • application.py— Die Flask-Anwendungsdatei

  • comprehend_helper.py— Funktionen für API-Aufrufe an Amazon Comprehend

  • config.py— Die Konfigurationsdatei der Anwendung

  • requirements.txt— Die von der Anwendung benötigten Python-Abhängigkeiten

Das application.py Skript enthält die Kernfunktionalität der Webanwendung, die aus vier Flask-Routen besteht. Das folgende Diagramm zeigt diese Flask-Routen.

Die vier Flask-Routen, die die Kernfunktionalität der Webanwendung ausmachen.
  • /ist das Stammverzeichnis der Anwendung und leitet Benutzer auf die upload.html Seite weiter (die im templates Verzeichnis gespeichert ist).

  • /saveFileist eine Route, die aufgerufen wird, nachdem ein Benutzer eine Datei hochgeladen hat. Diese Route empfängt eine POST Anfrage über ein HTML-Formular, das die vom Benutzer hochgeladene Datei enthält. Die Datei wird im userData Verzeichnis gespeichert und die Route leitet Benutzer zur /dashboard Route weiter.

  • /dashboardsendet Benutzer auf die dashboard.html Seite. Im HTML-Code dieser Seite wird der JavaScript Code ausgeführt, der static/js/core.js Daten aus der /data Route liest und dann Visualisierungen für die Seite erstellt.

  • /dataist eine JSON-API, die die zu visualisierenden Daten im Dashboard präsentiert. Diese Route liest die vom Benutzer bereitgestellten Daten und verwendet die Funktionen, um die Benutzerdaten comprehend_helper.py zur Stimmungsanalyse und Named Entity Recognition (NER) an Amazon Comprehend zu senden. Die Antwort von Amazon Comprehend wird formatiert und als JSON-Objekt zurückgegeben.

Architektur der Bereitstellung

Weitere Informationen zu Designüberlegungen für Anwendungen, die mit Elastic Beanstalk in der AWS-Cloud bereitgestellt werden, finden Sie in der Dokumentation zu AWS Elastic Beanstalk.

Architekturdiagramm für die Verwendung von Flask und Elastic Beanstalk zur Visualisierung von KI/ML-Modellergebnissen.

Überlegungen zum Entwurf

Technologie-Stack

  • Amazon Comprehend 

  • Elastic Beanstalk 

  • Flask 

Automatisierung und Skalierung

Elastic Beanstalk Beanstalk-Bereitstellungen werden automatisch mit Load Balancern und Auto Scaling-Gruppen eingerichtet. Weitere Konfigurationsoptionen finden Sie unter Konfiguration von Elastic Beanstalk-Umgebungen in der Dokumentation zu AWS Elastic Beanstalk.

Tools

  • AWS Command Line Interface (AWS CLI) ist ein einheitliches Tool, das eine konsistente Schnittstelle für die Interaktion mit allen Teilen von AWS bietet.

  • Amazon Comprehend verwendet Natural Language Processing (NLP), um Erkenntnisse über den Inhalt von Dokumenten zu gewinnen, ohne dass eine spezielle Vorverarbeitung erforderlich ist.

  • Mit AWS Elastic Beanstalk können Sie Anwendungen in der AWS-Cloud schnell bereitstellen und verwalten, ohne sich mit der Infrastruktur vertraut machen zu müssen, auf der diese Anwendungen ausgeführt werden.

  • Elastic Beanstalk CLI (EB CLI) ist eine Befehlszeilenschnittstelle für AWS Elastic Beanstalk, die interaktive Befehle bereitstellt, um die Erstellung, Aktualisierung und Überwachung von Umgebungen aus einem lokalen Repository zu vereinfachen.

  • Das Flask-Framework führt Datenverarbeitung und API-Aufrufe mit Python durch und bietet interaktive Webvisualisierung mit Plotly.

Code

Der Code für dieses Muster ist im GitHub Visualize AI/ML-Modellergebnisse mithilfe von Flask und AWS Elastic Beanstalk Repository verfügbar.

Epen

AufgabeBeschreibungErforderliche Fähigkeiten

Klonen Sie das GitHub Repository.

Rufen Sie den Anwendungscode aus den GitHub Visualize AI/ML-Modellergebnissen mithilfe von Flask und dem AWS Elastic Beanstalk Beanstalk-Repository ab, indem Sie den folgenden Befehl ausführen:

git clone git@github.com:aws-samples/aws-comprehend-elasticbeanstalk-for-flask.git

Hinweis: Stellen Sie sicher, dass Sie Ihre SSH-Schlüssel mit konfigurieren. GitHub

Developer

Installieren Sie die Python-Module.

Nachdem Sie das Repository geklont haben, wird ein neues lokales aws-comprehend-elasticbeanstalk-for-flask Verzeichnis erstellt. In diesem Verzeichnis enthält die requirements.txt Datei die Python-Module und -Versionen, die die Anwendung ausführen. Verwenden Sie die folgenden Befehle, um die Module zu installieren:

cd aws-comprehend-elasticbeanstalk-for-flask

pip install -r requirements.txt

Python-Entwickler

Testen Sie die Anwendung lokal.

Starten Sie den Flask-Server, indem Sie den folgenden Befehl ausführen:

python application.py

Dies gibt Informationen über den laufenden Server zurück. Sie sollten auf die Anwendung zugreifen können, indem Sie einen Browser öffnen und http://localhost:5000 aufrufen

Hinweis: Wenn Sie die Anwendung in einer AWS Cloud9 Cloud9-IDE ausführen, müssen Sie den application.run() Befehl in der application.py Datei durch die folgende Zeile ersetzen:

application.run(host=os.getenv('IP', '0.0.0.0'),port=int(os.getenv('PORT', 8080)))

Sie müssen diese Änderung vor der Bereitstellung rückgängig machen.

Python-Entwickler
AufgabeBeschreibungErforderliche Fähigkeiten

Starten Sie die Elastic Beanstalk Beanstalk-Anwendung.

Um Ihr Projekt als Elastic Beanstalk Beanstalk-Anwendung zu starten, führen Sie den folgenden Befehl im Stammverzeichnis Ihrer Anwendung aus:

eb init -p python-3.6 comprehend_flask --region us-east-1

Wichtig

  • comprehend_flaskist der Name der Elastic Beanstalk Beanstalk-Anwendung und kann entsprechend Ihren Anforderungen geändert werden. 

  • Sie können die AWS-Region durch eine Region Ihrer Wahl ersetzen. Die Standardregion in AWS CLI wird verwendet, wenn Sie keine Region angeben.

  • Die Anwendung wurde mit Python Version 3.6 erstellt. Wenn Sie andere Python-Versionen verwenden, können Fehler auftreten.

Führen Sie den eb init -i Befehl aus, um weitere Konfigurationsoptionen für die Bereitstellung zu erhalten.

Architekt, Entwickler

Stellen Sie die Elastic Beanstalk Beanstalk-Umgebung bereit.

Führen Sie den folgenden Befehl im Stammverzeichnis der Anwendung aus:

eb create comprehend-flask-env

Hinweis: comprehend-flask-env ist der Name der Elastic Beanstalk Beanstalk-Umgebung und kann entsprechend Ihren Anforderungen geändert werden. Der Name darf nur Buchstaben, Zahlen und Bindestriche enthalten.

Architekt, Entwickler

Autorisieren Sie Ihre Bereitstellung für die Verwendung von Amazon Comprehend.

Obwohl Ihre Anwendung möglicherweise erfolgreich bereitgestellt wurde, sollten Sie Ihrer Bereitstellung auch Zugriff auf Amazon Comprehend gewähren. ComprehendFullAccessist eine von AWS verwaltete Richtlinie, die der bereitgestellten Anwendung Berechtigungen zum Durchführen von API-Aufrufen an Amazon Comprehend gewährt.

Fügen Sie die ComprehendFullAccess Richtlinie hinzu aws-elasticbeanstalk-ec2-role (diese Rolle wird automatisch für die Amazon Elastic Compute Cloud (Amazon EC2) -Instances Ihrer Bereitstellung erstellt), indem Sie den folgenden Befehl ausführen:

aws iam attach-role-policy --policy-arn arn:aws:iam::aws:policy/ComprehendFullAccess --role-name aws-elasticbeanstalk-ec2-role

Wichtig: aws-elasticbeanstalk-ec2-role wird erstellt, wenn Ihre Anwendung bereitgestellt wird. Sie müssen den Bereitstellungsprozess abschließen, bevor Sie die AWS Identity and Access Management (IAM) -Richtlinie anhängen können.

Entwickler, Sicherheitsarchitekt

Besuchen Sie Ihre bereitgestellte Anwendung.

Nachdem Ihre Anwendung erfolgreich bereitgestellt wurde, können Sie sie aufrufen, indem Sie den eb open Befehl ausführen.

Sie können den eb status Befehl auch ausführen, um Details zu Ihrer Bereitstellung zu erhalten. Die Bereitstellungs-URL ist unter aufgeführtCNAME.

Architekt, Entwickler
AufgabeBeschreibungErforderliche Fähigkeiten

Autorisieren Sie Elastic Beanstalk, auf das neue Modell zuzugreifen.

Stellen Sie sicher, dass Elastic Beanstalk über die erforderlichen Zugriffsberechtigungen für Ihren neuen Modellendpunkt verfügt. Wenn Sie beispielsweise einen SageMaker Amazon-Endpunkt verwenden, benötigt Ihre Bereitstellung die Erlaubnis, den Endpunkt aufzurufen. 

Weitere Informationen dazu finden Sie InvokeEndpointin der SageMaker Amazon-Dokumentation.

Entwickler, Sicherheitsarchitekt

Senden Sie die Benutzerdaten an ein neues Modell.

Um das zugrunde liegende ML-Modell in dieser Anwendung zu ändern, müssen Sie die folgenden Dateien ändern:

  • comprehend_helper.py— Dies ist das Python-Skript, das eine Verbindung mit Amazon Comprehend herstellt, die Antwort verarbeitet und das Endergebnis an die Anwendung zurückgibt. In diesem Skript können Sie die Daten entweder an einen anderen KI-Service in der AWS-Cloud weiterleiten oder Sie können die Daten an einen benutzerdefinierten Modellendpunkt senden. Wir empfehlen, dass Sie die Ergebnisse auch in diesem Skript formatieren, um die logische Trennung und die Wiederverwendbarkeit dieses Musters zu gewährleisten.

  • application.py— Wenn Sie den Namen des comprehend_helper.py Skripts oder der Funktionen ändern, müssen Sie das application.py Anwendungsskript aktualisieren, um diese Änderungen widerzuspiegeln.

Data Scientist

Aktualisieren Sie die Dashboard-Visualisierungen.

In der Regel bedeutet die Integration eines neuen ML-Modells, dass die Visualisierungen aktualisiert werden müssen, um die neuen Ergebnisse widerzuspiegeln. Diese Änderungen werden in den folgenden Dateien vorgenommen:

  • templates/dashboard.html— Die vorgefertigte Anwendung unterstützt nur zwei grundlegende Visualisierungen. Das gesamte Layout der Seite kann in dieser Datei angepasst werden.

  • static/js/core.js— Dieses Skript erfasst die formatierte Ausgabe der /data Route des Flask-Servers und verwendet Plotly, um Visualisierungen zu erstellen. Sie können die Diagramme der Seite hinzufügen oder aktualisieren.

Web-Entwickler
AufgabeBeschreibungErforderliche Fähigkeiten

Aktualisieren Sie die Anforderungsdatei Ihrer Bewerbung.

Bevor Sie Änderungen an Elastic Beanstalk senden, aktualisieren Sie die requirements.txt Datei, sodass sie alle neuen Python-Module widerspiegelt, indem Sie den folgenden Befehl im Stammverzeichnis Ihrer Anwendung ausführen:

pip freeze > requirements.txt

Python-Entwickler

Stellen Sie die Elastic Beanstalk Beanstalk-Umgebung erneut bereit.

Um sicherzustellen, dass Ihre Anwendungsänderungen in Ihrem Elastic Beanstalk-Deployment widergespiegelt werden, navigieren Sie zum Stammverzeichnis Ihrer Anwendung und führen Sie den folgenden Befehl aus:

eb deploy

Dadurch wird die neueste Version des Anwendungscodes an Ihr vorhandenes Elastic Beanstalk-Deployment gesendet.

Systemadministrator, Architekt

Zugehörige Ressourcen

Zusätzliche Informationen

Liste der Problemlösungen

Im Folgenden sind sechs häufige Fehler und ihre Lösungen aufgeführt.

Fehler 1

Unable to assume role "arn:aws:iam::xxxxxxxxxx:role/aws-elasticbeanstalk-ec2-role". Verify that the role exists and is configured correctly.

Lösung: Wenn dieser Fehler bei der Ausführung auftritteb create, erstellen Sie eine Beispielanwendung auf der Elastic Beanstalk Beanstalk-Konsole, um das Standard-Instance-Profil zu erstellen. Weitere Informationen dazu finden Sie in der Dokumentation zu AWS Elastic Beanstalk unter Creating an Elastic Beanstalk Environment.

Fehler 2

Your WSGIPath refers to a file that does not exist.

Lösung: Dieser Fehler tritt in den Bereitstellungsprotokollen auf, weil Elastic Beanstalk erwartet, dass der Flask-Code benannt wird. application.py Wenn Sie einen anderen Namen gewählt haben, führen Sie den WSGIPath aus eb config und bearbeiten Sie ihn, wie im folgenden Codebeispiel gezeigt:

aws:elasticbeanstalk:container:python: NumProcesses: '1' NumThreads: '15' StaticFiles: /static/=static/ WSGIPath: application.py

Stellen Sie sicher, dass Sie ihn durch Ihren Dateinamen application.py ersetzen.

Sie können auch Gunicorn und ein Profil nutzen. Weitere Informationen zu diesem Ansatz finden Sie unter Konfiguration des WSGI-Servers mit einem Profil in der AWS Elastic Beanstalk Beanstalk-Dokumentation.

Fehler 3

Target WSGI script '/opt/python/current/app/application.py' does not contain WSGI application 'application'.

Lösung: Elastic Beanstalk erwartet, dass die Variable, die Ihre Flask-Anwendung repräsentiert, benannt wird. application Stellen Sie sicher, dass die application.py Datei application als Variablennamen verwendet:

application = Flask(__name__)

Fehler 4

The EB CLI cannot find your SSH key file for keyname

Lösung: Verwenden Sie die EB-CLI, um anzugeben, welches key pair verwendet werden soll, oder um ein key pair für die EC2-Instances Ihrer Bereitstellung zu erstellen. Um den Fehler zu beheben, führen Sie den eb init -i Befehl aus und eine der Optionen wird Sie fragen:

Do you want to set up SSH for your instances?

Antworten Sie mitY, um entweder ein key pair zu erstellen oder ein vorhandenes key pair anzugeben.

Fehler 5

Ich habe meinen Code aktualisiert und erneut bereitgestellt, aber mein Deployment spiegelt meine Änderungen nicht wider.

Lösung: Wenn du ein Git-Repository mit deiner Bereitstellung verwendest, stelle sicher, dass du deine Änderungen hinzufügst und festschreibst, bevor du sie erneut bereitstellst.

Fehler 6

Sie zeigen eine Vorschau der Flask-Anwendung von einer AWS Cloud9 Cloud9-IDE aus und stoßen auf Fehler.

Lösung: Weitere Informationen dazu finden Sie unter Vorschau laufender Anwendungen in der AWS Cloud9 Cloud9-IDE in der AWS Cloud9 Cloud9-Dokumentation.

Verarbeitung natürlicher Sprache mit Amazon Comprehend

Wenn Sie sich für Amazon Comprehend entscheiden, können Sie benutzerdefinierte Entitäten in einzelnen Textdokumenten erkennen, indem Sie Echtzeitanalysen oder asynchrone Batch-Jobs ausführen. Mit Amazon Comprehend können Sie auch benutzerdefinierte Modelle zur Erkennung von Entitäten und zur Textklassifizierung trainieren, die in Echtzeit verwendet werden können, indem Sie einen Endpunkt erstellen.

Dieses Muster verwendet asynchrone Batch-Jobs, um Stimmungen und Entitäten aus einer Eingabedatei zu erkennen, die mehrere Dokumente enthält. Die in diesem Muster bereitgestellte Beispielanwendung ist so konzipiert, dass Benutzer eine CSV-Datei hochladen können, die eine einzelne Spalte mit einem Textdokument pro Zeile enthält. Die comprehend_helper.py Datei im GitHub Visualize AI/ML-Model Results using Flask and AWS Elastic Beanstalk Repository liest die Eingabedatei und sendet die Eingabe zur Verarbeitung an Amazon Comprehend.

BatchDetectEntities

Amazon Comprehend untersucht den Text eines Stapels von Dokumenten auf benannte Entitäten und gibt die erkannte Entität, den Standort, den Entitätstyp und eine Bewertung zurück, die das Vertrauensniveau von Amazon Comprehend angibt. In einem API-Aufruf können maximal 25 Dokumente gesendet werden, wobei jedes Dokument kleiner als 5.000 Byte ist. Sie können die Ergebnisse filtern, sodass nur bestimmte Entitäten angezeigt werden, die auf dem Anwendungsfall basieren. Sie könnten beispielsweise den ‘quantity’ Entitätstyp überspringen und einen Schwellenwert für die erkannte Entität festlegen (z. B. 0,75). Wir empfehlen Ihnen, die Ergebnisse für Ihren speziellen Anwendungsfall zu untersuchen, bevor Sie einen Schwellenwert auswählen. Weitere Informationen dazu finden Sie BatchDetectEntitiesin der Amazon Comprehend Comprehend-Dokumentation.

BatchDetectSentiment

Amazon Comprehend prüft einen Stapel eingehender Dokumente und gibt die vorherrschende Stimmung für jedes Dokument zurück (POSITIVE,NEUTRAL, MIXED oder). NEGATIVE In einem API-Aufruf können maximal 25 Dokumente gesendet werden, wobei jedes Dokument kleiner als 5.000 Byte ist. Die Stimmungsanalyse ist unkompliziert, und Sie wählen die Stimmung mit der höchsten Punktzahl aus, die in den Endergebnissen angezeigt werden soll. Weitere Informationen dazu finden Sie BatchDetectSentimentin der Amazon Comprehend Comprehend-Dokumentation.

 

Handhabung der Flask-Konfiguration

Flask-Server verwenden eine Reihe von Konfigurationsvariablen, um zu steuern, wie der Server läuft. Diese Variablen können Debug-Ausgaben, Sitzungstoken oder andere Anwendungseinstellungen enthalten. Sie können auch benutzerdefinierte Variablen definieren, auf die zugegriffen werden kann, während die Anwendung ausgeführt wird. Es gibt mehrere Ansätze zum Setzen von Konfigurationsvariablen.

In diesem Muster wird die Konfiguration definiert config.py und darin vererbtapplication.py.

  • config.pyenthält die Konfigurationsvariablen, die beim Start der Anwendung eingerichtet werden. In dieser Anwendung ist eine DEBUG Variable definiert, die der Anwendung mitteilt, den Server im Debug-Modus auszuführen. Hinweis: Der Debug-Modus sollte nicht verwendet werden, wenn eine Anwendung in einer Produktionsumgebung ausgeführt wird. UPLOAD_FOLDERist eine benutzerdefinierte Variable, die so definiert ist, dass sie später in der Anwendung referenziert wird und sie darüber informiert, wo hochgeladene Benutzerdaten gespeichert werden sollen.

  • application.pyinitiiert die Flask-Anwendung und erbt die in definierten Konfigurationseinstellungen. config.py Dies wird durch den folgenden Code ausgeführt:

application = Flask(__name__) application.config.from_pyfile('config.py')