

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.

# Paso 1: modifique su propio script de entrenamiento utilizando SageMaker la biblioteca paralela de modelos distribuidos
<a name="model-parallel-customize-training-script"></a>

Utilice esta sección para aprender a personalizar su guion de entrenamiento para utilizar las funciones principales de la biblioteca de paralelismo de modelos de SageMaker IA de Amazon. Para utilizar las funciones y los parámetros de la API específicos de la biblioteca, le recomendamos que utilice esta documentación junto con la [biblioteca de modelos SageMaker paralelos](https://sagemaker.readthedocs.io/en/v2.199.0/api/training/smd_model_parallel.html) de la documentación APIs del SDK de *SageMaker Python*.

Los ejemplos de scripts de entrenamiento proporcionados en estas secciones están simplificados y diseñados para resaltar los cambios necesarios que debe realizar para utilizar la biblioteca. Para ver end-to-end ejemplos de cuadernos ejecutables que muestran cómo utilizar un script TensorFlow o un script de PyTorch entrenamiento con la biblioteca de paralelismo de SageMaker modelos, consulte. [Ejemplos de la biblioteca de paralelismo de modelos Amazon SageMaker AI v2](distributed-model-parallel-v2-examples.md)

**Topics**
+ [Divida el modelo de su guion de entrenamiento mediante la biblioteca de modelos de paralelismo SageMaker](#model-parallel-model-splitting-using-smp-lib)
+ [Modifica un script de entrenamiento TensorFlow](model-parallel-customize-training-script-tf.md)
+ [Modifique un guion PyTorch de entrenamiento](model-parallel-customize-training-script-pt.md)

## Divida el modelo de su guion de entrenamiento mediante la biblioteca de modelos de paralelismo SageMaker
<a name="model-parallel-model-splitting-using-smp-lib"></a>

Existen dos formas de modificar el script de entrenamiento para configurar la división del modelo: la división automática o la división manual.

### División automatizada de modelos
<a name="model-parallel-automated-model-splitting"></a>

*Al utilizar SageMaker la biblioteca de paralelismo de modelos, puede aprovechar la división *automática de modelos, también conocida como partición automática de modelos*.* La biblioteca utiliza un algoritmo de partición que equilibra la memoria, minimiza la comunicación entre dispositivos y optimiza el rendimiento. Puede configurar el algoritmo de partición automatizado para optimizar la velocidad o la memoria. 

Alternativamente, puede utilizar la división manual de modelos. Recomendamos la división automática de modelos, a menos que esté muy familiarizado con la arquitectura del modelo y tenga una buena idea de cómo particionar su modelo de manera eficiente.

#### Funcionamiento
<a name="model-parallel-automated-model-splitting-how-it-works"></a>

La partición automática se produce durante el primer paso de entrenamiento, cuando la función decorada por `smp.step` se llama por primera vez. Durante esta llamada, la biblioteca construye primero una versión del modelo en la RAM de la CPU (para evitar limitaciones de memoria de la GPU) y, a continuación, analiza el gráfico del modelo y toma una decisión de partición. En base a esta decisión, cada partición de modelo se carga en una GPU y solo entonces se ejecuta el primer paso. Debido a estos pasos de análisis y partición, el primer paso de entrenamiento podría llevar más tiempo. 

En cualquiera de los dos marcos, la biblioteca gestiona la comunicación entre los dispositivos a través de su propio backend, que está optimizado para la infraestructura. AWS 

El diseño de partición automática se adapta a las características del marco y la biblioteca realiza la partición a un nivel de granularidad más natural en cada marco. Por ejemplo TensorFlow, en cada operación específica se puede asignar a un dispositivo diferente, mientras que en PyTorch, la asignación se realiza a nivel de módulo, donde cada módulo consta de múltiples operaciones. En la siguiente sección se revisan los detalles del diseño en cada marco.

##### División automática del modelo con PyTorch
<a name="model-parallel-auto-model-split-pt"></a>

Durante el primer paso de entrenamiento, la biblioteca de paralelismo de modelos ejecuta internamente un paso de trazado destinado a construir el gráfico del modelo y determinar las formas de los tensores y parámetros. Tras este paso de rastreo, la biblioteca construye un árbol, que consiste en el anidado de objetos `nn.Module` del modelo, así como datos adicionales recopilados a partir del rastreo, como la cantidad de `nn.Parameters` almacenados, y tiempo de ejecución para cada `nn.Module`. 

A continuación, la biblioteca atraviesa este árbol desde la raíz y ejecuta un algoritmo de partición que asigna a cada `nn.Module` a un dispositivo que equilibra la carga computacional (medida por el tiempo de ejecución del módulo) y el uso de la memoria (medida por el total tamaño y activaciones de `nn.Parameter` totales almacenadas). Si múltiples `nn.Modules` comparten el mismo `nn.Parameter`, estos módulos se colocan en el mismo dispositivo para evitar mantener varias versiones del mismo parámetro. Una vez tomada la decisión de particionar, los módulos y pesos asignados se cargan en sus dispositivos.

Para obtener instrucciones sobre cómo registrar al `smp.step` decorador en su guion de PyTorch formación, consulte. [División automática con PyTorch](model-parallel-customize-training-script-pt.md#model-parallel-customize-training-script-pt-16)

##### División automática de modelos con TensorFlow
<a name="model-parallel-auto-model-split-tf"></a>

La biblioteca de paralelismo de modelos analiza los tamaños de las variables que pueden entrenarse y la estructura del gráfico, y utiliza internamente un algoritmo de partición de gráficos. Este algoritmo presenta una asignación de dispositivos para cada operación, con el objetivo de minimizar la cantidad de comunicación necesaria entre los dispositivos, sujeto a dos restricciones: 
+ Equilibrio del número de variables almacenadas en cada dispositivo
+ Equilibrio del número de operaciones ejecutadas en cada dispositivo

Si especifica `speed` en `optimize` (en los parámetros paralelos del modelo en el Python SDK), la biblioteca intenta equilibrar el número de operaciones y objetos `tf.Variable` de cada dispositivo. De lo contrario, intenta equilibrar el tamaño total de `tf.Variables`.

Una vez tomada la decisión de particionar, la biblioteca crea una representación serializada del subgráfico que cada dispositivo necesita ejecutar e importa en cada dispositivo. Durante la partición, la biblioteca coloca operaciones que consumen el mismo `tf.Variable` y operaciones que forman parte de la misma capa de Keras en el mismo dispositivo. También respeta las restricciones de colocación impuestas por. TensorFlow Esto significa que, por ejemplo, si hay dos capas Keras que comparten un `tf.Variable`, todas las operaciones que forman parte de estas capas se colocan en un solo dispositivo.

Para obtener instrucciones sobre cómo inscribir al `smp.step` decorador en su guion de PyTorch formación, consulte. [División automática con TensorFlow](model-parallel-customize-training-script-tf.md#model-parallel-customize-training-script-tf-23)

##### Comparación del modelo automatizado dividido entre marcos
<a name="model-parallel-auto-model-split-comparison"></a>

En TensorFlow, la unidad fundamental de cálculo es a y TensorFlow representa el modelo como un `tf.Operation` grafo acíclico dirigido (DAG) de `tf.Operation` s y, por lo tanto, la biblioteca de paralelismo de modelos divide este DAG para que cada nodo vaya a un dispositivo. Y lo que es más importante, los objetos `tf.Operation` son lo suficientemente ricos con atributos personalizables y son universales en el sentido de que cada modelo está garantizado por un gráfico de dichos objetos. 

PyTorch por otro lado, no tiene una noción de operación equivalente que sea lo suficientemente rica y universal. La unidad de cálculo más cercana PyTorch que tiene estas características es una`nn.Module`, que se encuentra en un nivel de granularidad mucho más alto, y es por eso que la biblioteca realiza particiones a este nivel en. PyTorch

### División manual de modelos
<a name="model-parallel-manual-model-splitting"></a>

Si desea especificar manualmente cómo particionar su modelo entre dispositivos, use el administrador de contexto `smp.partition`. Para obtener instrucciones acerca de cómo configurar el administrador de contexto para la partición manual, consulte las siguientes páginas.
+ [Dividir manualmente con TensorFlow](model-parallel-customize-training-script-tf.md#model-parallel-customize-training-script-tf-manual)
+ [Dividir manualmente con PyTorch](model-parallel-customize-training-script-pt.md#model-parallel-customize-training-script-pt-16-hvd)

Para usar esta opción después de realizar modificaciones, en el paso 2, tendrás que configurar y definir `auto_partition` a `False` `default_partition` en la clase de estimador del framework del SDK de SageMaker Python. Cualquier operación que no se coloque explícitamente en una partición a través del gestor de contextos de `smp.partition` se ejecuta en el `default_partition`. En este caso, se omite la lógica de división automatizada y cada operación se realiza según su especificación. En función de la estructura gráfica resultante, la biblioteca de paralelismo de modelos crea automáticamente una programación de ejecución canalizada.