Invocar un punto de conexión multimodelo - 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.

Invocar un punto de conexión multimodelo

Para invocar un punto de enlace multimodelo, utilice invoke_endpoint desde el tiempo de ejecución de SageMaker del mismo modo que invocaría un punto de conexión de modelo único, con un cambio. Transfiera un nuevo parámetro de TargetModel que especifique cuál de los modelos en el punto de conexión establecer como destino. La solicitud InvokeEndpoint en tiempo de ejecución de SageMaker admite X-Amzn-SageMaker-Target-Model como nuevo encabezado que toma la ruta relativa del modelo especificado para la invocación. El sistema de SageMaker construye la ruta absoluta del modelo combinando el prefijo que se proporciona como parte de la llamada a la API CreateModel con la ruta relativa del modelo.

Los siguientes procedimientos son los mismos para los puntos de conexión multimodelo respaldados por CPU y GPU.

AWS SDK for Python (Boto 3)

La solicitud de predicción de ejemplo siguiente utiliza el SDK AWS para Python (Boto 3) en el cuaderno de muestras.

response = runtime_sagemaker_client.invoke_endpoint( EndpointName = "<ENDPOINT_NAME>", ContentType = "text/csv", TargetModel = "<MODEL_FILENAME>.tar.gz", Body = body)
AWS CLI

En el siguiente ejemplo, se muestra cómo realizar una solicitud CVS con dos filas mediante AWS Command Line Interface (AWS CLI):

aws sagemaker-runtime invoke-endpoint \ --endpoint-name "<ENDPOINT_NAME>" \ --body "1.0,2.0,5.0"$'\n'"2.0,3.0,4.0" \ --content-type "text/csv" \ --target-model "<MODEL_NAME>.tar.gz" output_file.txt

Si la inferencia se realizó correctamente, se crea un output_file.txt con información sobre sus solicitudes de inferencia. Para obtener más ejemplos sobre cómo realizar predicciones con AWS CLI, consulte Hacer predicciones con AWS CLI en la documentación del SDK de SageMaker Python.

El punto de conexión multimodelo carga dinámicamente los modelos de destino según sea necesario. Esto se puede observar al ejecutar el Cuaderno de muestras de MME, ya que itera por invocaciones aleatorias en diferentes modelos de destino que están alojados detrás del mismo punto de conexión. La primera solicitud contra un modelo específico tarda más tiempo porque el modelo se tiene que descargar de Amazon Simple Storage Service (Amazon S3) y cargar en la memoria. Esto se denomina arranque en frío y se prevé que en los puntos de conexión multimodelo se optimice para obtener una mejor relación precio-rendimiento para los clientes. Las llamadas posteriores terminan más rápido porque no hay sobrecarga adicional una vez que el modelo se haya cargado.

nota

En el caso de las instancias respaldadas por GPU, el código de respuesta HTTP con 507 del contenedor de la GPU indica una falta de memoria o de otros recursos. Esto hace que los modelos no utilizados se descarguen del contenedor para cargar los modelos que se utilizan con más frecuencia.

Reintentar solicitudes en caso de errores de ModelNotReadyException

La primera vez que llame a invoke_endpoint para solicitar un modelo, este se descargará de Amazon Simple Storage Service y se cargará en el contenedor de inferencias. Esto hace que la primera llamada tarde más en devolverse. Las llamadas posteriores al mismo modelo finalizan más rápido, porque el modelo ya está cargado.

SageMaker devuelve la respuesta a una llamada a invoke_endpoint en un plazo máximo de 60 segundos. Algunos modelos son demasiado grandes para descargarlos en 60 segundos. Si el modelo no termina de cargarse antes del límite de tiempo de espera de 60 segundos, la solicitud a invoke_endpoint devuelve el código de error ModelNotReadyException y el modelo continúa descargándose y cargándose en el contenedor de inferencia durante un máximo de 360 segundos. Si recibe un código de error ModelNotReadyException para una solicitud invoke_endpoint, vuelva a intentarlo. De forma predeterminada, los SDK AWS para Python (Boto 3) (que utilizan el modo de reintento heredado) y Java reintentatn solicitudes invoke_endpoint que generan errores ModelNotReadyException. Puede configurar la estrategia de reintento para seguir reintentando la solicitud durante un máximo de 360 segundos. Si espera que su modelo tarde más de 60 segundos en descargarse y cargarse en el contenedor, establezca el tiempo de espera del socket del SDK en 70 segundos. Para obtener más información sobre cómo configurar la estrategia de reintento para AWS SDK for Python (Boto3), consulte Configurar un modo de reintento. El código siguiente muestra un ejemplo que configura la estrategia de reintento para reintentar las llamadas a invoke_endpoint durante un máximo de 180 segundos.

import boto3 from botocore.config import Config # This example retry strategy sets the retry attempts to 2. # With this setting, the request can attempt to download and/or load the model # for upto 180 seconds: 1 orginal request (60 seconds) + 2 retries (120 seconds) config = Config( read_timeout=70, retries={ 'max_attempts': 2 # This value can be adjusted to 5 to go up to the 360s max timeout } ) runtime_sagemaker_client = boto3.client('sagemaker-runtime', config=config)