Sesiones impactantes con modelos de Amazon SageMaker - Amazon SageMaker

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Sesiones impactantes con modelos de Amazon SageMaker

Cuando envía solicitudes a un punto final de SageMaker inferencia de Amazon, puede optar por enrutarlas a una sesión con estado. Durante una sesión con estado, envía varias solicitudes de inferencia a la misma instancia de ML y la instancia facilita la sesión.

Normalmente, cuando invocas un punto final de inferencia, Amazon SageMaker dirige tu solicitud a cualquier instancia de ML entre las múltiples instancias que aloja el punto final. Este comportamiento de enrutamiento ayuda a minimizar la latencia al distribuir uniformemente el tráfico de inferencia. Sin embargo, uno de los resultados del comportamiento de enrutamiento es que no puedes predecir qué instancia atenderá tu solicitud.

Esta imprevisibilidad es una limitación si pretendes enviar tu solicitud a un modelo con estado. Un modelo con estado tiene un contenedor que almacena en caché los datos de contexto que recibe de las solicitudes de inferencia. Como los datos se almacenan en caché, puedes interactuar con el contenedor enviando varias solicitudes y, con cada solicitud, no necesitas incluir todo el contexto de la interacción. En su lugar, el modelo se basa en los datos de contexto almacenados en caché para fundamentar su predicción.

Los modelos con estado son ideales cuando los datos de contexto de la interacción son muy grandes, por ejemplo, cuando incluyen lo siguiente:

  • Archivos de texto de gran tamaño

  • Largos historiales de chat

  • Datos multimedia (imágenes, vídeo y audio) para modelos multimodales

En estos casos, si pasa el contexto completo en cada solicitud, la latencia de red de las solicitudes se ralentiza y la capacidad de respuesta de la aplicación disminuye.

Para que el punto final de inferencia pueda admitir una sesión con estado, debe alojar un modelo con estado. Usted es el propietario de la implementación del modelo con estado. Amazon te SageMaker permite dirigir tus solicitudes a una sesión con estado, pero no proporciona modelos con estado que puedas implementar y usar.

Para ver un ejemplo de cuaderno y contenedor de modelos que demuestre cómo se implementan las interacciones con estado, consulte. Despliegue de ejemplo

Para obtener información sobre cómo implementar modelos con estado TorchServe, consulte Stateful Inference en el repositorio. TorchServe GitHub

Cómo funcionan las sesiones con estado

Durante una sesión con estado, la aplicación interactúa con el contenedor del modelo de las siguientes maneras.

Para iniciar una sesión con estado
  1. Para iniciar una sesión con un modelo con estado hospedado por Amazon SageMaker, tu cliente envía una InvokeEndpointsolicitud con. SageMaker API Para el parámetro de SessionID solicitud, el cliente indica SageMaker que debe iniciar una nueva sesión especificando el valorNEW_SESSION. En la carga útil de la solicitud, el cliente también le indica al contenedor que inicie una nueva sesión. La sintaxis de esta declaración varía en función de la implementación del contenedor. Depende de cómo gestione el código de contenedor la carga útil de la solicitud.

    El siguiente ejemplo inicia una nueva sesión con Python (Boto3): SDK

    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. Su contenedor modelo gestiona la solicitud de su cliente iniciando una nueva sesión. Para la sesión, almacena en caché los datos que el cliente envía en la carga útil de la solicitud. También crea un identificador de sesión y establece una marca temporal de tiempo de vida (TTL). Esta marca de tiempo indica cuándo caduca la sesión. El contenedor debe proporcionar el identificador de sesión y la marca de tiempo a Amazon SageMaker configurando el siguiente HTTP encabezado en la respuesta:

    X-Amzn-SageMaker-Session-Id: session_id; Expires=yyyy-mm-ddThh:mm:ssZ
  3. En la respuesta a la InvokeEndpoint solicitud, Amazon SageMaker proporciona el identificador de sesión y la TTL marca de tiempo del parámetro de NewSessionID respuesta.

    El siguiente ejemplo extrae el ID de sesión de la invoke_endpoint respuesta:

    session_id = create_session_response['ResponseMetadata']['HTTPHeaders']['x-amzn-sagemaker-new-session-id'].split(';')[0]
Para continuar con una sesión con estado
  • Para usar la misma sesión para una solicitud de inferencia posterior, el cliente envía otra InvokeEndpoint solicitud. Para el parámetro de SessionID solicitud, especifica el ID de la sesión. Con este ID, SageMaker enruta la solicitud a la misma instancia de ML en la que se inició la sesión. Como tu contenedor ya ha almacenado en caché la carga útil de la solicitud original, tu cliente no necesita pasar los mismos datos de contexto que estaban en la solicitud original.

    En el siguiente ejemplo, se continúa una sesión pasando el ID de sesión con el parámetro de SessionId solicitud:

    smr.invoke_endpoint( EndpointName="endpoint_name", Body=payload, ContentType="application/json", SessionId=session_id)
Para cerrar una sesión con estado
  1. Para cerrar una sesión, el cliente envía una InvokeEndpoint solicitud final. Para el parámetro de SessionID solicitud, el cliente proporciona el ID de la sesión. En la carga útil del cuerpo de la solicitud, tu cliente indica que el contenedor debe cerrar la sesión. La sintaxis de esta declaración varía en función de la implementación del contenedor.

    El siguiente ejemplo cierra una sesión:

    payload = { "requestType":"CLOSE" } payload = json.dumps(payload) closeSessionResponse = smr.invoke_endpoint( EndpointName="endpoint_name", Body=payload, ContentType="application/json", SessionId=session_id)
  2. Cuando cierra la sesión, el contenedor devuelve el identificador de sesión SageMaker al establecer el siguiente HTTP encabezado en la respuesta:

    X-Amzn-SageMaker-Closed-Session-Id: session_id
  3. En la respuesta a la InvokeEndpoint solicitud del cliente, SageMaker proporciona el ID de sesión para el parámetro de ClosedSessionId respuesta.

    El siguiente ejemplo extrae el ID de sesión cerrada de la invoke_endpoint respuesta:

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

Despliegue de ejemplo

El siguiente cuaderno de ejemplo muestra cómo implementar el contenedor para un modelo con estado. También muestra cómo una aplicación cliente inicia, continúa y cierra una sesión con estado.

LLaVAinferencia con estado con SageMaker

El cuaderno utiliza el LLaVA modelo Large Language and Vision Assistant, que acepta imágenes y mensajes de texto. El cuaderno carga una imagen al modelo y, a continuación, hace preguntas sobre la imagen sin tener que volver a enviar la imagen cada vez que se le solicite. El contenedor del modelo usa el TorchServe marco. Almacena en caché los datos de la imagen en la GPU memoria.