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.
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 Amazon SageMaker AI. 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
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
Temas
Divida el modelo de su guion de entrenamiento mediante la biblioteca de modelos de paralelismo 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
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
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.
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
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
Comparación del modelo automatizado dividido entre marcos
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 unann.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
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 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.