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.
Funzionamento delle sessioni stateful
Durante una sessione stateful, l’applicazione interagisce con il container del modello nei seguenti modi.
Per avviare una sessione stateful
-
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 diSessionIDrichiesta, il client dice all' SageMaker IA di iniziare una nuova sessione specificando il valore.NEW_SESSIONNel 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") -
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 -
Nella risposta alla
InvokeEndpointrichiesta, Amazon SageMaker AI fornisce l'ID di sessione e il timestamp TTL per ilNewSessionIDparametro 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 richiestaSessionID, 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
-
Per chiudere una sessione, il cliente invia una richiesta
InvokeEndpointfinale. Per il parametro di richiestaSessionID, 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) -
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 -
Nella risposta alla
InvokeEndpointrichiesta del client, SageMaker AI fornisce l'ID di sessione per il parametro diClosedSessionIdrisposta.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