Sessioni stateful con modelli di 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 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 nel repository GitHub di TorchServe.

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 client invia una richiesta InvokeEndpoint con l’API SageMaker. Per il parametro di richiesta SessionID, il client indica a SageMaker AI di avviare 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 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
  3. Nella risposta alla richiesta InvokeEndpoint, Amazon SageMaker AI fornisce l’ID di sessione e il timestamp TTL per il parametro di risposta NewSessionID.

    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 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
  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 container restituisce l’ID di sessione a SageMaker AI impostando la seguente intestazione HTTP nella risposta:

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

    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, 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 container del modello utilizza il framework TorchServe. Memorizza i dati dell’immagine nella memoria della GPU.