Aufrufen eines Multimodell-Endpunkts - Amazon SageMaker

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.

Aufrufen eines Multimodell-Endpunkts

Um einen Endpunkt mit mehreren Modellen aufzurufen, verwenden Sie den invoke_endpointaus der SageMaker Runtime heraus so, als würden Sie einen einzelnen Modellendpunkt aufrufen, mit einer Änderung. Übergeben Sie einen neuen TargetModel-Parameter, der angibt, welches der Modelle am Endpunkt Ziel ist. Die SageMaker InvokeEndpoint Runtime-Anfrage wird X-Amzn-SageMaker-Target-Model als neuer Header unterstützt, der den relativen Pfad des für den Aufruf angegebenen Modells verwendet. Das SageMaker System erstellt den absoluten Pfad des Modells, indem es das Präfix, das als Teil des CreateModel API Aufrufs bereitgestellt wird, mit dem relativen Pfad des Modells kombiniert.

Die folgenden Verfahren sind für beide CPU und für Endpunkte mit mehreren GPU Modellen identisch.

AWS SDK for Python (Boto 3)

Die folgende Beispielvorhersageanforderung verwendet AWS SDKfür Python (Boto 3) im Beispielnotizbuch.

response = runtime_sagemaker_client.invoke_endpoint( EndpointName = "<ENDPOINT_NAME>", ContentType = "text/csv", TargetModel = "<MODEL_FILENAME>.tar.gz", Body = body)
AWS CLI

Das folgende Beispiel zeigt, wie eine CSV Anfrage mit zwei Zeilen mithilfe von AWS Command Line Interface (AWS CLI) gestellt wird:

aws sagemaker-runtime invoke-endpoint \ --endpoint-name "<ENDPOINT_NAME>" \ --body "1.0,2.0,5.0"$'\n'"2.0,3.0,4.0" \ --content-type "text/csv" \ --target-model "<MODEL_NAME>.tar.gz" output_file.txt

Eine output_file.txt mit Angaben zu Ihren Inference-Anfragen wird erstellt, wenn die Inference erfolgreich war. Weitere Beispiele dafür, wie Sie mit dem Vorhersagen treffen können AWS CLI, finden Sie unter Vorhersagen mit dem machen AWS CLI in der SageMaker SDK Python-Dokumentation.

Der Multimodell-Endpunkt lädt Zielmodelle nach Bedarf dynamisch. Sie können dies beobachten, wenn Sie das MMEBeispiel-Notizbuch ausführen, während es zufällige Aufrufe gegen mehrere Zielmodelle durchläuft, die hinter einem einzigen Endpunkt gehostet werden. Die erste Anfrage für ein bestimmtes Modell dauert länger, da das Modell von Amazon Simple Storage Service (Amazon S3) heruntergeladen und in den Speicher geladen werden muss. Dies wird als Kaltstart bezeichnet und ist bei Multimodell-Endpunkten zu erwarten. Damit soll die Handhabung im Hinblick auf ein besseres Preis-/Leistungsverhältnis für den Kunden optimiert werden. Nachfolgende Aufrufe werden schneller beendet, da nach dem Laden des Modells kein zusätzlicher Overhead vorhanden ist.

Anmerkung

Bei GPU gesicherten Instances weist der HTTP Antwortcode mit 507 aus dem GPU Container auf einen Mangel an Arbeitsspeicher oder anderen Ressourcen hin. Dies führt dazu, dass nicht genutzte Modelle aus dem Container entladen werden, um häufiger verwendete Modelle zu laden.

Anfragen bei Fehlern erneut versuchen ModelNotReadyException

Wenn Sie invoke_endpoint zum ersten Mal aufrufen, um ein Modell zu erhalten, wird dieses von Amazon Simple Storage Service heruntergeladen und in den Inference-Container geladen. Daher dauert es länger, bis der erste Anruf abgearbeitet wird. Nachfolgende Aufrufe desselben Modells werden schneller abgearbeitet, da das Modell bereits geladen ist.

SageMaker gibt invoke_endpoint innerhalb von 60 Sekunden eine Antwort auf einen Anruf zurück. Manche Modelle sind zu groß, um sie innerhalb von 60 Sekunden herunterzuladen. Wenn das Modell nicht vor Ablauf der Zeitüberschreitung nach 60 Sekunden geladen wird, wird die Anfrage nach invoke_endpoint mit dem Fehlercode ModelNotReadyException zurückgegeben, und das Modell wird bis zu 360 Sekunden lang weiter heruntergeladen und in den Inference-Container geladen. Wenn Sie einen ModelNotReadyException Fehlercode auf eine invoke_endpoint Anfrage erhalten, versuchen Sie es erneut. Standardmäßig werden die invoke_endpoint Wiederholungsanforderungen AWS SDKs für Python (Boto 3) (mit Legacy-Wiederholungsmodus) und Java wiederholt, die zu Fehlern führen. ModelNotReadyException Sie können die Wiederholungsstrategie so konfigurieren, dass die Anfrage bis zu 360 Sekunden lang wiederholt wird. Wenn Sie davon ausgehen, dass das Herunterladen und Laden Ihres Modells in den Container länger als 60 Sekunden dauert, setzen Sie das SDK Socket-Timeout auf 70 Sekunden. Weitere Informationen zur Konfiguration der Wiederholungsstrategie für AWS SDK for Python (Boto3) finden Sie unter Konfigurieren eines Wiederholungsmodus. Der folgende Code zeigt ein Beispiel, bei dem die Wiederholungsstrategie so konfiguriert wird, dass Aufrufe für invoke_endpoint bis zu 180 Sekunden lang wiederholt werden.

import boto3 from botocore.config import Config # This example retry strategy sets the retry attempts to 2. # With this setting, the request can attempt to download and/or load the model # for upto 180 seconds: 1 orginal request (60 seconds) + 2 retries (120 seconds) config = Config( read_timeout=70, retries={ 'max_attempts': 2 # This value can be adjusted to 5 to go up to the 360s max timeout } ) runtime_sagemaker_client = boto3.client('sagemaker-runtime', config=config)