View a markdown version of this page

Sessioni stateful con modelli Amazon SageMaker AI - Amazon SageMaker AI

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Sessioni stateful con modelli Amazon SageMaker AI

Quando invii richieste a un endpoint di inferenza Amazon SageMaker AI, puoi scegliere di indirizzare le richieste a una sessione con stato. Durante una sessione stateful, puoi inviare più richieste di inferenza alla stessa istanza di ML e l’istanza semplifica la sessione.

Normalmente, quando richiami un endpoint di inferenza, Amazon SageMaker AI indirizza la tua richiesta a qualsiasi istanza ML tra le diverse istanze ospitate dall'endpoint. Questo comportamento di instradamento aiuta a ridurre al minimo la latenza distribuendo uniformemente il traffico di inferenza. Tuttavia, un risultato del comportamento di instradamento è che non è possibile prevedere quale istanza soddisferà la richiesta.

Questa imprevedibilità è una limitazione se intendi inviare la richiesta a un modello stateful. Un modello stateful ha un container che memorizza nella cache i dati contestuali che riceve dalle richieste di inferenza. Poiché i dati vengono memorizzati nella cache, è possibile interagire con il container inviando più richieste e, con ciascuna richiesta, non è necessario includere l’intero contesto dell’interazione. Invece, il modello attinge ai dati contestuali memorizzati nella cache per guidare la previsione.

I modelli stateful sono ideali quando i dati di contesto per l’interazione sono molto grandi, ad esempio quando includono quanto segue:

  • File di testo di grandi dimensioni

  • Lunghe cronologie di chat

  • Dati multimediali (immagini, video e audio) per modelli multimodali

In questi casi, se passi il contesto completo a ogni prompt, la latenza di rete delle richieste rallenta e la reattività dell’applicazione diminuisce.

Prima che l’endpoint di inferenza possa supportare una sessione stateful, deve ospitare un modello stateful. L’implementazione del modello stateful è di tua proprietà. Amazon SageMaker AI ti consente di indirizzare le tue richieste a una sessione con stato, ma non fornisce modelli statici che puoi distribuire e utilizzare.

Per un esempio di container di modello e notebook che illustra come vengono implementate le interazioni stateful, consulta Implementazione di esempio.

Per informazioni sull'implementazione di modelli stateful con, consulta Stateful Inference nel TorchServe repository. TorchServe GitHub

Funzionamento delle sessioni stateful

Durante una sessione stateful, l’applicazione interagisce con il container del modello nei seguenti modi.

Per avviare una sessione stateful
  1. Per avviare una sessione con un modello stateful ospitato da Amazon SageMaker AI, il tuo client invia una InvokeEndpointrichiesta con l' SageMaker API. Per il parametro di SessionID richiesta, il client dice all' SageMaker IA di iniziare una nuova sessione specificando il valore. NEW_SESSION Nel payload della richiesta, il client indica anche al container di avviare una nuova sessione. La sintassi di questa dichiarazione varia in base all’implementazione del container. Dipende dal modo in cui il codice del container gestisce il payload della richiesta.

    L’esempio seguente avvia una nuova sessione utilizzando l’SDK per 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. Il container del modello gestisce la richiesta del cliente avviando una nuova sessione. Per la sessione, memorizza nella cache i dati che il client invia nel payload della richiesta. Inoltre, crea un ID di sessione e imposta un timestamp TTL (Time To Live). Questo timestamp indica quando scade la sessione. Il contenitore deve fornire l'ID di sessione e il timestamp ad Amazon SageMaker AI impostando la seguente intestazione HTTP nella risposta:

    X-Amzn-SageMaker-Session-Id: session_id; Expires=yyyy-mm-ddThh:mm:ssZ
  3. Nella risposta alla InvokeEndpoint richiesta, Amazon SageMaker AI fornisce l'ID di sessione e il timestamp TTL per il NewSessionID parametro di risposta.

    L’esempio seguente estrae l’ID di sessione dalla risposta invoke_endpoint:

    session_id = create_session_response['ResponseMetadata']['HTTPHeaders']['x-amzn-sagemaker-new-session-id'].split(';')[0]
Per continuare una sessione stateful
  • Per utilizzare la stessa sessione per una successiva richiesta di inferenza, il client invia un’altra richiesta InvokeEndpoint. Per il parametro di richiesta SessionID, specifica l’ID di sessione. Con questo ID, SageMaker AI indirizza la richiesta alla stessa istanza ML in cui è stata avviata la sessione. Poiché il container ha già memorizzato nella cache il payload della richiesta originale, il client non deve passare gli stessi dati di contesto presenti nella richiesta originale.

    L’esempio seguente continua una sessione passando l’ID di sessione con il parametro di richiesta SessionId:

    smr.invoke_endpoint( EndpointName="endpoint_name", Body=payload, ContentType="application/json", SessionId=session_id)
Per chiudere una sessione stateful
  1. Per chiudere una sessione, il cliente invia una richiesta InvokeEndpoint finale. Per il parametro di richiesta SessionID, il client fornisce l’ID di sessione. Nel payload nel corpo della richiesta, il client dichiara che il container deve chiudere la sessione. La sintassi di questa dichiarazione varia in base all’implementazione del container.

    L’esempio seguente chiude una sessione:

    payload = { "requestType":"CLOSE" } payload = json.dumps(payload) closeSessionResponse = smr.invoke_endpoint( EndpointName="endpoint_name", Body=payload, ContentType="application/json", SessionId=session_id)
  2. Quando chiude la sessione, il contenitore restituisce l'ID di sessione ad SageMaker AI impostando la seguente intestazione HTTP nella risposta:

    X-Amzn-SageMaker-Closed-Session-Id: session_id
  3. Nella risposta alla InvokeEndpoint richiesta del client, SageMaker AI fornisce l'ID di sessione per il parametro di ClosedSessionId risposta.

    L’esempio seguente estrae l’ID di sessione chiusa dalla risposta invoke_endpoint:

    closed_session_id = closeSessionResponse['ResponseMetadata']['HTTPHeaders']['x-amzn-sagemaker-closed-session-id'].split(';')[0]

Implementazione di esempio

Il seguente esempio di notebook mostra come implementare il container per un modello stateful. Illustra inoltre come un’applicazione client avvia, continua e chiude una sessione stateful.

Inferenza statica di Lava con AI SageMaker

Il notebook utilizza il modello LLaVA: Large Language and Vision Assistant, che accetta immagini e prompt testuali. Il notebook carica un’immagine sul modello, quindi pone domande sull’immagine senza doverla inviare nuovamente per ogni richiesta. Il contenitore del modello utilizza il framework. TorchServe Memorizza i dati dell’immagine nella memoria della GPU.