Stellen Sie eine Lösung zur Erfassung von Inferenzdaten für maschinelles Lernen auf AWS Lambda PlatoBlockchain Data Intelligence bereit. Vertikale Suche. Ai.

Stellen Sie eine Datenerfassungslösung für Machine Learning-Inferenzen auf AWS Lambda bereit

Die Überwachung von Vorhersagen des maschinellen Lernens (ML) kann dazu beitragen, die Qualität der bereitgestellten Modelle zu verbessern. Durch das Erfassen der Daten aus in der Produktion gemachten Inferenzen können Sie Ihre bereitgestellten Modelle überwachen und Abweichungen in der Modellqualität erkennen. Durch die frühzeitige und proaktive Erkennung dieser Abweichungen können Sie Korrekturmaßnahmen ergreifen, z. B. Modelle neu trainieren, vorgelagerte Systeme prüfen oder Qualitätsprobleme beheben.

AWS Lambda ist ein Serverless-Computing-Dienst, der ML-Inferenz in Echtzeit in großem Maßstab bereitstellen kann. In diesem Beitrag demonstrieren wir eine beispielhafte Datenerfassungsfunktion, die für eine Lambda ML-Inferenz-Workload bereitgestellt werden kann.

Im Dezember 2020 führte Lambda die Unterstützung für Container-Images als Verpackungsformat ein. Diese Funktion hat die Größenbeschränkung für Bereitstellungspakete von 500 MB auf 10 GB erhöht. Vor der Einführung dieser Funktion erschwerte die Einschränkung der Paketgröße die Bereitstellung von ML-Frameworks wie TensorFlow oder PyTorch für Lambda-Funktionen. Nach der Einführung machte die erhöhte Paketgrößenbeschränkung ML zu einer praktikablen und attraktiven Workload für die Bereitstellung in Lambda. Im Jahr 2021 war ML-Inferenz einer der am schnellsten wachsenden Workload-Typen im Lambda-Service.

Amazon Sage Maker, der vollständig verwaltete ML-Dienst von Amazon, enthält eine eigene Modellüberwachungsfunktion. Das Beispielprojekt in diesem Beitrag zeigt jedoch, wie die Datenerfassung zur Verwendung bei der Modellüberwachung für Kunden durchgeführt wird, die Lambda für ML-Inferenz verwenden. Das Projekt verwendet Lambda-Erweiterungen zum Erfassen von Inferenzdaten, um die Auswirkungen auf die Leistung und Latenz der Inferenzfunktion zu minimieren. Die Verwendung von Lambda-Erweiterungen minimiert auch die Auswirkungen auf Funktionsentwickler. Durch die Integration über eine Erweiterung kann die Überwachungsfunktion auf mehrere Funktionen angewendet und von einem zentralisierten Team gewartet werden.

Lösungsübersicht

Dieses Projekt enthält Quellcode und unterstützende Dateien für eine serverlose Anwendung, die Echtzeit-Inferenzen mithilfe eines auf Distilbert basierenden, vortrainierten Fragebeantwortungsmodells bereitstellt. Das Projekt verwendet das Frage-und-Antwort-Modell der natürlichen Sprachverarbeitung (NLP) von Hugging Face PyTorch um Inferenzaufgaben in natürlicher Sprache durchzuführen. Das Projekt beinhaltet auch eine Lösung zur Durchführung einer Inferenzdatenerfassung für die Modellvorhersagen. Der Lambda-Funktionsschreiber kann genau bestimmen, welche Daten aus der Inferenzanforderungseingabe und dem Vorhersageergebnis an die Erweiterung gesendet werden sollen. In dieser Lösung senden wir die Eingabe und die Antwort vom Modell an die Erweiterung. Die Erweiterung sendet dann periodisch die Daten an eine Amazon Simple Storage-Service (Amazon S3) Eimer. Wir erstellen die Datenerfassungserweiterung als Container-Image mithilfe von a makefile. Anschließend erstellen wir die Lambda-Inferenzfunktion als Container-Image und fügen das Erweiterungs-Container-Image als Container-Image-Ebene hinzu. Das folgende Diagramm zeigt einen Überblick über die Architektur.

Lambda-Erweiterungen sind eine Möglichkeit, Lambda-Funktionen zu erweitern. In diesem Projekt verwenden wir eine externe Lambda-Erweiterung, um die Inferenzanfrage und die Vorhersage aus der Inferenz zu protokollieren. Die externe Erweiterung wird als separater Prozess in der Lambda-Laufzeitumgebung ausgeführt, wodurch die Auswirkungen auf die Inferenzfunktion verringert werden. Die Funktion teilt jedoch Ressourcen wie CPU, Arbeitsspeicher und Speicher mit der Lambda-Funktion. Wir empfehlen, der Lambda-Funktion genügend Arbeitsspeicher zuzuweisen, um eine optimale Ressourcenverfügbarkeit sicherzustellen. (In unseren Tests haben wir der Inferenz-Lambda-Funktion 5 GB Speicher zugewiesen und eine optimale Ressourcenverfügbarkeit und Inferenzlatenz festgestellt). Wenn eine Inferenz abgeschlossen ist, gibt der Lambda-Dienst die Antwort sofort zurück und wartet nicht darauf, dass die Erweiterung die Protokollierung der Anforderung und Antwort im S3-Bucket abgeschlossen hat. Bei diesem Muster wirkt sich die Überwachungserweiterung nicht auf die Inferenzlatenz aus. Um mehr über Lambda-Erweiterungen zu erfahren sehen Sie sich diese Videoserien an.

Projektinhalt

Dieses Projekt verwendet die AWS Serverless-Anwendungsmodell (AWS SAM)-Befehlszeilenschnittstelle (CLI). Mit diesem Befehlszeilentool können Entwickler Anwendungen initialisieren und konfigurieren; lokal packen, erstellen und testen; und in der AWS Cloud bereitstellen.

Sie können den Quellcode für dieses Projekt unter herunterladen das GitHub-Repository.

Dieses Projekt enthält die folgenden Dateien und Ordner:

  • app/app.py – Code für die Lambda-Funktion der Anwendung, einschließlich des Codes für ML-Rückschlüsse.
  • App/Dockerfile – Das Dockerfile zum Erstellen des Container-Images, das die Inferenzfunktion verpackt, das von Hugging Face heruntergeladene Modell und die als Schicht erstellte Lambda-Erweiterung. Im Gegensatz zu .zip-Funktionen können Ebenen zum Zeitpunkt der Funktionserstellung nicht an Container-gepackte Lambda-Funktionen angehängt werden. Stattdessen bauen wir die Ebene auf und kopieren ihren Inhalt in das Container-Image.
  • Erweiterungsoptionen – Die Modellmonitor-Erweiterungsdateien. Diese Lambda-Erweiterung wird verwendet, um die Eingabe für die Inferenzfunktion und die entsprechende Vorhersage in einem S3-Bucket zu protokollieren.
  • App/Modell – Das von Hugging Face heruntergeladene Modell.
  • app/requirements.txt – Die Python-Abhängigkeiten, die im Container installiert werden sollen.
  • Veranstaltungen – Aufrufereignisse, mit denen Sie die Funktion testen können.
  • template.yaml – Eine Deskriptordatei, die die AWS-Ressourcen der Anwendung definiert.

Die Anwendung verwendet mehrere AWS-Ressourcen, darunter Lambda-Funktionen und eine Amazon API-Gateway API. Diese Ressourcen sind in der definiert template.yaml Datei in diesem Projekt. Sie können die Vorlage aktualisieren, um AWS-Ressourcen über denselben Bereitstellungsprozess hinzuzufügen, der Ihren Anwendungscode aktualisiert.

Voraussetzungen:

Für diese exemplarische Vorgehensweise sollten Sie die folgenden Voraussetzungen erfüllen:

Stellen Sie die Beispielanwendung bereit

Führen Sie die folgenden Schritte aus, um Ihre Anwendung zum ersten Mal zu erstellen:

  • Führen Sie den folgenden Code in Ihrer Shell aus. (Dies wird auch die Erweiterung erstellen):
  • Erstellen Sie ein Docker-Image der Modellüberwachungsanwendung. Die Build-Inhalte befinden sich in der .aws-sam Verzeichnis
docker build -t serverless-ml-model-monitor:latest .

docker tag serverless-ml-model-monitor:latest .dkr.ecr.us-east-1.amazonaws.com/serverless-ml-model-monitor:latest

  • Melden Sie sich bei Amazon ECR an:
aws ecr get-login-password --region us-east-1 docker login --username AWS --password-stdin .dkr.ecr.us-east-1.amazonaws.com

  • Erstellen Sie ein Repository in Amazon ECR:

aws ecr create-repositoryrepository-name serverless-ml-model-monitor--image-scanning-configuration scanOnPush=true--region us-east-1

  • Pushen Sie das Container-Image an Amazon ECR:
docker push .dkr.ecr.us-east-1.amazonaws.com/serverless-ml-model-monitor:latest

  • Entkommentieren Sie Zeile #1 in App/Dockerfile und bearbeiten Sie es so, dass es auf das richtige ECR-Repository-Image zeigt, und kommentieren Sie dann die Zeilen 6 und 7 aus App/Dockerfile:
WORKDIR /opt
COPY --from=layer /opt/ .

  • Erstellen Sie die Anwendung erneut:

Wir bauen erneut, weil Lambda Lambda-Layer nicht direkt für den Container-Image-Verpackungstyp unterstützt. Wir müssen zuerst die Modellüberwachungskomponente als Container-Image erstellen, es in Amazon ECR hochladen und dieses Image dann in der Modellüberwachungsanwendung als Container-Ebene verwenden.

  • Stellen Sie schließlich die Lambda-Funktion, das API-Gateway und die Erweiterung bereit:
sam deploy --guided

Dieser Befehl verpackt und stellt Ihre Anwendung in AWS mit einer Reihe von Eingabeaufforderungen bereit:

  • Stapelname : Der Name des bereitgestellten AWS CloudFormation Stapel. Dies sollte für Ihr Konto und Ihre Region eindeutig sein, und ein guter Ausgangspunkt wäre etwas, das Ihrem Projektnamen entspricht.
  • AWS-Region : Die AWS-Region, in der Sie Ihre Anwendung bereitstellen.
  • Bestätigen Sie die Änderungen vor der Bereitstellung : Wenn eingestellt auf yes, werden Ihnen alle Änderungssets angezeigt, bevor Sie sie zur manuellen Überprüfung ausführen. Wenn auf no gesetzt, stellt die AWS SAM CLI automatisch Anwendungsänderungen bereit.
  • Erstellen von AWS SAM CLI-IAM-Rollen zulassen : Viele AWS SAM-Vorlagen, einschließlich dieses Beispiels, erstellen AWS Identity and Access Management and (IAM)-Rollen, die für die Lambda-Funktion(en) erforderlich sind, um auf AWS-Services zuzugreifen. Standardmäßig sind diese auf die minimal erforderlichen Berechtigungen beschränkt. Um einen CloudFormation-Stack bereitzustellen, der IAM-Rollen erstellt oder ändert, muss die CAPABILITY_IAM Wert für capabilities muss zur Verfügung gestellt werden. Wenn die Berechtigung nicht über diese Eingabeaufforderung bereitgestellt wird, müssen Sie zum Bereitstellen dieses Beispiels explizit übergeben --capabilities CAPABILITY_IAM zu den sam deploy Befehl.
  • Argumente in samconfig.toml speichern : Wenn eingestellt auf yes, werden Ihre Auswahlen in einer Konfigurationsdatei innerhalb des Projekts gespeichert, sodass Sie sie in Zukunft einfach ausführen können sam deploy ohne Parameter, um Änderungen an Ihrer Anwendung bereitzustellen.

Sie finden Ihre API Gateway-Endpunkt-URL in den Ausgabewerten, die nach der Bereitstellung angezeigt werden.

Testen Sie die Anwendung

Verwenden Sie zum Testen der Anwendung Postman oder curl, um eine Anfrage an den API Gateway-Endpunkt zu senden. Zum Beispiel:

curl -X POST -H "Content-Type: text/plain" https://.execute-api.us-east-1.amazonaws.com/Prod/nlp-qa -d '{"question": "Where do you live?", "context": "My name is Clara and I live in Berkeley."}'

Sie sollten eine Ausgabe wie den folgenden Code sehen. Das ML-Modell hat aus dem Kontext abgeleitet und die Antwort auf unsere Frage zurückgegeben.

{
    "Question": "Where do you live?",
    "Answer": "Berkeley",
    "score": 0.9113729596138
}

Nach einigen Minuten sollten Sie eine Datei im S3-Bucket sehen nlp-qamodel-model-monitoring-modelmonitorbucket- mit der Eingabe und der protokollierten Inferenz.

Aufräumen

Um die von Ihnen erstellte Beispielanwendung zu löschen, verwenden Sie die AWS CLI:

aws cloudformation delete-stack --stack-name 

Zusammenfassung

In diesem Beitrag haben wir eine Modellüberwachungsfunktion als Lambda-Erweiterung implementiert und für eine Lambda ML-Inferenz-Workload bereitgestellt. Wir haben gezeigt, wie Sie diese Lösung für Ihr eigenes AWS-Konto erstellen und bereitstellen. Schließlich haben wir gezeigt, wie man einen Test durchführt, um die Funktionalität des Monitors zu überprüfen.

Bitte geben Sie Ihre Gedanken oder Fragen im Kommentarbereich an. Weitere serverlose Lernressourcen finden Sie unter Serverloses Land.


Über die Autoren

Stellen Sie eine Lösung zur Erfassung von Inferenzdaten für maschinelles Lernen auf AWS Lambda PlatoBlockchain Data Intelligence bereit. Vertikale Suche. Ai.Dan Fuchs ist Principal Specialist Solutions Architect in der Worldwide Specialist Organization for Serverless. Dan arbeitet mit Kunden zusammen, um ihnen dabei zu helfen, serverlose Dienste zu nutzen, um skalierbare, fehlertolerante, leistungsstarke und kostengünstige Anwendungen zu erstellen. Dan ist dankbar, im schönen Boulder, Colorado, leben und arbeiten zu können.

Stellen Sie eine Lösung zur Erfassung von Inferenzdaten für maschinelles Lernen auf AWS Lambda PlatoBlockchain Data Intelligence bereit. Vertikale Suche. Ai.Newton Jain ist ein Senior Product Manager, der für den Aufbau neuer Erfahrungen für maschinelles Lernen, High Performance Computing (HPC) und Medienverarbeitungskunden auf AWS Lambda verantwortlich ist. Er leitet die Entwicklung neuer Funktionen, um die Leistung zu steigern, die Latenz zu reduzieren, die Skalierbarkeit zu verbessern, die Zuverlässigkeit zu erhöhen und die Kosten zu senken. Er unterstützt AWS-Kunden auch bei der Definition einer effektiven serverlosen Strategie für ihre rechenintensiven Anwendungen.

Stellen Sie eine Lösung zur Erfassung von Inferenzdaten für maschinelles Lernen auf AWS Lambda PlatoBlockchain Data Intelligence bereit. Vertikale Suche. Ai.Diksha Sharma ist Lösungsarchitekt und Spezialist für maschinelles Lernen bei AWS. Sie hilft Kunden, ihre Cloud-Einführung zu beschleunigen, insbesondere in den Bereichen maschinelles Lernen und serverlose Technologien. Diksha stellt kundenspezifische Proofs of Concept bereit, die Kunden den Wert von AWS bei der Bewältigung ihrer geschäftlichen und IT-Herausforderungen zeigen. Sie vermittelt Kunden ihr Wissen über AWS und arbeitet mit Kunden zusammen, um ihre gewünschte Lösung aufzubauen.

Stellen Sie eine Lösung zur Erfassung von Inferenzdaten für maschinelles Lernen auf AWS Lambda PlatoBlockchain Data Intelligence bereit. Vertikale Suche. Ai.Veda Raman ist ein Senior Specialist Solutions Architect für maschinelles Lernen mit Sitz in Maryland. Veda arbeitet mit Kunden zusammen, um ihnen bei der Entwicklung effizienter, sicherer und skalierbarer Anwendungen für maschinelles Lernen zu helfen. Veda ist daran interessiert, Kunden dabei zu helfen, serverlose Technologien für maschinelles Lernen zu nutzen.

Stellen Sie eine Lösung zur Erfassung von Inferenzdaten für maschinelles Lernen auf AWS Lambda PlatoBlockchain Data Intelligence bereit. Vertikale Suche. Ai. Josh Khan ist der weltweite Technologieführer für Serverless und ein Principal Solutions Architect. Er leitet eine globale Community von Serverless-Experten bei AWS, die Kunden jeder Größe, von Start-ups bis zu den größten Unternehmen der Welt, dabei helfen, serverlose AWS-Technologien effektiv zu nutzen.

Zeitstempel:

Mehr von AWS Maschinelles Lernen