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.
Código de inferencia personalizado con la transformación por lotes
En esta sección se explica cómo Amazon SageMaker AI interactúa con un contenedor de Docker que ejecuta código de inferencia propio para transformación por lotes. Utilice esta información para escribir el código de inferencia y crear una imagen de Docker.
Temas
Cómo ejecuta SageMaker AI 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:
-
SageMaker AI invoca el modelo en su nombre para las transformaciones por lotes. SageMaker AI ejecuta el contenedor de la siguiente manera:
docker runimageserveLa 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 AI anula las instrucciones
CMDpredeterminadas en un contenedor especificando el argumentoservedespués del nombre de la imagen. El argumentoserveanula los argumentos que proporciona con el comandoCMDen el Dockerfile. -
Le recomendamos que utilice la forma
execde la instrucciónENTRYPOINT:ENTRYPOINT ["executable", "param1", "param2"]Por ejemplo:
ENTRYPOINT ["python", "k_means_inference.py"] -
SageMaker AI establece las variables de entorno especificadas en
CreateModelyCreateTransformJoben el contenedor. Además, se rellenan las siguientes variables de entorno:-
SAGEMAKER_BATCHse establece entruecuando se ejecuta el contenedor en transformaciones por lotes. -
SAGEMAKER_MAX_PAYLOAD_IN_MBse establece en la carga de mayor tamaño que se envía al contenedor a través de HTTP. -
SAGEMAKER_BATCH_STRATEGYse establece enSINGLE_RECORDcuando el contenedor se envía un solo registro para cada llamada a invocaciones yMULTI_RECORDcuando el contenedor obtiene tantos registros como los que caben en la carga. -
SAGEMAKER_MAX_CONCURRENT_TRANSFORMSse establece en el número máximo de solicitudes de/invocationsque 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
initcomo punto de entrada en los contenedores de SageMaker AI, ya que se confunde con los argumentos de servicio y entrenamiento.
Cómo carga SageMaker AI los artefactos del 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 utiliza SageMaker AI para ejecutar inferencias, utiliza esta información para determinar desde dónde copiar los artefactos del modelo. 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 AI no puede descargar el archivo. Si capacita un modelo en SageMaker AI, este 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 AI descomprime este archivo tar y lo guarda en el directorio /opt/ml/model 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. Para las transformaciones por lotes, tiene la opción de definir algoritmos para implementar solicitudes execution-parameters que proporcionen una configuración dinámica del tiempo de ejecución a SageMaker AI. SageMaker AI utiliza los siguientes puntos de conexión:
-
ping: se utiliza para comprobar periódicamente el estado del contenedor. SageMaker AI espera un código de estado200HTTP y un cuerpo vacío para que una solicitud de ping se realice correctamente antes de enviar una solicitud de invocaciones. 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 valoresMaxConcurrentTransforms,BatchStrategyyMaxPayloadInMBapropiados 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 AI intenta invocar la solicitud execution-parameters. Al crear un trabajo de transformación por lotes, puede proporcionar valores para los parámetros MaxConcurrentTransforms, BatchStrategy y MaxPayloadInMB. SageMaker AI determina los valores de estos parámetros utilizando este orden de prioridad:
-
Los valores de los parámetros que se proporcionan al crear la solicitud
CreateTransformJob. -
Los valores que devuelve el contenedor de modelos cuando SageMaker AI invoca el punto de conexión de execution-parameters.
-
Los valores predeterminados de los parámetros, que se muestran en la siguiente tabla.
Parámetro Valores predeterminados MaxConcurrentTransforms1
BatchStrategyMULTI_RECORDMaxPayloadInMB6
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 AI envía una solicitud POST al contenedor de inferencia. El cuerpo de la solicitud POST contiene datos de Amazon S3. Amazon SageMaker AI pasa la solicitud al contenedor, devuelve el resultado de la inferencia del contenedor y guarda los datos de la respuesta a 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 a SageMaker AI que el contenedor está listo para aceptar solicitudes de inferencia en el punto de conexión /invocations.
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.