Transformers documentation
Accelerate
Accelerate
Accelerate предоставляет единый интерфейс для распределённых бэкендов обучения, таких как FSDP или DeepSpeed. Он определяет вашу среду (количество GPU, распределённый бэкенд, смешанная точность и т. д.) и автоматически настраивает обучение, будь то 1 GPU с DDP или 8 GPU с FSDP.
Accelerate оборачивает модель в соответствующий распределённый обёртчик, перемещает её на правильное устройство и создаёт совместимый оптимизатор. Во время обучения Accelerate использует собственный метод backward для обработки масштабирования градиентов при смешанной точности. Trainer вызывает соответствующие API Accelerate и передаёт все механизмы распределённой обработки Accelerate.
Настройте Accelerate для Trainer с помощью файла конфигурации Accelerate или TrainingArguments.
Файл конфигурации Accelerate
Выполните команду accelerate config и ответьте на вопросы о вашем оборудовании и конфигурации обучения. В результате в кэше будет создан файл default_config.yaml. Пример ниже приведён для 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: 4Запустите accelerate launch со скриптом на основе Trainer, и Accelerate прочитает файл конфигурации для настройки обучения. Аргументы fsdp_config и deepspeed не нужны, так как файл конфигурации Accelerate покрывает те же настройки.
accelerate launch train.pyПараметр accelerator_config принимает настройки, для которых не предусмотрены отдельные аргументы верхнего уровня. Например, установите non_blocking=True вместе с dataloader_pin_memory(), чтобы перекрывать передачу данных с вычислениями и повышать пропускную способность GPU.
from transformers import TrainingArguments
TrainingArguments(
...,
dataloader_pin_memory=True,
accelerator_config={
"non_blocking": True,
},
)TrainingArguments
Передайте конфигурацию, специфичную для бэкенда, в TrainingArguments. Метод create_accelerator_and_postprocess() считывает настройки и настраивает обучение.
Передайте JSON-файл конфигурации или словарь в ~TrainingArguments.fsdp_config. См. FSDP для полного руководства и справочника по конфигурации.
from transformers import TrainingArguments
TrainingArguments(
...,
fsdp=True,
fsdp_config="path/to/fsdp.json",
)Передайте JSON-файл конфигурации или словарь в ~TrainingArguments.deepspeed. Полное руководство и справочник по конфигурации см. в разделе DeepSpeed.
from transformers import TrainingArguments
TrainingArguments(
...,
deepspeed="path/to/ds_config.json",
)DDP настраивается непосредственно через поля TrainingArguments. Подробности см. в разделе DDP.
from transformers import TrainingArguments
TrainingArguments(
...,
ddp_backend="nccl",
ddp_find_unused_parameters=False,
ddp_bucket_cap_mb=25,
ddp_timeout=1800,
)Дальнейшие шаги
- См. DDP для обучения с параллелизмом данных, если ваша модель помещается на одном GPU.
- См. FSDP для шардирования параметров, градиентов и состояний оптимизатора между GPU.
- См. DeepSpeed для оптимизации ZeRO и выгрузки (offloading).