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 su 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.
Temas
Cómo ejecuta la SageMaker IA su 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, la SageMaker IA invoca el modelo en su nombre. SageMaker La IA ejecuta el contenedor de la siguiente manera:
docker run
image
serveLa 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
CMD
las sentencias predeterminadas de un contenedor especificando elserve
argumento después del nombre de la imagen. El argumentoserve
anula los argumentos que proporciona con el comandoCMD
en el Dockerfile. -
Le recomendamos que utilice la forma
exec
de la instrucciónENTRYPOINT
:ENTRYPOINT ["executable", "param1", "param2"]
Por ejemplo:
ENTRYPOINT ["python", "k_means_inference.py"]
-
SageMaker La IA establece las variables de entorno especificadas en el contenedor
CreateModel
yCreateTransformJob
sobre él. Además, se rellenan las siguientes variables de entorno:-
SAGEMAKER_BATCH
se establece entrue
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 enSINGLE_RECORD
cuando el contenedor se envía un solo registro para cada llamada a invocaciones yMULTI_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 puedes usar el
init
inicializador como punto de entrada en los contenedores de SageMaker IA porque se confunde con el tren y sirve argumentos.
Cómo carga la SageMaker IA los artefactos de tus modelos
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 la SageMaker IA para realizar 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, la SageMaker IA no podrá descargar el archivo. Si entrena un modelo en SageMaker IA, 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 /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 a la IA una configuración de tiempo de ejecución dinámica. SageMaker SageMaker La IA utiliza los siguientes puntos finales:
-
ping
—Se utiliza para comprobar periódicamente el estado del contenedor. SageMaker La IA espera un código de200
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. En función de la memoria y de la CPUs disponibilidad de un contenedor, el algoritmo elige losMaxPayloadInMB
valores y valores adecuadosMaxConcurrentTransforms
para el trabajo.BatchStrategy
Antes de llamar a la solicitud de invocación, la SageMaker IA 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 La IA determina los valores de estos parámetros siguiendo este orden de prioridad:
-
Los valores de los parámetros que se proporcionan al crear la solicitud
CreateTransformJob
. -
Los valores que devuelve el contenedor del modelo cuando la SageMaker IA invoca el punto final de los parámetros de ejecución>
-
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 AI envía una solicitud POST al contenedor de inferencias. El cuerpo de la solicitud POST contiene datos de Amazon S3. Amazon SageMaker AI 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 le indica a SageMaker AI que el contenedor está preparado 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.