

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.

# Contenedores con algoritmos de entrenamiento personalizados
<a name="your-algorithms-training-algo"></a>

En esta sección se explica cómo Amazon SageMaker AI interactúa con un contenedor de Docker que ejecuta tu algoritmo de entrenamiento personalizado. Utilice esta información para escribir el código de entrenamiento y crear una imagen de Docker para los algoritmos de entrenamiento. 

**Topics**
+ [

# Cómo gestiona Amazon SageMaker AI tu imagen de entrenamiento
](your-algorithms-training-algo-dockerfile.md)
+ [

# Cómo proporciona Amazon SageMaker AI la información de formación
](your-algorithms-training-algo-running-container.md)
+ [

# Ejecutar entrenamiento con EFA
](your-algorithms-training-efa.md)
+ [

# Cómo Amazon SageMaker AI señala el éxito y el fracaso de los algoritmos
](your-algorithms-training-signal-success-failure.md)
+ [

# Cómo procesa Amazon SageMaker AI el resultado de la formación
](your-algorithms-training-algo-output.md)

# Cómo gestiona Amazon SageMaker AI tu imagen de entrenamiento
<a name="your-algorithms-training-algo-dockerfile"></a>

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 ](https://github.com/aws/sagemaker-training-toolkit) Para más información sobre cómo utilizar el Training Toolkit, consulte [Adaptación del contenedor de entrenamiento propio](adapt-training-container.md). 

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 [AlgorithmSpecification](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AlgorithmSpecification.html)API. 

Dispone de las dos opciones siguientes para configurar manualmente el contenedor de Docker para ejecutar la imagen.
+ Usa la [CreateTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html)API 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 [estimador](https://sagemaker.readthedocs.io/en/stable/api/training/estimators.html), debería hacer referencia a la ruta relativa de Amazon S3 a la carpeta que contiene el script de punto de entrada. Puede hacer referencia a varios archivos mediante el parámetro `source_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](https://sagemaker-examples.readthedocs.io/en/latest/sagemaker-script-mode/sagemaker-script-mode.html) Own Model with AI Script Mode. SageMaker 

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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-one-zone.html).

## Ejecute un trabajo de entrenamiento con un script de punto de entrada agrupado en el contenedor de Docker
<a name="your-algorithms-training-algo-dockerfile-api-ep-in"></a>

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](https://docs.docker.com/engine/reference/builder/#cmd) predeterminada en un contenedor especificando el `train` argumento después del nombre de la imagen. En su contenedor de Dockerfile, use el formulario `exec` siguiente de la instrucción `ENTRYPOINT`.

  ```
  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ón `ENTRYPOINT` inicia el archivo ejecutable directamente, no como un elemento secundario de `/bin/sh`. Esto le permite recibir señales como `SIGTERM` y `SIGKILL` desde. SageMaker APIs Se aplican las siguientes condiciones al utilizar el SageMaker APIs. 
  + La [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html)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 [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_StopTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_StopTrainingJob.html). Esta API emite el equivalente de `docker 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 los `SIGKILL` y detiene por la fuerza los contenedores. Si el contenedor gestiona `SIGTERM` correctamente y sale antes de los 120 segundos de haberla recibido, no se envía ningún `SIGKILL`. 

  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 sobre `nvidia-docker`, consulte [NVIDIA/nvidia-docker](https://github.com/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
<a name="your-algorithms-training-algo-dockerfile-script-sh"></a>

 Si quiere incluir un script de intérprete de comandos personalizado dentro de su imagen de Docker, siga estos pasos. 

1. 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 en `mydir`. 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/
   ```

1. Cree e inserte un contenedor de Docker en el registro de Amazon Elastic Container Registry ([Amazon ECR](https://docs.aws.amazon.com/AmazonECR/latest/userguide/what-is-ecr.html)) siguiendo las instrucciones que se indican en [Inserción de una imagen de Dockerr](https://docs.aws.amazon.com/AmazonECR/latest/userguide/docker-push-ecr-image.html) en la *Guía del usuario de Amazon ECR*.

1. 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
<a name="your-algorithms-training-algo-dockerfile-script-py"></a>

Para agrupar un script de Python personalizado dentro de su imagen de Docker, siga estos pasos. 

1. 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 en `mydir`.

   ```
   FROM <base-docker-image>:<tag>
   # Copy custom entrypoint from current dir to /mydir on container
   COPY ./custom_entrypoint.py /mydir/
   ```

1. 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
<a name="your-algorithms-training-algo-dockerfile-api-pass-ep"></a>

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 [AlgorithmSpecification](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_AlgorithmSpecification.html)API. 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> image
  ```
**nota**  
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 API `CreateTrainingJob` 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` y `ContainerArguments`, la sintaxis de la solicitud mediante la API `CreateTrainingJob` 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
<a name="your-algorithms-training-algo-dockerfile-script-s3"></a>

 Para proporcionar un script de punto de entrada personalizado mediante un bucket de S3, utilice el `S3DataSource` parámetro de la [DataSource](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataSource.html#sagemaker-Type-DataSource-S3DataSource)API para especificar la ubicación del script. Si utiliza el parámetro `S3DataSource`, se requiere lo siguiente.
+ [InputMode](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#sagemaker-Type-Channel-InputMode)Debe ser de ese tipo. `File`
+ El [S3 DataDistributionType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataSource.html#sagemaker-Type-DataSource-S3DataSource) debe serlo`FullyReplicated`.

En el siguiente ejemplo, se coloca un script denominado custom\$1entrypoint.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
<a name="your-algorithms-training-algo-dockerfile-script-s3-json"></a>

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 [CreateTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html#API_CreateTrainingJob_RequestSyntax)API.

```
// run-my-training-job.json
{
 "[AlgorithmSpecification](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html#sagemaker-CreateTrainingJob-request-AlgorithmSpecification)": { 
        "ContainerEntrypoint": ["/bin/sh"],
        "ContainerArguments": ["/opt/ml/input/data/<your_channel_name>/custom_entrypoint.sh"],
         ...
   },
  "[InputDataConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html#sagemaker-CreateTrainingJob-request-InputDataConfig)": [ 
    { 
        "[ChannelName](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#sagemaker-Type-Channel-ChannelName)": "<your_channel_name>",
        "[DataSource](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#sagemaker-Type-Channel-DataSource)": { 
            "[S3DataSource](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_DataSource.html#sagemaker-Type-DataSource-S3DataSource)": { 
                "[S3DataDistributionType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html#sagemaker-Type-S3DataSource-S3DataDistributionType)": "FullyReplicated",
                "[S3DataType](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html#sagemaker-Type-S3DataSource-S3DataType)": "S3Prefix",
                "[S3Uri](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html#sagemaker-Type-S3DataSource-S3Uri)": "s3://<bucket-name>/<bucket_prefix>"
            }
        },
        "[InputMode](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_Channel.html#sagemaker-Type-Channel-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
<a name="your-algorithms-training-algo-dockerfile-script-s3-directly"></a>

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}'
```

# Cómo proporciona Amazon SageMaker AI la información de formación
<a name="your-algorithms-training-algo-running-container"></a>

En esta sección, se explica cómo la SageMaker IA hace que la información de entrenamiento, como los datos de entrenamiento, los hiperparámetros y otra información de configuración, esté disponible en su contenedor de Docker. 

Cuando envías una [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html)solicitud a SageMaker AI para iniciar el entrenamiento con modelos, especificas la ruta de Amazon Elastic Container Registry (Amazon ECR) de la imagen de Docker que contiene el algoritmo de entrenamiento. También especificas la ubicación de Amazon Simple Storage Service (Amazon S3) en la que se almacenan los datos de entrenamiento y los parámetros específicos del algoritmo. SageMaker La IA pone esta información a disposición del contenedor de Docker para que tu algoritmo de entrenamiento pueda utilizarla. Esta sección explica cómo hacemos que esta información esté disponible para su contenedor de Docker. Para obtener información sobre un trabajo de entrenamiento, consulte `CreateTrainingJob`. Para obtener más información sobre la forma en que los contenedores de SageMaker IA organizan la información, consulte[SageMaker Kits de herramientas de formación e inferencia](amazon-sagemaker-toolkits.md).

**Topics**
+ [

## Hiperparámetros
](#your-algorithms-training-algo-running-container-hyperparameters)
+ [

## Variables de entorno
](#your-algorithms-training-algo-running-container-environment-variables)
+ [

## Configuración de datos de entrada
](#your-algorithms-training-algo-running-container-inputdataconfig)
+ [

## Datos de capacitación
](#your-algorithms-training-algo-running-container-trainingdata)
+ [

## Configuración de entrenamiento distribuido
](#your-algorithms-training-algo-running-container-dist-training)

## Hiperparámetros
<a name="your-algorithms-training-algo-running-container-hyperparameters"></a>

 SageMaker La IA hace que los hiperparámetros de una `CreateTrainingJob` solicitud estén disponibles en el contenedor Docker del `/opt/ml/input/config/hyperparameters.json` archivo.

A continuación se muestra un ejemplo de una configuración de hiperparámetros `hyperparameters.json` para especificar los hiperparámetros `num_round` y los `eta` hiperparámetros de la operación. `CreateTrainingJob` [XGBoost](https://docs.aws.amazon.com/sagemaker/latest/dg/xgboost.html) 

```
{
    "num_round": "128",
    "eta": "0.001"
}
```

[Para obtener una lista completa de los hiperparámetros que se pueden utilizar para el XGBoost algoritmo integrado de SageMaker IA, consulte Hiperparámetros. XGBoost](https://docs.aws.amazon.com/sagemaker/latest/dg/xgboost_hyperparameters.html)

Los hiperparámetros que puede ajustar dependen del algoritmo que esté entrenando. Para ver una lista de los hiperparámetros disponibles para un algoritmo integrado de SageMaker IA, búsquelos en la sección **Hiperparámetros**, en el enlace del algoritmo, en Use [Amazon SageMaker AI Builted Algorithms or Pre-Training](https://docs.aws.amazon.com/sagemaker/latest/dg/algos.html) Models.

## Variables de entorno
<a name="your-algorithms-training-algo-running-container-environment-variables"></a>

SageMaker La IA establece las siguientes variables de entorno en su contenedor:
+ TRAINING\$1JOB\$1NAME: se especifica en el parámetro `TrainingJobName` de la solicitud `CreateTrainingJob`.
+ TRAINING\$1JOB\$1ARN: es el nombre de recurso de Amazon (ARN) del trabajo de entrenamiento devuelto como `TrainingJobArn` en la respuesta `CreateTrainingJob`.
+ Todas las variables de entorno especificadas en el parámetro [Environment](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html#sagemaker-CreateTrainingJob-request-Environment) de la solicitud `CreateTrainingJob`.

## Configuración de datos de entrada
<a name="your-algorithms-training-algo-running-container-inputdataconfig"></a>

SageMaker La IA hace que la información del canal de datos del `InputDataConfig` parámetro de tu `CreateTrainingJob` solicitud esté disponible en el `/opt/ml/input/config/inputdataconfig.json` archivo de tu contenedor de Docker.

Por ejemplo, supongamos que especificas tres canales de datos (`train``evaluation`, y`validation`) en tu solicitud. SageMaker AI proporciona el siguiente JSON:

```
{
  "train" : {"ContentType":  "trainingContentType",
             "TrainingInputMode": "File",
             "S3DistributionType": "FullyReplicated",
             "RecordWrapperType": "None"},
  "evaluation" : {"ContentType":  "evalContentType",
                  "TrainingInputMode": "File",
                  "S3DistributionType": "FullyReplicated",
                  "RecordWrapperType": "None"},
  "validation" : {"TrainingInputMode": "File",
                  "S3DistributionType": "FullyReplicated",
                  "RecordWrapperType": "None"}
}
```

**nota**  
SageMaker La IA solo proporciona al contenedor información relevante sobre cada canal de datos (por ejemplo, el nombre del canal y el tipo de contenido), como se muestra en el ejemplo anterior. `S3DistributionType`se configurará como `FullyReplicated` si especificara EFS o FSx Lustre como fuentes de datos de entrada.

## Datos de capacitación
<a name="your-algorithms-training-algo-running-container-trainingdata"></a>

El parámetro `TrainingInputMode` en la `AlgorithmSpecification` de la solicitud [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html) especifica cómo se pone a disposición del contenedor el conjunto de datos de entrenamiento. Están disponibles los siguientes modos de entrada.
+ **Modo `File`**

  Si usa el `File` modo como `TrainingInputMode` valor, SageMaker AI establece los siguientes parámetros en su contenedor.
  + El parámetro `TrainingInputMode` se escribe en `inputdataconfig.json` como “File”.
  + Su directorio de canales de datos e escribe en `/opt/ml/input/data/channel_name`.

  Si utilizas el `File` modo, SageMaker AI crea un directorio para cada canal. Por ejemplo, si tienes tres canales con el nombre `training``validation`, y`testing`, SageMaker AI crea los tres directorios siguientes en tu contenedor de Docker: 
  + `/opt/ml/input/data/training`
  + `/opt/ml/input/data/validation`
  + `/opt/ml/input/data/testing`

  El modo `File` también admite los siguientes orígenes de datos:
  + Amazon Simple Storage Service (Amazon S3)
  + Amazon Elastic File System (Amazon EFS)
  + Amazon FSx para Lustre
**nota**  
Los canales que utilizan fuentes de datos del sistema de archivos, como Amazon EFS y Amazon, FSx deben usar `File` el modo. En este caso, la ruta del directorio proporcionada en el canal se monta en`/opt/ml/input/data/channel_name`.
+ **Modo `FastFile`**

  Si utilizas el `FastFile` modo como tuyo`TrainingInputNodeParameter`, SageMaker AI establece los siguientes parámetros en tu contenedor.
  + Al igual que en modo `File`, en el modo `FastFile`, el parámetro `TrainingInputMode` se escribe en `inputdataconfig.json` como “File”.
  + Su directorio de canales de datos e escribe en `/opt/ml/input/data/channel_name`.

  El modo `FastFile` admite los siguientes orígenes de datos:
  + Amazon S3

  Si utiliza el modo `FastFile`, el directorio de canales se monta con permiso de solo lectura.

  Históricamente, el modo `File` precedía al modo `FastFile`. Para garantizar la compatibilidad con versiones anteriores, los algoritmos que admiten el modo `File` también pueden funcionar sin problemas con el modo `FastFile` siempre que el parámetro `TrainingInputMode` esté configurado en `File` en `inputdataconfig.json.`.
**nota**  
Los canales que utilizan el modo `FastFile` deben utilizar un `S3DataType` “S3Prefix”.  
El modo `FastFile` presenta una vista de carpetas que utiliza la barra diagonal (`/`) como delimitador para agrupar los objetos de Amazon S3 en carpetas. Los prefijos `S3Uri` no deben corresponder a un nombre de carpeta parcial. Por ejemplo, si un conjunto de datos de Amazon S3 contiene `s3://amzn-s3-demo-bucket/train-01/data.csv`, ni `s3://amzn-s3-demo-bucket/train` ni `s3://amzn-s3-demo-bucket/train-01` están permitidos como prefijos `S3Uri`.  
Se recomienda usar una barra diagonal final para definir el canal correspondiente a una carpeta. Por ejemplo, el canal `s3://amzn-s3-demo-bucket/train-01/` para la carpeta `train-01`. Sin la barra diagonal final, el canal sería ambiguo si existiera otra carpeta `s3://amzn-s3-demo-bucket/train-011/` o archivo `s3://amzn-s3-demo-bucket/train-01.txt/`.
+ **Modo `Pipe`**
  + Parámetro `TrainingInputMode` escrito en `inputdataconfig.json`: “Pipe”
  + Directorio de canales de datos en el contenedor de Docker: `/opt/ml/input/data/channel_name_epoch_number`
  + Fuentes de datos compatibles: Amazon S3

  Debe leer desde una canalización independiente para cada canal. Por ejemplo, si dispone de tres canales denominados `training`, `validation` y `testing`, tienes que realizar la lectura desde las siguientes canalizaciones:
  + `/opt/ml/input/data/training_0, /opt/ml/input/data/training_1, ...`
  + `/opt/ml/input/data/validation_0, /opt/ml/input/data/validation_1, ...`
  + `/opt/ml/input/data/testing_0, /opt/ml/input/data/testing_1, ...`

  Lea las canalizaciones de forma secuencial. Por ejemplo, si dispone de un canal denominado `training`, lea las canalizaciones en este orden: 

  1. Ábrelo `/opt/ml/input/data/training_0` en modo lectura y léelo hasta end-of-file (EOF) o, si has terminado con la primera época, cierra el archivo canalizado antes de tiempo. 

  1. Después de cerrar el primer archivo de canalización, busque `/opt/ml/input/data/training_1` y léalo hasta que haya completado la segunda fecha de inicio y así sucesivamente.

  Si el archivo de una fecha de inicio determinada no existe aún, es posible que tenga que volver a intentarlo con el código hasta que se cree la canalización. No hay restricción de secuenciación entre tipos de canales. Por ejemplo, puede leer varias fechas de inicio para el canal `training`, por ejemplo, y solo comenzar a leer el canal `validation` cuando esté preparado. También puede leerlos simultáneamente si su algoritmo lo requiere.

  Para ver un ejemplo de una libreta de Jupyter que muestra cómo usar el modo Pipe al traer su propio contenedor, consulte [Bring your own Pipe-mode algorithm](https://github.com/aws/amazon-sagemaker-examples/blob/main/advanced_functionality/pipe_bring_your_own/pipe_bring_your_own.ipynb) to Amazon AI. SageMaker 

  

SageMaker El entrenamiento con 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. Para utilizar S3 Express One Zone, introduzca la ubicación del bucket del directorio de S3 Express One Zone en lugar de un bucket de uso general de Amazon S3. Proporcione el ARN del rol de IAM con la política pertinente de permisos y control de acceso. Consulte [AmazonSageMakerFullAccesspolicy](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSageMakerFullAccess.html) para obtener más información. 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](https://docs.aws.amazon.com/AmazonS3/latest/userguide/s3-express-one-zone.html).

## Configuración de entrenamiento distribuido
<a name="your-algorithms-training-algo-running-container-dist-training"></a>

Si realiza un entrenamiento distribuido con varios contenedores, la SageMaker IA pone a disposición del archivo la información sobre todos los contenedores. `/opt/ml/input/config/resourceconfig.json`

Para permitir la comunicación entre contenedores, este archivo JSON contiene información de todos los contenedores. SageMaker AI hace que este archivo esté disponible tanto `File` para los algoritmos de `Pipe` modo como para los algoritmos. El archivo proporciona la siguiente información:
+ `current_host`: el nombre del contenedor actual en la red del contenedor. Por ejemplo, `algo-1`. Los valores de host pueden cambiar en cualquier momento. No escriba código con valores específicos para esta variable.
+ `hosts`: la lista de nombres de todos los contenedores en la red de contenedores ordenada lexicográficamente. Por ejemplo, `["algo-1", "algo-2", "algo-3"]` para un clúster de tres nodos. Los contenedores pueden utilizar estos nombres para dirigirse a otros contenedores en la red de contenedores. Los valores de host pueden cambiar en cualquier momento. No escriba código con valores específicos para estas variables.
+ `network_interface_name`: el nombre de la interfaz de red que se expone al contenedor. Por ejemplo, los contenedores que ejecuten Message Passing Interface (MPI) pueden usar esta información para establecer el nombre de la interfaz de red.
+ No utilice la información en `/etc/hostname` o `/etc/hosts` porque puede ser inexacta.
+ La información del nombre de host podría no estar disponible de inmediato en el contenedor de algoritmos. Recomendamos agregar una política de reintentos en las operaciones de resolución de nombres de host a medida que los nodos estén disponibles en el clúster.

A continuación se muestra un archivo de ejemplo en el nodo 1 en un clúster de tres nodos:

```
{
    "current_host": "algo-1",
    "hosts": ["algo-1","algo-2","algo-3"],
    "network_interface_name":"eth1"
}
```

# Ejecutar entrenamiento con EFA
<a name="your-algorithms-training-efa"></a>

 SageMaker La IA proporciona integración con los dispositivos [EFA](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa.html) para acelerar las aplicaciones de computación de alto rendimiento (HPC) y aprendizaje automático. Esta integración le permite aprovechar un dispositivo EFA al ejecutar sus tareas de entrenamiento distribuidas. Puede añadir la integración de EFA a un contenedor Docker existente que incorpore a AI. SageMaker La siguiente información describe cómo configurar su propio contenedor para utilizar un dispositivo EFA en sus trabajos de entrenamiento distribuidos. 

## Requisitos previos
<a name="your-algorithms-training-efa-prereq"></a>

 El contenedor debe cumplir con la especificación del [contenedor SageMaker de formación](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-dockerfile.html).  

## Instale EFA y los paquetes obligatorios.
<a name="your-algorithms-training-efa-install"></a>

Su contenedor debe descargar e instalar el [software EFA](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-start.html). Esto permite que el contenedor reconozca el dispositivo EFA y proporciona versiones compatibles de Libfabric y Open MPI. 

Todas las herramientas, como MPI y NCCL, deben instalarse y gestionarse dentro del contenedor para poder utilizarlas como parte de su trabajo de entrenamiento en materia de EFA. Para obtener una lista de todas las versiones de EFA disponibles, consulte [Verificar el instalador de EFA mediante una suma de comprobación](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/efa-verify.html). En el siguiente ejemplo se muestra cómo modificar el Dockerfile de un contenedor compatible con EFA para instalar EFA, MPI, OFI, NCCL y NCCL-TEST.

**nota**  
Si lo usa PyTorch con EFA en su contenedor, la versión NCCL del contenedor debe coincidir con la versión NCCL de su instalación. PyTorch Para comprobar la versión de la PyTorch NCCL, utilice el siguiente comando:  

```
torch.cuda.nccl.version()
```

```
ARG OPEN_MPI_PATH=/opt/amazon/openmpi/
ENV NCCL_VERSION=2.7.8
ENV EFA_VERSION=1.30.0
ENV BRANCH_OFI=1.1.1

#################################################
## EFA and MPI SETUP
RUN cd $HOME \
  && curl -O https://s3-us-west-2.amazonaws.com/aws-efa-installer/aws-efa-installer-${EFA_VERSION}.tar.gz \
  && tar -xf aws-efa-installer-${EFA_VERSION}.tar.gz \
  && cd aws-efa-installer \
  && ./efa_installer.sh -y --skip-kmod -g \

ENV PATH="$OPEN_MPI_PATH/bin:$PATH"
ENV LD_LIBRARY_PATH="$OPEN_MPI_PATH/lib/:$LD_LIBRARY_PATH"

#################################################
## NCCL, OFI, NCCL-TEST SETUP
RUN cd $HOME \
  && git clone https://github.com/NVIDIA/nccl.git -b v${NCCL_VERSION}-1 \
  && cd nccl \
  && make -j64 src.build BUILDDIR=/usr/local

RUN apt-get update && apt-get install -y autoconf
RUN cd $HOME \
  && git clone https://github.com/aws/aws-ofi-nccl.git -b v${BRANCH_OFI} \
  && cd aws-ofi-nccl \
  && ./autogen.sh \
  && ./configure --with-libfabric=/opt/amazon/efa \
       --with-mpi=/opt/amazon/openmpi \
       --with-cuda=/usr/local/cuda \
       --with-nccl=/usr/local --prefix=/usr/local \
  && make && make install
  
RUN cd $HOME \
  && git clone https://github.com/NVIDIA/nccl-tests \
  && cd nccl-tests \
  && make MPI=1 MPI_HOME=/opt/amazon/openmpi CUDA_HOME=/usr/local/cuda NCCL_HOME=/usr/local
```

## Consideraciones al crear el contenedor
<a name="your-algorithms-training-efa-considerations"></a>

El dispositivo EFA se monta en el contenedor como `/dev/infiniband/uverbs0` según se indica en la lista de dispositivos accesibles al contenedor. En las instancias P4d, el contenedor tiene acceso a 4 dispositivos EFA. Los dispositivos EFA se encuentran en la lista de dispositivos a los que puede acceder el contenedor de la siguiente manera: 
+  `/dev/infiniband/uverbs0` 
+  `/dev/infiniband/uverbs1` 
+  `/dev/infiniband/uverbs2` 
+  `/dev/infiniband/uverbs3` 

 Para obtener información sobre el nombre de host, los nombres de host del mismo nivel y la interfaz de red (para MPI) en el archivo `resourceconfig.json` que se proporciona a cada instancia de contenedor, consulte [Configuración de entrenamiento distribuido](https://docs.aws.amazon.com/sagemaker/latest/dg/your-algorithms-training-algo-running-container.html#your-algorithms-training-algo-running-container-dist-training). El contenedor gestiona el tráfico TCP normal entre pares a través de las interfaces de red elásticas (ENI) predeterminadas, mientras que gestiona el tráfico OFI (derivación del núcleo) a través del dispositivo EFA. 

## Comprobar que el dispositivo EFA sea reconocido
<a name="your-algorithms-training-efa-verify"></a>

  Para comprobar que se reconozca el dispositivo EFA, ejecute el siguiente comando desde su contenedor. 

```
/opt/amazon/efa/bin/fi_info -p efa
```

El resultado debería tener un aspecto similar al siguiente.

```
provider: efa
    fabric: EFA-fe80::e5:56ff:fe34:56a8
    domain: efa_0-rdm
    version: 2.0
    type: FI_EP_RDM
    protocol: FI_PROTO_EFA
provider: efa
    fabric: EFA-fe80::e5:56ff:fe34:56a8
    domain: efa_0-dgrm
    version: 2.0
    type: FI_EP_DGRAM
    protocol: FI_PROTO_EFA
provider: efa;ofi_rxd
    fabric: EFA-fe80::e5:56ff:fe34:56a8
    domain: efa_0-dgrm
    version: 1.0
    type: FI_EP_RDM
    protocol: FI_PROTO_RXD
```

## Ejecutar un trabajo de entrenamiento con EFA
<a name="your-algorithms-training-efa-run"></a>

 Una vez que haya creado un contenedor compatible con la EFA, puede realizar un trabajo de formación con la EFA utilizando un estimador de SageMaker IA del mismo modo que lo haría con cualquier otra imagen de Docker. Para obtener más información sobre cómo registrar su contenedor y usarlo para el entrenamiento, consulte [Adaptación de un contenedor de entrenamiento propio](https://docs.aws.amazon.com/sagemaker/latest/dg/adapt-training-container.html#byoc-training-step5).

# Cómo Amazon SageMaker AI señala el éxito y el fracaso de los algoritmos
<a name="your-algorithms-training-signal-success-failure"></a>

Un algoritmo de capacitación indica que se ha realizado la operación de forma correcta o que se han producido errores mediante el código de salida de su proceso. 

Una ejecución de capacitación correcta debe salir con un código de salida de 0 y una ejecución de capacitación incorrecta debe salir con un código de salida que no sea cero. Se convertirán en `Completed` y `Failed` en el `TrainingJobStatus` devuelto por `DescribeTrainingJob`. Esta convención del código de salida es estándar y se implementa fácilmente en todos los idiomas. Por ejemplo, en Python, puede utilizar `sys.exit(1)` para señalar una salida de error y realizar la ejecución simplemente al final de la rutina principal provocará que Python salga con el código 0.

En caso de error, el algoritmo puede escribir una descripción del error en el archivo de errores. Consulte la sección siguiente para obtener más detalles.

# Cómo procesa Amazon SageMaker AI el resultado de la formación
<a name="your-algorithms-training-algo-output"></a>

Puesto que su algoritmo se ejecuta en un contenedor, genera la salida incluyendo el estado del modelo y el trabajo de capacitación, y los artefactos de salida. Su algoritmo debe escribir esta información en los siguientes archivos, que se encuentran en el directorio `/output` del contenedor. Amazon SageMaker AI procesa la información contenida en este directorio de la siguiente manera:
+ `/opt/ml/model`— Su algoritmo debería escribir todos los artefactos finales del modelo en este directorio. SageMaker AI copia estos datos como un único objeto en formato tar comprimido en la ubicación S3 que especificó en la `CreateTrainingJob` solicitud. Si varios contenedores de un mismo trabajo de formación escriben en este directorio, deben asegurarse de que no haya ningún conflicto entre `file/directory` nombres. SageMaker AI agrega el resultado en un archivo TAR y lo carga en S3 al final del trabajo de capacitación. 
+ `/opt/ml/output/data`— Su algoritmo debería escribir en este directorio los artefactos que desee almacenar, además del modelo final. SageMaker AI copia estos datos como un único objeto en formato tar comprimido en la ubicación S3 que especificó en la `CreateTrainingJob` solicitud. Si varios contenedores de un mismo trabajo de formación escriben en este directorio, deben asegurarse de que no haya ningún conflicto entre `file/directory` nombres. SageMaker AI agrega el resultado en un archivo TAR y lo carga en S3 al final del trabajo de capacitación.
+ `/opt/ml/output/failure`: si se produce un error en la entrenamiento, después de que toda la salida del algoritmo (por ejemplo, registro) se complete, el algoritmo debe escribir la descripción de errores en este archivo. Como `DescribeTrainingJob` respuesta, SageMaker AI devuelve los primeros 1024 caracteres de este archivo como. `FailureReason` 

Puede especificar un bucket de uso general de S3 o de directorios de S3 para almacenar la salida de entrenamiento. Los buckets de directorio utilizan únicamente la clase de almacenamiento de Amazon S3 Express One Zone, que está diseñada para cargas de trabajo o aplicaciones fundamentales para el rendimiento que requieren una latencia uniforme en milisegundos de un solo dígito. Elija el tipo de bucket que mejor se adapte a sus requisitos de rendimiento y aplicación. Para obtener más información sobre los buckets de directorios de S3, consulte [Descripción general de los buckets de directorio](https://docs.aws.amazon.com/AmazonS3/latest/userguide/directory-buckets-overview.html) en la *Guía del usuario de Amazon Simple Storage Service*. 

**nota**  
Solo puede cifrar los datos de salida de SageMaker IA en depósitos de directorio de S3 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 