Saltar al contenido

¿Cómo soluciono los problemas con mi punto de enlace de inferencia sin servidor de Amazon SageMaker AI?

7 minutos de lectura
0

Recibo un error cuando uso un punto de enlace de inferencia sin servidor de Amazon SageMaker AI para mi carga de trabajo.

Resolución

Soluciona el problema según el mensaje de error que recibas.

El tamaño del contenedor de imágenes es demasiado grande para el punto de enlace de inferencia sin servidor

Los puntos de enlace de inferencia sin servidor admiten Uso de tu propio contenedor (BYOC), de forma similar a los puntos de enlace en tiempo real. Como AWS Lambda respalda este tipo específico de inferencia, el tamaño del contenedor debe ser inferior a 10 GB para este tipo específico de inferencia.

Si tu contenedor supera el límite de 10 GB, recibirás un mensaje de error similar al siguiente:

«Image size 11271073144 is greater than the supported size 10737418240»

Para solucionar el problema, toma una de estas medidas:

  • Elimina los paquetes no utilizados y minimiza la cantidad de capas del archivo de Docker para reducir el tamaño de la imagen y optimizar el contenedor de Docker.
  • Utiliza una imagen base más pequeña y crea una nueva configuración de punto de enlace. Especifica el tipo de instancia deseado y otros parámetros relevantes para alojar el punto de enlace en tiempo real.
  • Haz la transición de un punto de enlace sin servidor a un punto de enlace en tiempo real. Crea una nueva configuración de punto de enlace para especificar el tipo de instancia y otros parámetros para alojar el punto de enlace en tiempo real. A continuación, actualiza el punto de enlace existente con la nueva configuración.
  1. Para crear una nueva configuración de punto de enlace, utiliza la siguiente plantilla:
    import boto3
    
    client = boto3.client('sagemaker', region_name = 'us-east-1')
    
    endpoint_config_name = 'new-endpoint-config'
    production_variants = [
        {
            'VariantName': 'AllTraffic',
            'ModelName': 'ModelName',
            'InitialInstanceCount': 1,
            'InstanceType': 'ml.m5.xlarge',
            'InitialVariantWeight': 1.0
        }
    ]
    
    create_endpoint_config_response = client.create_endpoint_config(
        EndpointConfigName=endpoint_config_name,
        ProductionVariants=production_variants
    )
    Nota: Sustituye YourVariantName por el nombre de la variante de tu instancia y YourModelName por el nombre de tu modelo. Sustituye 1 por el número de recuento de instancias inicial. Sustituye ml.m5.xlarge por tu tipo de instancia. Sustituye 1.0 por el peso de la variante inicial de la instancia.
  2. Crea un nuevo punto de enlace con la nueva configuración para hacer la transición de un punto de enlace sin servidor a un punto de enlace en tiempo real. O bien, actualiza un punto de enlace sin servidor existente con la nueva configuración.
    Crea un nuevo ejemplo de punto de enlace:
    endpoint_name = 'new-endpoint'
    
    create_endpoint_response = client.create_endpoint(
        EndpointName=endpoint_name,
        EndpointConfigName=endpoint_config_name
    )
    Actualiza un ejemplo de punto de enlace existente:
    endpoint_name = 'my-old-endpoint'
    
    update_endpoint_response = client.update_endpoint(
        EndpointName=endpoint_name,
        EndpointConfigName=endpoint_config_name
    )

Para determinar el tamaño del contenedor, recupera el URI de la imagen de Amazon Elastic Container Registry (ECR). A continuación, ejecuta el siguiente comando de Docker para obtener los detalles de la imagen de Docker:

docker images

Memoria o espacio en disco insuficientes en el punto de enlace de inferencia sin servidor

Los puntos de enlace sin servidor de SageMaker AI tienen una asignación máxima de memoria de 6 GB y una capacidad de almacenamiento efímero en disco de 5 GB.

Si la memoria del punto de enlace sin servidor supera el límite, recibirás un mensaje de error similar al siguiente:

«UnexpectedStatusException: Error hosting endpoint: Failed. Reason: Ping failed due to insufficient memory».

Para resolver el problema, elige una de las siguientes opciones:

  • Ajusta el parámetro MemorySizeInMB.
  • Optimiza la configuración del trabajador.
  • Despliega el punto de enlace como un punto de enlace en tiempo real y proporciona los detalles de la instancia requeridos.

Ajuste del parámetro MemorySizeInMB

  1. Crea una nueva configuración de punto de enlace sin servidor con un mayor tamaño de MemorySizeInMB.
    Ejemplo:
    import boto3
    
    client = boto3.client('sagemaker', region_name='us-east-1')
    
    endpoint_config_name = "new-endpoint-config"
    
    endpoint_config_response = client.create_endpoint_config(
        EndpointConfigName=endpoint_config_name,
        ProductionVariants=[
            {
                "VariantName": YourVariantName,
                "ModelName": YourModelName,
                "ServerlessConfig": {
                    "MemorySizeInMB": NewMemorySize,
                    "MaxConcurrency": 1,
                },
            },
        ],
    )
    Nota: Sustituye YourVariantName por el nombre de tu variante y YourModelName por el nombre de tu modelo. Sustituye NewMemorySize por el límite de tamaño de memoria. El valor máximo que puedes usar es de 6 GB.
  2. Actualiza el punto de enlace sin servidor con la nueva configuración.
    Ejemplo:
    endpoint_name = 'my-old-endpoint'
    
    update_endpoint_response = client.update_endpoint(
        EndpointName=endpoint_name,
        EndpointConfigName=endpoint_config_name
    )

Optimización de la configuración del trabajador

Para evitar un error de memoria, crea solo un trabajador en el contenedor que utilice todos los recursos de CPU disponibles. Este enfoque difiere del de los puntos de enlace en tiempo real, en los que algunos contenedores de SageMaker AI pueden crear un trabajador para cada vCPU.

En el caso de los contenedores prediseñados con el kit de herramientas de inferencia de SageMaker AI, establece SAGEMAKER_MODEL_SERVER_WORKERS en 1 para modificar la creación del modelo para la inferencia.

Ejemplo:

import boto3

client = boto3.client('sagemaker', region_name='us-east-1')

response = client.create_model(
    ModelName='YourModelName',
    Containers=[
    {
        'Image': "YourImage"
        'Mode': 'SingleModel',
        'ModelDataUrl': "YourModelDataURL",
        'Environment': {
            'SAGEMAKER_CONTAINER_LOG_LEVEL': '20',
            'SAGEMAKER_MODEL_SERVER_WORKERS': '1'
        }
    }
    ],
    ExecutionRoleArn=role
)

Nota: Sustituye YourModelName por el nombre de tu modelo, YourImage por el nombre de tu imagen y YourModelDataUrl por la URL de datos de tu modelo.

Despliegue del punto de enlace como un punto de enlace en tiempo real y aprovisionamiento de los detalles de la instancia requeridos

Para obtener información sobre cómo desplegar el punto de enlace como un punto de enlace en tiempo real, consulta «Transición de un punto de enlace sin servidor a un punto de enlace en tiempo real» en este artículo.

Espacio en disco insuficiente

Si tu punto de enlace sin servidor no tiene espacio en disco disponible, es posible que recibas el siguiente mensaje de error:

«OSError: [Errno 28] No space left on device»

Para solucionar este problema, toma las siguientes medidas:

  • Asegúrate de que el tamaño del modelo comprimido no supere el espacio disponible en disco cuando se descomprima. Un archivo se descomprime en hasta tres veces su tamaño comprimido.
  • Utiliza un modelo de artefacto más pequeño y, a continuación, asegúrate de que todos los archivos del archivo .tar sean esenciales para el despliegue.
  • Si la inferencia sin servidor no es posible, despliégala en un punto de enlace en tiempo real para personalizar las especificaciones de la instancia.

Escenarios de arranque en frío en puntos de enlace de inferencia sin servidor

Debido a la naturaleza bajo demanda del aprovisionamiento de recursos y a las limitaciones de la inferencia sin servidor de SageMaker AI, no existe un método definitivo para preparar un punto de enlace de inferencia sin servidor de SageMaker AI. Para obtener más información, consulta Minimización de los arranques en frío.

Para la ProvisionedConcurrency asignada, SageMaker AI mantiene el punto de enlace en un estado activo para responder en milisegundos. Para minimizar los problemas de latencia de arranque en frío, actualiza el punto de enlace con ProvisionedConcurrency. Para obtener más información, consulta Métricas para supervisar Amazon SageMaker AI con Amazon CloudWatch.

Sigue estos pasos:

  1. Crea una nueva configuración de punto de enlace sin servidor con un valor de ProvisionedConcurrency que sea inferior o igual a MaxConcurrency.
    Configuración del ejemplo:
    import boto3
    client = boto3.client('sagemaker', region_name='us-east-1')
    
    endpoint_config_name = "new-endpoint-config"
    
    endpoint_config_response = client.create_endpoint_config(
        EndpointConfigName=endpoint_config_name,
        ProductionVariants=[
            {
                "VariantName": YourVariantName,
                "ModelName": YourModelName,
                "ServerlessConfig": {
                    "MemorySizeInMB": NewMemorySize,
                    "MaxConcurrency": 1,
                    "ProvisionedConcurrency": 1,
                },
            },
        ],
    )
    Nota: Sustituye YourVariantName por el nombre de tu variante y YourModelName por el nombre de tu modelo. Sustituye NewMemorySize por el límite de tamaño de memoria. El valor máximo que puedes usar es de 6 GB.
  2. Actualiza el punto de enlace con la nueva configuración.
    Ejemplo:
    endpoint_name = 'my-serverless-endpoint'
    update_endpoint_response = client.update_endpoint(
        EndpointName=endpoint_name,
        EndpointConfigName=endpoint_config_name
    )

Nota: Se recomienda utilizar el kit de herramientas de evaluación comparativa de inferencias sin servidor de SageMaker AI para determinar la configuración de despliegue más eficiente para tu punto de enlace sin servidor.

Información relacionada

Despliegue de modelos con inferencia sin servidor de Amazon SageMaker AI

OFICIAL DE AWSActualizada hace 7 meses