Debuggen von SageMaker-Endpunkten mit Docker | von Ram Vegiraju | Juni 2023

0
27


Eine Various zum lokalen SageMaker-Modus

Bild von Unsplash von Mohammad Rahmani

Ein Drawback beim Einstieg SageMaker Echtzeit-Inferenz ist, dass es manchmal schwierig ist, Fehler zu beheben. Beim Erstellen eines Endpunkts müssen Sie eine Reihe von Zutaten für eine erfolgreiche Bereitstellung sicherstellen.

  • Korrekte Dateistrukturierung von Modellartefakten abhängig vom verwendeten Modellserver und Container. Im Wesentlichen muss die von Ihnen bereitgestellte Datei „mannequin.tar.gz“ in einem Format vorliegen, das mit dem Modellserver kompatibel ist.
  • Wenn Sie über ein benutzerdefiniertes Inferenzskript verfügen, das die Vor- und Nachbearbeitung für Ihr Modell implementiert, müssen Sie sicherstellen, dass die implementierten Handler mit Ihrem Modellserver kompatibel sind und dass auch auf Codeebene keine Skriptfehler vorliegen.

Zuvor haben wir darüber gesprochen Lokaler SageMaker-Modusaber zum Zeitpunkt dieses Artikels unterstützt der lokale Modus nicht alle Internet hosting-Optionen und Modellserver, die für die SageMaker-Bereitstellung verfügbar sind.

Um diese Einschränkung zu überwinden, werfen wir einen Blick auf die Verwendung Docker mit einem Beispielmodell und wie wir unsere Modellartefakte und Inferenzskripte vor der SageMaker-Bereitstellung testen/debuggen können. In diesem speziellen Beispiel verwenden wir die BART-Modell dass ich in meinem abgedeckt habe letzter Artikel und sehen Sie, wie wir es mit Docker hosten können.

NOTIZ: Für diejenigen unter Ihnen, die neu bei AWS sind, stellen Sie sicher, dass Sie unten ein Konto erstellen Verknüpfung wenn du mitmachen willst. Der Artikel setzt außerdem ein mittleres Verständnis der SageMaker-Bereitstellung voraus, ich würde vorschlagen, dies zu befolgen Artikel zum tieferen Verständnis von Bereitstellung/Inferenz. Ein mittleres Verständnis von Docker ist ebenfalls hilfreich, um dieses Beispiel vollständig zu verstehen.

Wie funktioniert SageMaker-Internet hosting?

Bevor wir zum Codeteil dieses Artikels kommen, werfen wir einen Blick darauf, wie SageMaker Anfragen tatsächlich bearbeitet. Im Kern besteht SageMaker Inference aus zwei Konstrukten:

  • Container: Dadurch wird die Laufzeitumgebung für das Modell eingerichtet und auch in den von Ihnen verwendeten Modellserver integriert. Sie können entweder eines der vorhandenen nutzen Deep-Learning-Container (DLCs) bzw Bauen Sie Ihren eigenen Container.
  • Modellartefakte: Im CreateModel Beim API-Aufruf geben wir eine S3-URL mit den Modelldaten im Format mannequin.tar.gz (Tarball) an. Diese Modelldaten werden in das Verzeichnis choose/ml/mannequin im Container geladen. Dazu gehören auch alle von Ihnen bereitgestellten Inferenzskripte.

Der Schlüssel hier ist, dass für den Container ein Webserver implementiert werden muss, der auf Port 8080 auf den Pfaden /invocations und /ping antwortet. Ein Beispiel für einen Webserver, den wir mit diesen Pfaden implementiert haben, ist Flask während eines Bringen Sie Ihren eigenen Behälter mit Beispiel.

Mit Docker legen wir diesen Port offen und verweisen auf unsere lokalen Skript- und Modellartefakte. Auf diese Weise simulieren wir das erwartete Verhalten eines SageMaker-Endpunkts.

Testen mit Docker

Der Einfachheit halber verwenden wir mein BART-Beispiel aus meinem letzten Artikel. Die Artefakte können Sie hier abrufen Repository. Hier sollten Sie die folgenden Dateien sehen:

  • mannequin.py: Dies ist das Inferenzskript, mit dem wir arbeiten. In diesem Fall verwenden wir DJL Serving, das eine mannequin.py mit einer Handlerfunktion erwartet, die Inferenz implementiert. Ihr Inferenzskript muss weiterhin mit dem Format kompatibel sein, das der Modellserver erwartet.
  • Anforderungen.txt: Alle zusätzlichen Abhängigkeiten, die Ihr mannequin.py-Skript erfordert. Für DJL Serving ist PyTorch bereits vorher installiert, wir nutzen Numpy für die Datenverarbeitung.
  • Serving.properties: Dies ist auch eine DJL-spezifische Datei. Hier können Sie eine beliebige Konfiguration auf Modellebene definieren (z. B. Arbeiter professional Modell).

Wir haben unsere Modellartefakte, jetzt brauchen wir den Container, den wir verwenden werden. In diesem Fall können wir das vorhandene DJL DeepSpeed-Picture abrufen. Eine ausführliche Liste der bereits von AWS bereitgestellten Bilder finden Sie hier Führung. Sie können auch lokal Ihr eigenes Picture erstellen und darauf hinweisen. In diesem Fall agieren wir in einem SageMaker Classic Notebook-Instanz Umgebung, in der auch Docker vorinstalliert ist.

Um mit vorhandenen, von AWS bereitgestellten Bildern arbeiten zu können, müssen wir uns zunächst anmelden AWS Elastic Container Registry (ECR) Um das Bild abzurufen, können Sie dies mit dem folgenden Shell-Befehl tun.

$(aws ecr get-login --region us-east-1 --no-include-email --registry-ids 763104351884)

Sie sollten eine Meldung über die erfolgreiche Anmeldung sehen, die etwa der folgenden ähnelt.

Anmeldung erfolgreich (Screenshot vom Autor)

Sobald wir angemeldet sind, können wir zu dem Pfad gelangen, in dem unsere Modellartefakte gespeichert sind, und den folgenden Befehl ausführen, der den Modellserver startet. Wenn Sie das Bild noch nicht abgerufen haben, wird es auch aus ECR abgerufen.

docker run 
-v /residence/ec2-user/SageMaker:/choose/ml/mannequin
--cpu-shares 512
-p 8080:8080
763104351884.dkr.ecr.us-east-1.amazonaws.com/djl-inference:0.21.0-deepspeed0.8.0-cu117
serve

Hier ein paar wichtige Punkte:

  • Wir machen Port 8080 verfügbar, wie von SageMaker Inference erwartet.
  • Wir verweisen auch auf das bestehende Bild. Diese Zeichenfolge hängt von der Area und dem Modell ab, in der Sie tätig sind. Sie können auch das SageMaker Python SDK verwenden Rufen Sie den API-Aufruf „image_uri“ ab um das geeignete Bild zu identifizieren, das hier abgerufen werden soll.
Bild wird abgerufen (Screenshot vom Autor)

Nachdem das Picture abgerufen wurde, sehen Sie, dass der Modellserver gestartet wurde.

DJL-Server gestartet (Screenshot vom Autor)

Wir können auch überprüfen, ob dieser Container ausgeführt wird, indem wir den folgenden Docker-Befehl verwenden.

docker container ls
Container gestartet (Screenshot vom Autor)

Wir sehen, dass die API über Port 8080 verfügbar ist, an den wir über Curl Beispielanfragen senden können. Beachten Sie, dass wir den /invocations-Pfad angeben, den SageMaker-Container erwarten.

curl -X POST http://localhost:8080/invocations -H "Content material-type: textual content/plain"
"It is a pattern check string"

Dann sehen wir, dass die Rückschlüsse für die Anfrage zurückgegeben werden und dass der Modellserver die Antwort verfolgt und unsere Protokollierungsanweisungen aus unserem Rückschlussskript ausgibt.

Musteranforderung (Screenshot vom Autor)

Lassen Sie uns unsere mannequin.py durchbrechen und sehen, ob wir den Fehler mit Docker frühzeitig erkennen können. Hier in der Inferenzfunktion füge ich eine syntaktisch falsche Druckanweisung hinzu und starte meinen Modellserver neu, um zu sehen, ob dieser Fehler erfasst wird.

def inference(self, inputs):
"""
Customized service entry level operate.

:param inputs: the Enter object holds the textual content for the BART mannequin to deduce upon
:return: the Output object to be ship again
"""

#pattern error
print("=)

Wir können diesen vom Modellserver erfassten Fehler dann sehen, wenn wir den Docker-Run-Befehl ausführen.

Vom Mannequin Server erfasster Fehler (Screenshot vom Autor)

Beachten Sie, dass Sie zum Testen Ihres Containers nicht nur Curl verwenden müssen. Wir können auch so etwas wie das verwenden Python-Anfragen Bibliothek zur Schnittstelle und Arbeit mit dem Container. Eine Beispielanfrage würde wie folgt aussehen:

import requests

headers = {
'Content material-type': 'textual content/plain',
}

response = requests.put up('http://localhost:8080/invocations', headers=headers)

Mithilfe von Anfragen können Sie größere Lasttests für den Container durchführen. Beachten Sie, dass die {Hardware}, auf der Sie den Container ausführen, genutzt wird (stellen Sie sich dies als Äquivalent zur Instanz hinter einem SageMaker-Endpunkt vor).

Zusätzliche Ressourcen und Schlussfolgerung

Den Code für das gesamte Beispiel finden Sie unter dem obigen Hyperlink. Mit SageMaker Inference möchten Sie das lästige Warten auf die Erstellung des Endpunkts vermeiden, um etwaige Fehler zu erfassen. Mit diesem Ansatz können Sie mit jedem SageMaker-Container arbeiten, um Ihre Modellartefakte und Inferenzskripte zu testen und zu debuggen.

Wie immer können Sie jederzeit Suggestions oder Fragen hinterlassen. Vielen Dank fürs Lesen!



Source link

HINTERLASSEN SIE EINE ANTWORT

Please enter your comment!
Please enter your name here