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 gestiona Amazon SageMaker AI tu 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 su contenedor de Docker, también puede ejecutarlo como un script independiente sin tener que volver a crear las imágenes. SageMaker La IA procesa tu imagen de entrenamiento mediante un script de punto de entrada de un contenedor Docker.
En esta sección se muestra cómo usar un punto de entrada personalizado sin usar el kit de heramientas de entrenamiento. Si quieres usar un punto de entrada personalizado pero no estás familiarizado con la configuración manual de un contenedor de Docker, te recomendamos que utilices en su lugar la biblioteca del kit de herramientas de formación. SageMaker
De forma predeterminada, SageMaker AI busca un script llamado train
dentro de tu contenedor. También puedes proporcionar manualmente tu propio punto de entrada personalizado mediante los ContainerEntrypoint
parámetros ContainerArguments
y de la AlgorithmSpecificationAPI.
Dispone de las dos opciones siguientes para configurar manualmente el contenedor de Docker para ejecutar la imagen.
-
Usa la CreateTrainingJobAPI y un contenedor de Docker que contenga una instrucción de punto de entrada.
-
Use la API
CreateTrainingJob
y 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
SageMaker El entrenamiento de modelos de IA admite depósitos de directorio S3 Express One Zone de alto rendimiento como ubicación de entrada de datos para el modo archivo, el modo rápido y el modo canalizado. 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 IA en depósitos de directorio con cifrado del lado del servidor con claves administradas de Amazon S3 (SSE-S3). Actualmente, no se admite el cifrado con AWS KMS claves del lado del servidor (SSE-KMS) para almacenar los datos de salida de la IA en depósitos de directorio. SageMaker 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 La IA 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 run
image
train -
SageMaker AI anula cualquier sentencia CMD
predeterminada en un contenedor especificando el train
argumento después del nombre de la imagen. En su contenedor de Dockerfile, use el formularioexec
siguiente 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
exec
de la instrucciónENTRYPOINT
inicia el archivo ejecutable directamente, no como un elemento secundario de/bin/sh
. Esto le permite recibir señales comoSIGTERM
ySIGKILL
desde. SageMaker APIs Se aplican las siguientes condiciones al utilizar el SageMaker APIs.-
La
CreateTrainingJob
API tiene una condición de parada que indica a la SageMaker IA que detenga el entrenamiento del modelo 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 120
El 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 losSIGKILL
y detiene por la fuerza los contenedores. Si el contenedor gestionaSIGTERM
correctamente y sale antes de los 120 segundos de haberla recibido, no se envía ningúnSIGKILL
.
Si quieres acceder a los artefactos del modelo intermedio después de que la SageMaker IA detenga el entrenamiento, añade código para guardar los artefactos en tu
SIGTERM
controlador. -
-
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 puedes usar el
tini
inicializador como script de punto de entrada en los contenedores de SageMaker IA porque se confunde con los argumentos y.train
serve
-
/opt/ml
y todos los subdirectorios están reservados por entrenamiento. 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 shell 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.sh
del 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 AWS CLI comando para iniciar el trabajo de formación.
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.py
del 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 AWS CLI comando siguiente para iniciar el trabajo de formación.
--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 guion de entrenamiento mediante los ContainerArguments
parámetros ContainerEntrypoint
y de la AlgorithmSpecificationAPI. 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 lo proporciona
ContainerEntrypoint
, la sintaxis de la solicitud mediante la CreateTrainingJob API es la siguiente.{ "AlgorithmSpecification": { "ContainerEntrypoint": ["
string
"], ... } }Luego, el backend SageMaker de entrenamiento ejecuta tu punto de entrada personalizado de la siguiente manera.
docker run --entrypoint
<ContainerEntrypoint>
imagenota
Si
ContainerEntrypoint
se proporciona, el backend de SageMaker entrenamiento ejecuta la imagen con el punto de entrada indicado y anula el valor predeterminado de la imagen.ENTRYPOINT
-
Si solo lo proporciona
ContainerArguments
, SageMaker AI asume que el contenedor de Docker contiene un script de punto de entrada. La sintaxis de la solicitud mediante la APICreateTrainingJob
es la siguiente.{ "AlgorithmSpecification": { "ContainerArguments": ["
arg1
", "arg2
"], ... } }El backend SageMaker de entrenamiento ejecuta tu punto de entrada personalizado de la siguiente manera.
docker run image
<ContainerArguments>
-
Si proporciona
ContainerEntrypoint
yContainerArguments
, la sintaxis de la solicitud mediante la APICreateTrainingJob
es la siguiente.{ "AlgorithmSpecification": { "ContainerEntrypoint": ["
string
"], "ContainerArguments": ["arg1
", "arg2
"], ... } }El backend SageMaker de entrenamiento ejecuta tu 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 DataSourceAPI para especificar la ubicación del script. Si utiliza el parámetro S3DataSource
, se requiere lo siguiente.
-
InputModeDebe ser de ese tipo.
File
-
El S3 DataDistributionType debe serlo
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. Puede hacerlo AWS CLI directamente o con un archivo JSON.
Configure el canal de datos de entrada utilizando AWS CLI un archivo JSON
Para configurar el canal de datos de entrada con un archivo JSON, AWS CLI utilícelo 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 CreateTrainingJobAPI.
// 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 AWS CLI comando para iniciar el trabajo de formación desde el archivo JSON de la siguiente manera.
aws sagemaker create-training-job --cli-input-json file:
//run-my-training-job.json
Configure el canal de datos de entrada utilizando AWS CLI directamente
Para configurar el canal de datos de entrada sin un archivo JSON, utilice la siguiente estructura AWS CLI de código.
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
}'