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 di Amazon SageMaker AI
Quando invii richieste a un endpoint di inferenza di Amazon SageMaker AI, puoi scegliere di instradare le richieste a una sessione stateful. Durante una sessione stateful, puoi inviare più richieste di inferenza alla stessa istanza di ML e l’istanza semplifica la sessione.
Normalmente, quando invochi un endpoint di inferenza, Amazon SageMaker AI instrada la tua richiesta a qualsiasi istanza ML tra quelle 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 consente di instradare le richieste a una sessione stateful, ma non fornisce modelli stateful da 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 TorchServe, consulta Stateful Inference
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 client invia una richiesta
InvokeEndpointcon l’API SageMaker. Per il parametro di richiestaSessionID, il client indica a SageMaker AI di avviare una nuova sessione specificando il valoreNEW_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") -
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 container 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 richiesta
InvokeEndpoint, Amazon SageMaker AI fornisce l’ID di sessione e il timestamp TTL per il parametro di rispostaNewSessionID.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 instrada 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 container restituisce l’ID di sessione a SageMaker AI impostando la seguente intestazione HTTP nella risposta:
X-Amzn-SageMaker-Closed-Session-Id:session_id -
Nella risposta alla richiesta
InvokeEndpointdel client, SageMaker AI fornisce l’ID di sessione per il parametro di rispostaClosedSessionId.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 stateful LLaVA con SageMaker AI
Il notebook utilizza il modello LLaVA: Large Language and Vision Assistant