Transformers documentation
Accelerate
Accelerate
Accelerate ofrece una interfaz unificada para backends de entrenamiento distribuido como FSDP o DeepSpeed. Detecta tu entorno (número de GPUs, backend distribuido, precisión mixta, etc.) y configura automáticamente el entrenamiento, ya sea que estés usando 1 GPU con DDP o 8 GPUs con FSDP.
Accelerate envuelve el modelo en el envoltorio distribuido adecuado, lo mueve al dispositivo correcto y crea un optimizador compatible. Durante el entrenamiento, Accelerate utiliza su propio método backward para manejar la escalado de gradientes en precisión mixta. Trainer llama a las API de Accelerate correspondientes y delega toda la mecánica distribuida en Accelerate.
Configure Accelerate para Trainer con un archivo de configuración de Accelerate o TrainingArguments.
Archivo de configuración de Accelerate
Ejecuta el comando accelerate config y responde a las preguntas sobre tu hardware y configuración de entrenamiento. Esto crea un archivo default_config.yaml en tu caché. El ejemplo de abajo es para FSDP.
compute_environment: LOCAL_MACHINE
distributed_type: FSDP
fsdp_config:
fsdp_version: 2
fsdp_reshard_after_forward: true
fsdp_cpu_offload: false
fsdp_auto_wrap_policy: TRANSFORMER_BASED_WRAP
fsdp_cpu_ram_efficient_loading: true
fsdp_activation_checkpointing: false
fsdp_state_dict_type: SHARDED_STATE_DICT
fsdp_transformer_layer_cls_to_wrap: LlamaDecoderLayer
mixed_precision: bf16
num_machines: 1
num_processes: 4Ejecute accelerate launch con un script basado en Trainer y Accelerate leerá el archivo de configuración para configurar el entrenamiento. Los argumentos fsdp_config y deepspeed son innecesarios porque el archivo de configuración de Accelerate cubre las mismas configuraciones.
accelerate launch train.pyEl accelerator_config acepta configuraciones que no tienen argumentos de nivel superior dedicados. Por ejemplo, establezca non_blocking=True junto con dataloader_pin_memory() para superponer la transferencia de datos con el cálculo y obtener un mayor rendimiento de la GPU.
from transformers import TrainingArguments
TrainingArguments(
...,
dataloader_pin_memory=True,
accelerator_config={
"non_blocking": True,
},
)TrainingArguments
Pase una configuración específica del backend a TrainingArguments. El método create_accelerator_and_postprocess() lee la configuración y ajusta el entrenamiento.
Pase un archivo de configuración JSON o un diccionario a ~TrainingArguments.fsdp_config. Consulte FSDP para obtener una guía completa y una referencia de configuración.
from transformers import TrainingArguments
TrainingArguments(
...,
fsdp=True,
fsdp_config="path/to/fsdp.json",
)Pase un archivo de configuración JSON o un diccionario a ~TrainingArguments.deepspeed. Consulte DeepSpeed para obtener una guía completa y una referencia de configuración.
from transformers import TrainingArguments
TrainingArguments(
...,
deepspeed="path/to/ds_config.json",
)DDP se configura directamente a través de los campos de TrainingArguments. Consulte DDP para obtener más detalles.
from transformers import TrainingArguments
TrainingArguments(
...,
ddp_backend="nccl",
ddp_find_unused_parameters=False,
ddp_bucket_cap_mb=25,
ddp_timeout=1800,
)Próximos pasos
- Consulte DDP para el entrenamiento paralelo de datos cuando su modelo quepa en una sola GPU.
- Consulte FSDP para fragmentar parámetros, gradientes y estados del optimizador entre varias GPU.
- Consulte DeepSpeed para la optimización ZeRO y el offloading.