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 mediante la biblioteca de paralelismo de modelos distribuidos de SageMaker
Utilice esta sección para obtener información sobre cómo personalizar su script de entrenamiento para utilizar las principales características de la biblioteca de paralelismo de modelos de Amazon SageMaker AI. Para utilizar las funciones y parámetros de API específicos de la biblioteca, le recomendamos que utilice esta documentación junto con las API de la biblioteca de paralelismo de modelos de SageMaker
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 obtener ejemplos de cuadernos ejecutables integrales que muestran cómo utilizar un script de entrenamiento de TensorFlow o PyTorch con la biblioteca de paralelismo de modelos de SageMaker, consulte Ejemplos de la biblioteca de paralelismo de modelos de Amazon SageMaker AI v2.
Temas
Dividir el modelo de su script de entrenamiento con la biblioteca de paralelismo de modelos de SageMaker
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
Cuando utiliza la biblioteca de paralelismo de modelos de SageMaker, puede utiliza la división de modelos automatizada, también denominada partición de modelos automatizada. 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
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 cualquier marco, la biblioteca gestiona la comunicación entre dispositivos a través de su propio backend, optimizado para la infraestructura de 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, en TensorFlow, 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 varias operaciones. En la siguiente sección se revisan los detalles del diseño en cada marco.
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 el decorador de smp.step en su script de entrenamiento de PyTorch, consulte División automatizada con PyTorch.
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 registrar el decorador de smp.step en su script de entrenamiento de PyTorch, consulte División automatizada con TensorFlow.
Comparación del modelo automatizado dividido entre marcos
En TensorFlow, la unidad fundamental de cálculo es un tf.Operation, y TensorFlow representa el modelo como un gráfico acíclico dirigido (DAG) de tf.Operations 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 suficientemente rica y universal. La unidad de cálculo más cercana de PyTorch que tiene estas características es un nn.Module, que se encuentra en un nivel de granularidad mucho mayor, y por eso la biblioteca realiza particiones a este nivel en PyTorch.
División manual de modelos
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.
Para utilizar esta opción después de realizar las modificaciones, en el paso 2, tendrá que establecer auto_partition a False y definir un default_partition en la clase estimadora del marco del SageMaker Python SDK. 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.