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.
Stateful-Sitzungen mit Amazon-Modellen SageMaker
Wenn Sie Anfragen an einen SageMaker Amazon-Inferenzendpunkt senden, können Sie wählen, ob die Anfragen an eine statusbehaftete Sitzung weitergeleitet werden sollen. Während einer Stateful-Sitzung senden Sie mehrere Inferenzanfragen an dieselbe ML-Instance, und die Instance erleichtert die Sitzung.
Wenn Sie einen Inferenzendpunkt aufrufen, SageMaker leitet Amazon Ihre Anfrage normalerweise an eine beliebige ML-Instance unter den mehreren Instances weiter, die der Endpunkt hostet. Dieses Routing-Verhalten trägt dazu bei, die Latenz zu minimieren, indem Ihr Inferenzdatenverkehr gleichmäßig verteilt wird. Ein Ergebnis des Routing-Verhaltens ist jedoch, dass Sie nicht vorhersagen können, welche Instance Ihre Anfrage bearbeiten wird.
Diese Unvorhersehbarkeit stellt eine Einschränkung dar, wenn Sie beabsichtigen, Ihre Anfrage an ein Stateful-Modell zu senden. Ein Stateful-Modell hat einen Container, der die Kontextdaten zwischenspeichert, die es aus Inferenzanforderungen erhält. Da die Daten zwischengespeichert werden, können Sie mit dem Container interagieren, indem Sie mehrere Anfragen senden, und Sie müssen nicht bei jeder Anfrage den vollständigen Kontext der Interaktion angeben. Stattdessen stützt sich das Modell auf die zwischengespeicherten Kontextdaten, um seine Prognose zu untermauern.
Zustandsmodelle sind ideal, wenn die Kontextdaten für die Interaktion sehr umfangreich sind, z. B. wenn sie Folgendes beinhalten:
-
Große Textdateien
-
Lange Chat-Historien
-
Multimediadaten (Bilder, Video und Audio) für multimodale Modelle
In diesen Fällen wird die Netzwerklatenz Ihrer Anfragen verlangsamt und die Reaktionsfähigkeit Ihrer Anwendung verringert, wenn Sie bei jeder Aufforderung den vollständigen Kontext übergeben.
Bevor Ihr Inferenzendpunkt eine Stateful-Sitzung unterstützen kann, muss er ein Stateful-Modell hosten. Die Implementierung des Stateful-Modells gehört Ihnen. Amazon SageMaker ermöglicht es Ihnen, Ihre Anfragen an eine statusbehaftete Sitzung weiterzuleiten, bietet jedoch keine statusbehafteten Modelle, die Sie bereitstellen und verwenden können.
Ein Beispiel für ein Notizbuch und einen Modellcontainer, der demonstriert, wie statusbehaftete Interaktionen implementiert werden, finden Sie unter. Beispiel für eine Implementierung
Informationen zur Implementierung von Stateful-Modellen mit TorchServe finden Sie unter Stateful Inference im Repository.
Wie funktionieren Stateful-Sitzungen
Während einer Stateful-Sitzung interagiert Ihre Anwendung auf folgende Weise mit Ihrem Modellcontainer.
Um eine Stateful-Sitzung zu starten
-
Um eine Sitzung mit einem Stateful-Modell zu starten, das von Amazon gehostet wird SageMaker, sendet Ihr Kunde eine
InvokeEndpoint
Anfrage mit dem SageMaker API. Für denSessionID
Anforderungsparameter teilt der Client mit, dass eine neue Sitzung gestartet werden SageMaker soll, indem er den WertNEW_SESSION
angibt. In der Payload der Anfrage weist der Client den Container außerdem an, eine neue Sitzung zu starten. Die Syntax dieser Anweisung hängt von Ihrer Container-Implementierung ab. Das hängt davon ab, wie Ihr Container-Code die Nutzlast der Anfrage verarbeitet.Das folgende Beispiel startet eine neue Sitzung mithilfe von SDK for Python (Boto3):
import boto3 import sagemaker import json payload = { "requestType":"NEW_SESSION" } payload = json.dumps(payload) smr = boto3.client( 'sagemaker-runtime', region_name="
region_name
", endpoint_url="endoint_url
") create_session_response = smr.invoke_endpoint( EndpointName="endpoint_name
", Body=payload
, ContentType="application/json", SessionId="NEW_SESSION") -
Ihr Modellcontainer bearbeitet die Anfrage Ihres Kunden, indem er eine neue Sitzung startet. Für die Sitzung werden die Daten, die der Client sendet, in der Payload der Anfrage zwischengespeichert. Außerdem erstellt es eine Sitzungs-ID und legt einen Time-to-Live (TTL) -Zeitstempel fest. Dieser Zeitstempel gibt an, wann die Sitzung abläuft. Der Container muss Amazon die Sitzungs-ID und den Zeitstempel zur Verfügung stellen, SageMaker indem er den folgenden HTTP Header in der Antwort festlegt:
X-Amzn-SageMaker-Session-Id:
session_id
; Expires=yyyy
-mm
-ddThh
:mm
:ssZ
-
In der Antwort auf die
InvokeEndpoint
Anfrage SageMaker gibt Amazon die Sitzungs-ID und den TTL Zeitstempel für denNewSessionID
Antwortparameter an.Das folgende Beispiel extrahiert die Sitzungs-ID aus der
invoke_endpoint
Antwort:session_id = create_session_response['ResponseMetadata']['HTTPHeaders']['x-amzn-sagemaker-new-session-id'].split(';')[0]
Um eine statusbehaftete Sitzung fortzusetzen
-
Um dieselbe Sitzung für eine nachfolgende Inferenzanforderung zu verwenden, sendet Ihr Client eine weitere
InvokeEndpoint
Anfrage. Für denSessionID
Anforderungsparameter gibt er die ID der Sitzung an. Mit dieser ID wird SageMaker die Anfrage an dieselbe ML-Instanz weitergeleitet, in der die Sitzung gestartet wurde. Da Ihr Container die ursprüngliche Nutzlast der Anfrage bereits zwischengespeichert hat, muss Ihr Client nicht dieselben Kontextdaten wie in der ursprünglichen Anfrage übergeben.Im folgenden Beispiel wird eine Sitzung fortgesetzt, indem die Sitzungs-ID mit dem
SessionId
Anforderungsparameter übergeben wird:smr.invoke_endpoint( EndpointName="
endpoint_name
", Body=payload
, ContentType="application/json", SessionId=session_id)
Um eine Stateful-Sitzung zu schließen
-
Um eine Sitzung zu schließen, sendet Ihr Client eine letzte
InvokeEndpoint
Anfrage. Für denSessionID
Anforderungsparameter gibt der Client die ID der Sitzung an. In der Nutzlast im Anfragetext gibt Ihr Client an, dass der Container die Sitzung schließen soll. Die Syntax dieser Anweisung variiert je nach Ihrer Container-Implementierung.Das folgende Beispiel schließt eine Sitzung:
payload = { "requestType":"CLOSE" } payload = json.dumps(payload) closeSessionResponse = smr.invoke_endpoint( EndpointName="
endpoint_name
", Body=payload, ContentType="application/json", SessionId=session_id) -
Wenn die Sitzung geschlossen wird, gibt der Container die Sitzungs-ID an zurück, SageMaker indem er in der Antwort den folgenden HTTP Header festlegt:
X-Amzn-SageMaker-Closed-Session-Id:
session_id
-
SageMaker Stellt in der Antwort auf die
InvokeEndpoint
Anfrage des Clients die Sitzungs-ID für denClosedSessionId
Antwortparameter bereit.Im folgenden Beispiel wird die ID der geschlossenen Sitzung aus der
invoke_endpoint
Antwort extrahiert:closed_session_id = closeSessionResponse['ResponseMetadata']['HTTPHeaders']['x-amzn-sagemaker-closed-session-id'].split(';')[0]
Beispiel für eine Implementierung
Das folgende Beispiel-Notizbuch zeigt, wie der Container für ein Stateful-Modell implementiert wird. Es zeigt auch, wie eine Client-Anwendung eine Stateful-Sitzung startet, fortsetzt und schließt.
LLaVAZustandsbehaftete Inferenz mit SageMaker
Das Notizbuch verwendet das Modell LLaVALarge Language and Vision Assistant