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 final multimodelo, utilice el comando from the SageMaker Runtime invoke_endpointdel mismo modo que invocaría un punto final de un solo modelo, con un solo 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 InvokeEndpoint solicitud SageMaker Runtime X-Amzn-SageMaker-Target-Model se admite como un nuevo encabezado que toma la ruta relativa del modelo especificado para la invocación. El SageMaker sistema construye la ruta absoluta del modelo combinando el prefijo que se proporciona como parte de la CreateModel API llamada con la ruta relativa del modelo.

Los siguientes procedimientos son los mismos para los puntos finales multimodelo CPU y los GPU respaldados por varios modelos.

AWS SDK for Python (Boto 3)

El siguiente ejemplo de solicitud de predicción usa el AWS SDKpara Python (Boto 3) del cuaderno de ejemplo.

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 CSV solicitud con dos filas utilizando el 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 hacer predicciones con el AWS CLI, consulte Hacer predicciones con el AWS CLI en la SDK documentación de SageMaker Python.

El punto de conexión multimodelo carga dinámicamente los modelos de destino según sea necesario. Puede observar esto al ejecutar el cuaderno de MME muestra, ya que realiza invocaciones aleatorias en varios modelos de destino alojados en un único punto final. 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 GPU respaldadas, el código de HTTP respuesta del GPU contenedor con 507 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.

Reintente las solicitudes en caso de errores 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 en un invoke_endpoint plazo 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, las invoke_endpoint solicitudes de reintento AWS SDKs para Python (Boto 3) (con el modo de reintento heredado) y Java que producen 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 SDK socket 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)