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.
Partición del estado del optimizador
La partición del estado del optimizador es una técnica útil para ahorrar memoria que parte el estado del optimizador (el conjunto de ponderaciones que describe el estado del optimizador) entre grupos de dispositivos paralelos de datos. Puede utilizar la fragmentación del estado del optimizador siempre que utilice un optimizador con estado (como Adam) o un FP16 optimizador (que almacena ambos parámetros y copias de ellos). FP16 FP32
nota
La fragmentación del estado del optimizador está disponible PyTorch en la biblioteca de paralelismo de modelos v1.6.0 y versiones posteriores SageMaker .
Cómo utilizar la partición de estados del optimizador
Puede activar la partición del estado del optimizador estableciendo "shard_optimizer_state": True
en la configuración de modelparallel
.
Cuando esta característica está activada, la biblioteca divide el conjunto de parámetros del modelo en función del grado de paralelismo de los datos. Los gradientes correspondientes a la división número i
se reducen solo en el rango paralelo de datos número i
. Al final de la primera llamada a una característica del decorador smp.step
, el optimizador encapsulado con smp.DistributedOptimizer
redefine sus parámetros para limitarse solo a los parámetros correspondientes a la división del rango paralelo de datos actual. Los parámetros redefinidos se denominan parámetros virtuales y comparten el almacenamiento subyacente con los parámetros originales. Durante la primera llamada a optimizer.step
, los estados del optimizador se crean en función de estos parámetros redefinidos, que están partidos debido a la partición original. Tras la actualización del optimizador, la AllGather operación (como parte de la optimizer.step
llamada) se ejecuta en los rangos paralelos de datos para lograr estados de parámetros consistentes.
sugerencia
La partición del estado del optimizador puede resultar útil cuando el grado de paralelismo de los datos es superior a 1 y el modelo tiene más de mil millones de parámetros.
El grado de paralelismo de los datos se calcula mediante (processes_per_host *
instance_count / pipeline_parallel_degree)
y la característica smp.dp_size()
gestiona el tamaño en segundo plano.
Configure un estimador SageMaker PyTorch
mpi_options = { "enabled" : True, "processes_per_host" : 8, # 8 processes "custom_mpi_options" : "--mca btl_vader_single_copy_mechanism none " } smp_options = { "enabled":True, "parameters": { "microbatches": 4, "pipeline_parallel_degree": 2, # alias for "partitions" "placement_strategy": "cluster", "tensor_parallel_degree": 2, # tp over 2 devices "ddp": True, "shard_optimizer_state": True } }
Adapta tu guion de entrenamiento PyTorch
Consulta Cómo adaptar tu guion de PyTorch entrenamiento en la sección Paralelismo tensorial combinado con paralelismo de canalización. No es necesario realizar ninguna modificación adicional en el script.