Usar el código de inferencia propio con la transformación por lotes - 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.

Usar el código de inferencia propio con la transformación por lotes

En esta sección se explica cómo Amazon SageMaker interactúa con un contenedor de Docker que ejecuta tu propio código de inferencia para la transformación por lotes. Utilice esta información para escribir el código de inferencia y crear una imagen de Docker.

¿Cómo se SageMaker ejecuta la imagen de inferencia

Para configurar un contenedor para que se inicie como un archivo ejecutable, utilice una instrucción ENTRYPOINT en un Dockerfile. Tenga en cuenta lo siguiente:

  • En el caso de las transformaciones por lotes, SageMaker invoca el modelo en su nombre. SageMaker ejecuta el contenedor como:

    docker run image serve

    La entrada a las transformaciones por lotes debe tener un formato que se pueda dividir en archivos más pequeños para procesarlos en paralelo. Estos formatos incluyen CSV, JSON, JSON Lines, TFRecord y RecordIO.

    SageMaker anula CMD las sentencias predeterminadas de un contenedor especificando el serve argumento después del nombre de la imagen. El argumento serve anula los argumentos que proporciona con el comando CMD en el Dockerfile.

     

  • Le recomendamos que utilice la forma exec de la instrucción ENTRYPOINT:

    ENTRYPOINT ["executable", "param1", "param2"]

    Por ejemplo:

    ENTRYPOINT ["python", "k_means_inference.py"]

     

  • SageMaker establece las variables de entorno especificadas en CreateModely CreateTransformJobsobre el contenedor. Además, se rellenan las siguientes variables de entorno:

    • SAGEMAKER_BATCH se establece en true cuando se ejecuta el contenedor en transformaciones por lotes.

    • SAGEMAKER_MAX_PAYLOAD_IN_MB se establece en la carga de mayor tamaño que se envía al contenedor a través de HTTP.

    • SAGEMAKER_BATCH_STRATEGY se establece en SINGLE_RECORD cuando el contenedor se envía un solo registro para cada llamada a invocaciones y MULTI_RECORD cuando el contenedor obtiene tantos registros como los que caben en la carga.

    • SAGEMAKER_MAX_CONCURRENT_TRANSFORMS se establece en el número máximo de solicitudes de /invocations que pueden abrirse de forma simultánea.

    nota

    Las últimas tres variables de entorno proceden de la llamada a la API realizadas por el usuario. Si el usuario no establece valores para ellos, no se transmiten. En ese caso, se utilizan los valores predeterminados o los valores solicitados por el algoritmo (en respuesta a los /execution-parameters).

  • Si tiene previsto utilizar los dispositivos GPU para inferencias de modelos (especificando instancias de computación de ML basadas en GPU en su solicitud CreateTransformJob), asegúrese de que los contenedores son compatibles con nvidia-docker. No cree un paquete con controladores de NVIDIA con la imagen. Para obtener más información sobre nvidia-docker, consulte NVIDIA/nvidia-docker.

     

  • No puede utilizar el inicializador init como punto de entrada en los contenedores de SageMaker, ya que se confunde con los argumentos de servicio y capacitación.

¿Cómo se SageMaker cargan los artefactos de su modelo?

En una solicitud CreateModel, las definiciones de contenedor incluyen el parámetro ModelDataUrl, que identifica la ubicación de Amazon S3 en la que se almacenan los artefactos de modelo. Cuando se realizan inferencias, se utiliza esta información para determinar desde dónde copiar los artefactos del modelo. SageMaker Copia los artefactos en el directorio /opt/ml/model en el contenedor de Docker para que los utilice el código de interferencia.

El parámetro ModelDataUrl debe apuntar a un archivo tar.gz. De lo contrario, SageMaker no puede descargar el archivo. Si entrena un modelo SageMaker, guarda los artefactos como un único archivo tar comprimido en Amazon S3. Si entrena un modelo en otro marco, necesitará almacenar los artefactos del modelo en Amazon S3 como un archivo tar comprimido. SageMaker descomprime este archivo tar y lo guarda en el /opt/ml/model directorio del contenedor antes de que comience el trabajo de transformación por lotes.

Cómo los contenedores ofrecen solicitudes

Los contenedores deben implementar un servidor web que responda a las invocaciones y solicitudes de ping en el puerto 8080. En el caso de las transformaciones por lotes, tiene la opción de configurar algoritmos para implementar solicitudes de parámetros de ejecución a fin de proporcionar una configuración dinámica en tiempo de ejecución. SageMaker SageMakerutiliza los siguientes puntos finales:

  • ping—Se utiliza para comprobar periódicamente el estado del contenedor. SageMaker espera un código de 200 estado HTTP y un cuerpo vacío para que una solicitud de ping se ejecute correctamente antes de enviar una solicitud de invocación. Podría utilizar una solicitud de ping para cargar un modelo en la memoria con objeto de generar inferencias al enviar las solicitudes de invocaciones.

  • (Opcional)execution-parameters: permite que el algoritmo proporcione los parámetros de ajuste óptimos para un trabajo durante el tiempo de ejecución. El algoritmo elige los valores MaxConcurrentTransforms, BatchStrategy y MaxPayloadInMB apropiados para el trabajo en función de la memoria y las CPU disponibles para un contenedor.

Antes de llamar a la solicitud de invocaciones, SageMaker intenta invocar la solicitud de parámetros de ejecución. Al crear un trabajo de transformación por lotes, puede proporcionar valores para los parámetros MaxConcurrentTransforms yBatchStrategy. MaxPayloadInMB SageMaker determina los valores de estos parámetros utilizando este orden de prioridad:

  1. Los valores de los parámetros que se proporcionan al crear la solicitud CreateTransformJob.

  2. Los valores que devuelve el contenedor del modelo al SageMaker invocar el punto final de los parámetros de ejecución>

  3. Los valores predeterminados de los parámetros, que se muestran en la siguiente tabla.

    Parámetro Valores predeterminados
    MaxConcurrentTransforms

    1

    BatchStrategy

    MULTI_RECORD

    MaxPayloadInMB

    6

La respuesta para una solicitud execution-parameters GET es un objeto JSON con claves para los parámetros MaxConcurrentTransforms, BatchStrategy y MaxPayloadInMB. Este es un ejemplo de respuesta válida:

{ “MaxConcurrentTransforms”: 8, “BatchStrategy": "MULTI_RECORD", "MaxPayloadInMB": 6 }

Cómo debe responder su contenedor a las solicitudes de inferencia

Para obtener inferencias, Amazon SageMaker envía una solicitud POST al contenedor de inferencias. El cuerpo de la solicitud POST contiene datos de Amazon S3. Amazon SageMaker pasa la solicitud al contenedor y devuelve el resultado de la inferencia del contenedor, guardando los datos de la respuesta en Amazon S3.

Para recibir solicitudes de inferencia, el contenedor debe tener un servidor web que realice la escucha en el puerto 8080 y que acepte las solicitudes POST al punto de enlace /invocations. El tiempo de espera de la solicitud de inferencia y el número máximo de reintentos se pueden configurar a través de ModelClientConfig.

Cómo debe responder su contenedor a las solicitudes de comprobación de estado (ping)

El requisito más sencillo en el contenedor es responder con un código de estado HTTP 200 y un cuerpo vacío. Esto indica SageMaker que el contenedor está listo para aceptar solicitudes de inferencia en el /invocations punto final.

Puesto que la barrera mínima es que el contenedor devuelva un código 200 estático, un desarrollador del contenedor puede usar esta funcionalidad para realizar más comprobaciones. El tiempo de espera de la solicitud en los intentos de /ping es de 2 segundos.