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ómo ejecuta Amazon SageMaker AI su imagen de entrenamiento
Puede usar un script de punto de entrada personalizado para automatizar la infraestructura para entrenar en un entorno de producción. Si pasa el script de punto de entrada a tu contenedor de Docker, también puede ejecutarlo como un script independiente sin tener que volver a crear las imágenes. SageMaker procesa la imagen de entrenamiento mediante un script de punto de entrada de un contenedor de Docker.
En esta sección se muestra cómo usar un punto de entrada personalizado sin usar el kit de heramientas de entrenamiento. Si desea utilizar un punto de entrada personalizado pero no está familiarizado con la configuración manual de un contenedor de Docker, le recomendamos que utilice en su lugar la biblioteca de SageMaker Training Toolkit
De forma predeterminada, SageMaker AI busca un script llamado train dentro del contenedor. También puede proporcionar manualmente su propio punto de entrada personalizado mediante los parámetros ContainerArguments y ContainerEntrypoint de la API AlgorithmSpecification.
Dispone de las dos opciones siguientes para configurar manualmente el contenedor de Docker para ejecutar la imagen.
-
Use la API CreateTrainingJob y un contenedor de Docker que contenga una instrucción de punto de entrada.
-
Use la API
CreateTrainingJoby transfiera su script de entrenamiento desde fuera de su contenedor de Docker.
Si pasa el script de entrenamiento desde fuera del contenedor de Docker, no tendrá que volver a crear el contenedor de Docker al actualizar el script. También puede usar varios scripts diferentes para que se ejecuten en el mismo contenedor.
El script de punto de entrada debe contener un código de entrenamiento para la imagen. Si utiliza el parámetro source_dir opcional dentro de un estimadorsource_dir. Si no usa source_dir, puede especificar el punto de entrada mediante el parámetro entry_point. Para ver un ejemplo de un script de punto de entrada personalizado que contiene un estimador, consulte Bring Your Own Model with SageMaker AI Script Mode
El entrenamiento de modelos de SageMaker AI admite buckets de directorio de S3 Express One Zone de alto rendimiento como ubicación de entrada de datos para el modo de archivo, el modo de archivo rápido y el modo de canalización. También puede utilizar buckets de directorio de S3 Express One Zone para almacenar su salida de entrenamiento. Para usar S3 Express One Zone, proporcione el URI de un bucket de directorio de S3 Express One Zone en lugar de un bucket de uso general de Amazon S3. Solo puede cifrar los datos de salida de SageMaker AI en buckets de directorio con cifrado del servidor con claves administradas de Amazon S3 (SSE-S3). No se admite el cifrado del servidor con claves de AWS KMS (SSE-KMS) para almacenar los datos de salida de SageMaker AI en los buckets de directorio. Para obtener más información, consulte S3 Express One Zone.
Ejecute un trabajo de entrenamiento con un script de punto de entrada agrupado en el contenedor de Docker
SageMaker AI puede ejecutar un script de punto de entrada incluido en el contenedor de Docker.
-
De forma predeterminada, Amazon SageMaker AI ejecuta el siguiente contenedor.
docker runimagetrain -
SageMaker AI anula cualquier instrucción CMD
predeterminada en un contenedor especificando el argumento traindespués del nombre de imagen. En su contenedor de Dockerfile, use el formularioexecsiguiente de la instrucciónENTRYPOINT.ENTRYPOINT ["executable", "param1", "param2", ...]En el siguiente ejemplo se muestra cómo especificar una instrucción de punto de entrada de Python llamada
k-means-algorithm.py.ENTRYPOINT ["python", "k-means-algorithm.py"]La forma
execde la instrucciónENTRYPOINTinicia el archivo ejecutable directamente, no como un elemento secundario de/bin/sh. Eso le permite recibir señales comoSIGTERMySIGKILLdesde las API de SageMaker. Las siguientes condiciones se aplican al usar las API de SageMaker.-
La API
CreateTrainingJobdispone de una condición de detención que dirige SageMaker AI para detener el entrenamiento de modelos después de un tiempo específico. -
A continuación se muestra la API
StopTrainingJob. Esta API emite el equivalente dedocker stop, con un comando de 2 minutos de tiempo de espera que detiene correctamente el contenedor especificado.docker stop -t 120El comando intenta detener el contenedor en ejecución enviando una señal
SIGTERM. Tras el tiempo de espera de 2 minutos, la API envía losSIGKILLy detiene por la fuerza los contenedores. Si el contenedor gestionaSIGTERMcorrectamente y sale antes de los 120 segundos de haberla recibido, no se envía ningúnSIGKILL.
Si desea obtener acceso a los artefactos de modelo intermedios después de que SageMaker AI detenga la entrenamiento, agregue código para administrar los artefactos de guardado en su controlador
SIGTERM. -
-
Si tiene previsto utilizar dispositivos de GPU para la capacitación de modelos, asegúrese de que sus contenedores sean compatibles con
nvidia-docker. Incluya solo el kit de herramientas de CUDA en los contenedores; no agrupe los controladores de NVIDIA con la imagen. Para obtener más información sobrenvidia-docker, consulte NVIDIA/nvidia-docker. -
No puede utilizar el inicializador
tinicomo su script de punto de entrada en los contenedores de SageMaker AI, ya que se confunde con los argumentostrainyserve. -
/opt/mly todos los subdirectorios están reservados por la entrenamiento de SageMaker. Al crear la imagen de Docker de su algoritmo, asegúrese de no colocar ningún dato que requiera su algoritmo en este directorio. Porque si lo hace, es posible que los datos ya no estén visibles durante el entrenamiento.
Para agrupar sus scripts de intérprete de comandosl o Python dentro de su imagen de Docker, o para proporcionar el script en un bucket de Amazon S3 o mediante la AWS Command Line Interface (CLI), continúe con la siguiente sección.
Agrupe su script de intérprete de comandos en un contenedor de Docker
Si quiere incluir un script de intérprete de comandos personalizado dentro de su imagen de Docker, siga estos pasos.
-
Copie el script de intérprete de comandos de su directorio de trabajo dentro de su contenedor de Docker. El siguiente fragmento de código copia un script de punto de entrada personalizado
custom_entrypoint.shdel directorio de trabajo actual a un contenedor de Docker ubicado enmydir. En el siguiente ejemplo se presupone que la imagen de Docker base tiene Python instalado.FROM<base-docker-image>:<tag># Copy custom entrypoint from current dir to /mydir on container COPY./custom_entrypoint.sh /mydir/ -
Cree e inserte un contenedor de Docker en el registro de Amazon Elastic Container Registry (Amazon ECR) siguiendo las instrucciones que se indican en Inserción de una imagen de Dockerr en la Guía del usuario de Amazon ECR.
-
Ejecute el siguiente comando AWS CLI para iniciar el trabajo de entrenamiento.
aws --region<your-region>sagemaker create-training-job \ --training-job-name<your-training-job-name>\ --role-arn<your-execution-role-arn>\ --algorithm-specification '{ \ "TrainingInputMode": "File", \ "TrainingImage": "<your-ecr-image>", \ "ContainerEntrypoint": ["/bin/sh"], \ "ContainerArguments": ["/mydir/custom_entrypoint.sh"]}' \ --output-data-config '{"S3OutputPath": "s3://custom-entrypoint-output-bucket/"}' \ --resource-config '{"VolumeSizeInGB":10,"InstanceCount":1,"InstanceType":"ml.m5.2xlarge"}' \ --stopping-condition '{"MaxRuntimeInSeconds":180}'
Agrupe su script de Python en un contenedor de Docker
Para agrupar un script de Python personalizado dentro de su imagen de Docker, siga estos pasos.
-
Copie el script de Python de su directorio de trabajo dentro de su contenedor de Docker. El siguiente fragmento de código copia un script de punto de entrada personalizado
custom_entrypoint.pydel directorio de trabajo actual a un contenedor de Docker ubicado enmydir.FROM<base-docker-image>:<tag># Copy custom entrypoint from current dir to /mydir on container COPY./custom_entrypoint.py /mydir/ -
Ejecute el siguiente comando AWS CLI para iniciar el trabajo de entrenamiento.
--algorithm-specification '{ \ "TrainingInputMode": "File", \ "TrainingImage": "<your-ecr-image>", \ "ContainerEntrypoint": ["python"], \ "ContainerArguments": ["/mydir/custom_entrypoint.py"]}' \
Ejecute un trabajo de entrenamiento con un script de punto de entrada fuera del contenedor de Docker
Puede usar su propio contenedor de Docker para el entrenamiento y pasar un script de punto de entrada desde fuera del contenedor de Docker. Estructurar el script de punto de entrada fuera del contenedor tiene algunas ventajas. Si actualiza el script de punto de entrada, no es necesario volver a crear el contenedor de Docker. También puede usar varios scripts diferentes para que se ejecuten en el mismo contenedor.
Especifique la ubicación del script de entrenamiento mediante los parámetros ContainerEntrypoint y ContainerArguments de la API AlgorithmSpecification. Estos puntos de entrada y argumentos se comportan de la misma manera que los puntos de entrada y los argumentos de Docker. Los valores de estos parámetros anulan los correspondientes ENTRYPOINT o CMD proporcionados como parte del contenedor de Docker.
Cuando pasa su script de punto de entrada personalizado a su contenedor de entrenamiento de Docker, las entradas que proporcione determinan el comportamiento del contenedor.
-
Por ejemplo, si solo proporciona
ContainerEntrypoint, la sintaxis de la solicitud mediante la API CreateTrainingJob es la siguiente.{ "AlgorithmSpecification": { "ContainerEntrypoint": ["string"], ... } }A continuación, el backend de entrenamiento de SageMaker ejecuta su punto de entrada personalizado de la siguiente manera.
docker run --entrypoint<ContainerEntrypoint>imagenota
Si se proporciona
ContainerEntrypoint, el backend de entrenamiento de Sagemaker ejecuta la imagen con el punto de entrada indicado y anula el valor predeterminado de la imagenENTRYPOINT. -
Si solo proporciona
ContainerArguments, SageMaker AI asume que el contenedor de Docker contiene un script de punto de entrada. La sintaxis de la solicitud mediante la APICreateTrainingJobes la siguiente.{ "AlgorithmSpecification": { "ContainerArguments": ["arg1", "arg2"], ... } }El backend de entrenamiento de SageMaker ejecuta su punto de entrada personalizado de la siguiente manera.
docker run image<ContainerArguments> -
Si proporciona
ContainerEntrypointyContainerArguments, la sintaxis de la solicitud mediante la APICreateTrainingJobes la siguiente.{ "AlgorithmSpecification": { "ContainerEntrypoint": ["string"], "ContainerArguments": ["arg1", "arg2"], ... } }El backend de entrenamiento de SageMaker ejecuta su punto de entrada personalizado de la siguiente manera.
docker run --entrypoint<ContainerEntrypoint>image<ContainerArguments>
Puede usar cualquier fuente de InputDataConfig compatible en la API CreateTrainingJob para proporcionar un script de punto de entrada para ejecutar su imagen de entrenamiento.
Proporcionar el script de punto de entrada en un bucket de Amazon S3
Para proporcionar un script de punto de entrada personalizado mediante un bucket de S3, utilice el S3DataSource parámetro de la API DataSource para especificar la ubicación del script. Si utiliza el parámetro S3DataSource, se requiere lo siguiente.
-
El InputMode debe ser del tipo
File. -
El S3DataDistributionType debe ser
FullyReplicated.
En el siguiente ejemplo, se coloca un script denominado custom_entrypoint.sh en una ruta a un bucket de S3 s3://<bucket-name>/<bucket
prefix>/custom_entrypoint.sh.
#!/bin/bash echo "Running custom_entrypoint.sh" echo "Hello you have provided the following arguments: " "$@"
A continuación, debe establecer la configuración del canal de datos de entrada para ejecutar un trabajo de entrenamiento. Hágalo utilizando AWS CLI directamente o con un archivo JSON.
Configurar el canal de datos de entrada utilizando AWS CLI con un archivo JSON
Para configurar el canal de datos de entrada con un archivo JSON, utilice AWS CLI como se muestra en la siguiente estructura de código. Asegúrese de que todos los campos siguientes utilicen la sintaxis de solicitud definida en la API CreateTrainingJob.
// run-my-training-job.json { "AlgorithmSpecification": { "ContainerEntrypoint": ["/bin/sh"], "ContainerArguments": ["/opt/ml/input/data/<your_channel_name>/custom_entrypoint.sh"], ... }, "InputDataConfig": [ { "ChannelName": "<your_channel_name>", "DataSource": { "S3DataSource": { "S3DataDistributionType": "FullyReplicated", "S3DataType": "S3Prefix", "S3Uri": "s3://<bucket-name>/<bucket_prefix>" } }, "InputMode": "File", }, ...] }
A continuación, ejecute el comando AWS CLI para iniciar el trabajo de entrenamiento desde el archivo JSON de la siguiente manera.
aws sagemaker create-training-job --cli-input-json file://run-my-training-job.json
Configurar el canal de datos de entrada utilizando AWS CLI directamente
Para configurar el canal de datos de entrada con un archivo JSON, utilice la siguiente estructura de código de AWS CLI.
aws --region<your-region>sagemaker create-training-job \ --training-job-name<your-training-job-name>\ --role-arn<your-execution-role-arn>\ --algorithm-specification '{ \ "TrainingInputMode": "File", \ "TrainingImage": "<your-ecr-image>", \ "ContainerEntrypoint": ["/bin/sh"], \ "ContainerArguments": ["/opt/ml/input/data/<your_channel_name>/custom_entrypoint.sh"]}' \ --input-data-config '[{ \ "ChannelName":"<your_channel_name>", \ "DataSource":{ \ "S3DataSource":{ \ "S3DataType":"S3Prefix", \ "S3Uri":"s3://<bucket-name>/<bucket_prefix>", \ "S3DataDistributionType":"FullyReplicated"}}}]' \ --output-data-config '{"S3OutputPath": "s3://custom-entrypoint-output-bucket/"}' \ --resource-config '{"VolumeSizeInGB":10,"InstanceCount":1,"InstanceType":"ml.m5.2xlarge"}' \ --stopping-condition '{"MaxRuntimeInSeconds":180}'