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.
Temas
¿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
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 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 establece las variables de entorno especificadas en
CreateModel
yCreateTransformJob
sobre el contenedor. 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 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 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. El algoritmo elige los valoresMaxConcurrentTransforms
,BatchStrategy
yMaxPayloadInMB
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:
-
Los valores de los parámetros que se proporcionan al crear la solicitud
CreateTransformJob
. -
Los valores que devuelve el contenedor del modelo al SageMaker invocar 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 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.