

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.

# Configurar un trabajo de formación con un clúster heterogéneo en Amazon AI SageMaker
<a name="train-heterogeneous-cluster-configure"></a>

En esta sección se proporcionan instrucciones sobre cómo ejecutar un trabajo de entrenamiento con un clúster heterogéneo que consta de varios tipos de instancias.

Antes de empezar, tenga en cuenta lo siguiente: 
+ Todos los grupos de instancias comparten la misma imagen de Docker y el mismo script de entrenamiento. Por lo tanto, debe modificar su script de entrenamiento para detectar a qué grupo de instancias pertenece y bifurcar la ejecución en consecuencia.
+ La función de clúster heterogéneo no es compatible con el modo local de SageMaker IA.
+ Los flujos de CloudWatch registro de Amazon de un trabajo de formación en clústeres heterogéneos no están agrupados por grupos de instancias. Tiene que averiguar a partir de los registros qué nodos están en cada grupo.

**Topics**
+ [Opción 1: Uso del SDK de SageMaker Python](#train-heterogeneous-cluster-configure-pysdk)
+ [Opción 2: usar el nivel bajo SageMaker APIs](#train-heterogeneous-cluster-configure-api)

## Opción 1: Uso del SDK de SageMaker Python
<a name="train-heterogeneous-cluster-configure-pysdk"></a>

Sigue las instrucciones sobre cómo configurar grupos de instancias para un clúster heterogéneo mediante el SDK de SageMaker Python.

1. Para configurar grupos de instancias de un clúster heterogéneo para un trabajo de entrenamiento, utilice la clase `sagemaker.instance_group.InstanceGroup`. Puede especificar un nombre personalizado para cada grupo de instancias, el tipo de instancia y la cantidad de instancias para cada grupo de instancias. Para obtener más información, consulta [sagemaker.instance\_group. InstanceGroup](https://sagemaker.readthedocs.io/en/stable/api/utility/instance_group.html)en la *documentación del SDK de Python para SageMaker IA*.
**nota**  
Para obtener más información sobre los tipos de instancias disponibles y la cantidad máxima de grupos de instancias que puedes configurar en un clúster heterogéneo, consulta la referencia de la [ InstanceGroup](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InstanceGroup.html)API.

   En el siguiente ejemplo de código, se muestra cómo configurar dos grupos de instancias que constan de dos instancias `ml.c5.18xlarge` que solo utilizan CPU denominadas `instance_group_1` y una instancia de GPU de `ml.p3dn.24xlarge` denominada `instance_group_2`, tal y como se muestra en el siguiente diagrama.  
![Un ejemplo conceptual de cómo se pueden asignar los datos en SageMaker Training Job.](http://docs.aws.amazon.com/es_es/sagemaker/latest/dg/images/HCTraining.png)

   El diagrama anterior muestra un ejemplo conceptual de cómo los procesos previos al entrenamiento, como el preprocesamiento de datos, se pueden asignar al grupo de instancias de la CPU y transmitir los datos preprocesados al grupo de instancias de la GPU.

   ```
   from sagemaker.instance_group import InstanceGroup
   
   instance_group_1 = InstanceGroup(
       "{{instance_group_1}}", "{{ml.c5.18xlarge}}", {{2}}
   )
   instance_group_2 = InstanceGroup(
       "{{instance_group_2}}", "{{ml.p3dn.24xlarge}}", {{1}}
   )
   ```

1. Con los objetos del grupo de instancias, configura los canales de entrada de entrenamiento y asigna grupos de instancias a los canales mediante el `instance_group_names` argumento del [sagemaker.inputs. TrainingInput](https://sagemaker.readthedocs.io/en/stable/api/utility/inputs.html)clase. El argumento `instance_group_names` acepta una lista de cadenas de nombres de grupos de instancias.

   En el siguiente ejemplo, se muestra cómo configurar dos canales de entrada de entrenamiento y cómo asignar los grupos de instancias creados en el ejemplo del paso anterior. También puedes especificar las rutas de los buckets de Amazon S3 al argumento `s3_data` para que los grupos de instancias procesen los datos para sus fines de uso.

   ```
   from sagemaker.inputs import TrainingInput
   
   training_input_channel_1 = TrainingInput(
       s3_data_type='{{S3Prefix}}', # Available Options: S3Prefix | ManifestFile | AugmentedManifestFile
       s3_data='{{s3://your-training-data-storage/folder1}}',
       distribution='{{FullyReplicated}}', # Available Options: FullyReplicated | ShardedByS3Key 
       input_mode='{{File}}', # Available Options: File | Pipe | FastFile
       instance_groups=["{{instance_group_1}}"]
   )
   
   training_input_channel_2 = TrainingInput(
       s3_data_type='{{S3Prefix}}',
       s3_data='{{s3://your-training-data-storage/folder2}}',
       distribution='{{FullyReplicated}}',
       input_mode='{{File}}',
       instance_groups=["{{instance_group_2}}"]
   )
   ```

   Para obtener más información sobre los argumentos de `TrainingInput`, consulte los siguientes enlaces.
   + El hacedor de [sabios. entradas. TrainingInput](https://sagemaker.readthedocs.io/en/stable/api/utility/inputs.html)clase en la *documentación del SDK de SageMaker Python*
   + La DataSource API de [S3](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html) en la *referencia de la API de SageMaker IA*

1. Configure un estimador de SageMaker IA con el `instance_groups` argumento, tal y como se muestra en el siguiente ejemplo de código. El argumento `instance_groups` acepta una lista de objetos `InstanceGroup`
**nota**  
La función de clúster heterogéneo está disponible a través de las clases de estimadores SageMaker AI [PyTorch](https://sagemaker.readthedocs.io/en/stable/frameworks/pytorch/sagemaker.pytorch.html)y [TensorFlow](https://sagemaker.readthedocs.io/en/stable/frameworks/tensorflow/sagemaker.tensorflow.html#tensorflow-estimator)Framework. Los marcos compatibles son la PyTorch versión 1.10 o posterior y la versión 2.6 o posterior. TensorFlow Para ver una lista completa de los contenedores de framework, las versiones de framework y las versiones de Python disponibles, consulta [SageMaker AI Framework Containers](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only) en el GitHub repositorio de AWS Deep Learning Container.

------
#### [ PyTorch ]

   ```
   from sagemaker.pytorch import PyTorch
   
   estimator = PyTorch(
       ...
       entry_point='{{my-training-script.py}}',
       framework_version='{{x.y.z}}',    # 1.10.0 or later
       py_version='py{{xy}}',            
       job_name='{{my-training-job-with-heterogeneous-cluster}}',
       instance_groups=[{{instance_group_1}}, {{instance_group_2}}]
   )
   ```

------
#### [ TensorFlow ]

   ```
   from sagemaker.tensorflow import TensorFlow
   
   estimator = TensorFlow(
       ...
       entry_point='{{my-training-script.py}}',
       framework_version='{{x.y.z}}', # 2.6.0 or later
       py_version='py{{xy}}',
       job_name='{{my-training-job-with-heterogeneous-cluster}}',
       instance_groups=[{{instance_group_1}}, {{instance_group_2}}]
   )
   ```

------
**nota**  
El `instance_type` par de `instance_count` argumentos y y el `instance_groups` argumento de la clase de estimadores SageMaker AI se excluyen mutuamente. Para el entrenamiento de clústeres homogéneos, utilice el par de argumentos `instance_type` y `instance_count`. Para el entrenamiento de clústeres heterogéneos, utilice `instance_groups`.
**nota**  
Para ver una lista completa de los contenedores de framework, las versiones de framework y las versiones de Python disponibles, consulta [SageMaker AI Framework Containers](https://github.com/aws/deep-learning-containers/blob/master/available_images.md#sagemaker-framework-containers-sm-support-only) en el GitHub repositorio de AWS Deep Learning Container.

1. Configure el método `estimator.fit` con los canales de entrada de entrenamiento configurados con los grupos de instancias e inicie el trabajo de entrenamiento.

   ```
   estimator.fit(
       inputs={
           'training': {{training_input_channel_1}}, 
           '{{dummy-input-channel}}': {{training_input_channel_2}}
       }
   )
   ```

## Opción 2: usar el nivel bajo SageMaker APIs
<a name="train-heterogeneous-cluster-configure-api"></a>

Si utilizas el AWS Command Line Interface o AWS SDK para Python (Boto3) y quieres utilizar el nivel bajo SageMaker APIs para enviar una solicitud de trabajo de formación con un clúster heterogéneo, consulta las siguientes referencias de la API.
+ [CreateTrainingJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html)
+ [ResourceConfig ](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ResourceConfig.html)
+ [InstanceGroup](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InstanceGroup.html)
+ [S3DataSource](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html)