Crear un punto de conexión de inferencia asíncrono - 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.

Crear un punto de conexión de inferencia asíncrono

Cree un punto final asíncrono de la misma manera que crearía un punto final con los servicios de alojamiento: SageMaker

  • Cree un modelo con. SageMaker CreateModel

  • Crear una configuración del punto de conexión con CreateEndpointConfig.

  • Crear un punto de conexión HTTPS con CreateEndpoint.

Para crear un punto de conexión, primero debe crear un modelo con CreateModel; debe apuntar al artefacto del modelo y a una ruta de registro de Docker (imagen). A continuación, cree una configuración CreateEndpointConfigen la que especifique uno o más modelos que se crearon mediante la CreateModel API para su implementación y los recursos que desea SageMaker aprovisionar. Cree un punto de conexión con CreateEndpoint utilizando la configuración de punto de conexión especificada en la solicitud. Puede actualizar un punto de conexión asíncrono con la API UpdateEndpoint. Envíe y reciba solicitudes de inferencia desde el modelo alojado en el punto de conexión con InvokeEndpointAsync. Puede eliminar sus puntos de conexión con la API DeleteEndpoint.

Para obtener una lista completa de las SageMaker imágenes disponibles, consulte Imágenes disponibles de Deep Learning Containers. Consulte Usar un código de inferencia propio para obtener información sobre cómo crear una imagen de Docker.

Creación de un modelo

En el ejemplo siguiente, se muestra cómo crear un modelo usando AWS SDK for Python (Boto3). Las primeras líneas definen:

  • sagemaker_client: un objeto de SageMaker cliente de bajo nivel que facilita el envío y la recepción de solicitudes a AWS los servicios.

  • sagemaker_role: una variable de cadena con el rol de SageMaker IAM Amazon Resource Name (ARN).

  • aws_region: una variable de cadena con el nombre de su región. AWS

import boto3 # Specify your AWS Region aws_region='<aws_region>' # Create a low-level SageMaker service client. sagemaker_client = boto3.client('sagemaker', region_name=aws_region) # Role to give SageMaker permission to access AWS services. sagemaker_role= "arn:aws:iam::<account>:role/*"

A continuación, especifique la ubicación del modelo prentrenado almacenado en Amazon S3. En este ejemplo, usamos un modelo XGBoost prentrenado llamado demo-xgboost-model.tar.gz. El URI completo de Amazon S3 se almacena en una variable de cadena model_url:

#Create a variable w/ the model S3 URI s3_bucket = '<your-bucket-name>' # Provide the name of your S3 bucket bucket_prefix='saved_models' model_s3_key = f"{bucket_prefix}/demo-xgboost-model.tar.gz" #Specify S3 bucket w/ model model_url = f"s3://{s3_bucket}/{model_s3_key}"

Especifique un contenedor principal. Para el contenedor principal, especifique la imagen de Docker que contiene el código de inferencia, los artefactos (del entrenamiento previo) y un mapa de entorno personalizado que el código de inferencia utiliza al implementar el modelo para las predicciones.

En este ejemplo, especificamos una imagen de contenedor de algoritmo integrado de XGBoost:

from sagemaker import image_uris # Specify an AWS container image. container = image_uris.retrieve(region=aws_region, framework='xgboost', version='0.90-1')

Crea un modelo en Amazon SageMaker conCreateModel. Especifique lo siguiente:

  • ModelName: un nombre para el modelo (en este ejemplo, se almacena como una variable de cadena llamada model_name).

  • ExecutionRoleArn: El nombre del recurso de Amazon (ARN) de la función de IAM que Amazon SageMaker puede asumir para acceder a los artefactos del modelo y a las imágenes de Docker para su implementación en instancias de procesamiento de aprendizaje automático o para trabajos de transformación por lotes.

  • PrimaryContainer: la ubicación de la imagen de Docker principal que contiene el código de inferencia, los artefactos asociados y mapas de entorno personalizados que el código de inferencia utiliza cuando el modelo se implementa para predicciones.

model_name = '<The_name_of_the_model>' #Create model create_model_response = sagemaker_client.create_model( ModelName = model_name, ExecutionRoleArn = sagemaker_role, PrimaryContainer = { 'Image': container, 'ModelDataUrl': model_url, })

Consulte la CreateModeldescripción en la Guía de referencia de la SageMaker API para obtener una lista completa de los parámetros de la API.

Si utilizas un contenedor SageMaker proporcionado, puedes aumentar el tiempo de espera del servidor modelo y el tamaño de la carga útil, pasando de los valores predeterminados a los máximos admitidos por la estructura. Para ello, configura las variables de entorno en este paso. Es posible que no pueda aprovechar el tiempo de espera y los tamaños de carga máximos que admite la inferencia asíncrona si no establece estas variables de forma explícita. El siguiente ejemplo muestra cómo configurar las variables de entorno para un contenedor de inferencias en función de. PyTorch TorchServe

model_name = '<The_name_of_the_model>' #Create model create_model_response = sagemaker_client.create_model( ModelName = model_name, ExecutionRoleArn = sagemaker_role, PrimaryContainer = { 'Image': container, 'ModelDataUrl': model_url, 'Environment': { 'TS_MAX_REQUEST_SIZE': '100000000', 'TS_MAX_RESPONSE_SIZE': '100000000', 'TS_DEFAULT_RESPONSE_TIMEOUT': '1000' }, })

Cuando termine de crear el punto de conexión, debería probar que haya configurado las variables de entorno correctamente; para ello, imprímalas desde su script inference.py. En la siguiente tabla, se enumeran las variables de entorno de varios marcos que puede configurar para cambiar los valores predeterminados.

Marcos Variables de entorno

PyTorch 1.8 (basado en TorchServe)

'TS_MAX_REQUEST_SIZE': '100000000'

'TS_MAX_RESPONSE_SIZE': '100000000'

'TS_DEFAULT_RESPONSE_TIMEOUT': '1000'

PyTorch 1.4 (basado en MMS)

'MMS_MAX_REQUEST_SIZE': '1000000000'

'MMS_MAX_RESPONSE_SIZE': '1000000000'

'MMS_DEFAULT_RESPONSE_TIMEOUT': '900'

HuggingFace Contenedor de inferencias (basado en MMS)

'MMS_MAX_REQUEST_SIZE': '2000000000'

'MMS_MAX_RESPONSE_SIZE': '2000000000'

'MMS_DEFAULT_RESPONSE_TIMEOUT': '900'

Creación de una configuración de punto de conexión

Cuando tenga un modelo, cree una configuración de punto de conexión con CreateEndpointConfig. Los servicios SageMaker de alojamiento de Amazon utilizan esta configuración para implementar modelos. En la configuración, identificas uno o más modelos, creados con CreateModel, para implementar los recursos que deseas que Amazon SageMaker aprovisione. Especifique el objeto AsyncInferenceConfig y proporcione una ubicación de Amazon S3 de salida para OutputConfig. Si lo desea, puede especificar los temas de Amazon SNS a los que enviar notificaciones sobre los resultados de las predicciones. Para obtener más información sobre temas de Amazon SNS, consulte Configuración de Amazon SNS.

En el siguiente ejemplo se muestra cómo crear una configuración del punto de conexión mediante AWS SDK for Python (Boto3):

import datetime from time import gmtime, strftime # Create an endpoint config name. Here we create one based on the date # so it we can search endpoints based on creation time. endpoint_config_name = f"XGBoostEndpointConfig-{strftime('%Y-%m-%d-%H-%M-%S', gmtime())}" # The name of the model that you want to host. This is the name that you specified when creating the model. model_name='<The_name_of_your_model>' create_endpoint_config_response = sagemaker_client.create_endpoint_config( EndpointConfigName=endpoint_config_name, # You will specify this name in a CreateEndpoint request. # List of ProductionVariant objects, one for each model that you want to host at this endpoint. ProductionVariants=[ { "VariantName": "variant1", # The name of the production variant. "ModelName": model_name, "InstanceType": "ml.m5.xlarge", # Specify the compute instance type. "InitialInstanceCount": 1 # Number of instances to launch initially. } ], AsyncInferenceConfig={ "OutputConfig": { # Location to upload response outputs when no location is provided in the request. "S3OutputPath": f"s3://{s3_bucket}/{bucket_prefix}/output" # (Optional) specify Amazon SNS topics "NotificationConfig": { "SuccessTopic": "arn:aws:sns:aws-region:account-id:topic-name", "ErrorTopic": "arn:aws:sns:aws-region:account-id:topic-name", } }, "ClientConfig": { # (Optional) Specify the max number of inflight invocations per instance # If no value is provided, Amazon SageMaker will choose an optimal value for you "MaxConcurrentInvocationsPerInstance": 4 } } ) print(f"Created EndpointConfig: {create_endpoint_config_response['EndpointConfigArn']}")

En el ejemplo mencionado anteriormente, se especifican las siguientes claves para OutputConfig en el campo AsyncInferenceConfig:

  • S3OutputPath: ubicación para cargar los resultados de la respuesta cuando no se proporciona ninguna ubicación en la solicitud.

  • NotificationConfig: (opcional) temas de SNS que le envían notificaciones cuando una solicitud de inferencia se realiza correctamente (SuccessTopic) o cuando hay un error (ErrorTopic).

También puede especificar el siguiente argumento opcional para ClientConfig en el campo AsyncInferenceConfig:

  • MaxConcurrentInvocationsPerInstance: (Opcional) El número máximo de solicitudes simultáneas enviadas por el SageMaker cliente al contenedor de modelos.

Creación de punto de conexión

Una vez que tenga su configuración de modelo y punto de conexión, utilice la API de CreateEndpoint para crear su punto de conexión. El nombre del punto final debe ser único en una AWS región de su AWS cuenta.

Siga estas instrucciones para crear un punto de conexión utilizando la configuración especificada en la solicitud. Amazon SageMaker usa el punto de conexión para aprovisionar recursos e implementar modelos.

# The name of the endpoint.The name must be unique within an AWS Region in your AWS account. endpoint_name = '<endpoint-name>' # The name of the endpoint configuration associated with this endpoint. endpoint_config_name='<endpoint-config-name>' create_endpoint_response = sagemaker_client.create_endpoint( EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name)

Cuando llama a la CreateEndpoint API, Amazon SageMaker Asynchronous Inference envía una notificación de prueba para comprobar que ha configurado un tema de Amazon SNS. Amazon SageMaker Asynchronous Inference también envía notificaciones de prueba después de las llamadas a y. UpdateEndpoint UpdateEndpointWeightsAndCapacities Esto permite SageMaker comprobar que dispone de los permisos necesarios. La notificación puede ignorarse. La notificación de prueba tiene el siguiente formato:

{ "eventVersion":"1.0", "eventSource":"aws:sagemaker", "eventName":"TestNotification" }