Stateful-Sitzungen mit Amazon-Modellen SageMaker - 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.

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. TorchServe GitHub

Wie funktionieren Stateful-Sitzungen

Während einer Stateful-Sitzung interagiert Ihre Anwendung auf folgende Weise mit Ihrem Modellcontainer.

Um eine Stateful-Sitzung zu starten
  1. Um eine Sitzung mit einem Stateful-Modell zu starten, das von Amazon gehostet wird SageMaker, sendet Ihr Kunde eine InvokeEndpointAnfrage mit dem SageMaker API. Für den SessionID Anforderungsparameter teilt der Client mit, dass eine neue Sitzung gestartet werden SageMaker soll, indem er den Wert NEW_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")
  2. 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
  3. In der Antwort auf die InvokeEndpoint Anfrage SageMaker gibt Amazon die Sitzungs-ID und den TTL Zeitstempel für den NewSessionID 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 den SessionID 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
  1. Um eine Sitzung zu schließen, sendet Ihr Client eine letzte InvokeEndpoint Anfrage. Für den SessionID 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)
  2. 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
  3. SageMaker Stellt in der Antwort auf die InvokeEndpoint Anfrage des Clients die Sitzungs-ID für den ClosedSessionId 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, das Bilder und Textanfragen akzeptiert. Das Notizbuch lädt ein Bild in das Modell hoch und stellt dann Fragen zu dem Bild, ohne dass das Bild für jede Anfrage erneut gesendet werden muss. Der Modellcontainer verwendet das TorchServe Framework. Es speichert die Bilddaten im GPU Speicher.