Transformers documentation

Accelerate

Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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() считывает настройки и настраивает обучение.

FSDP
DeepSpeed
DDP

Передайте JSON-файл конфигурации или словарь в ~TrainingArguments.fsdp_config. См. FSDP для полного руководства и справочника по конфигурации.

from transformers import TrainingArguments

TrainingArguments(
    ...,
    fsdp=True,
    fsdp_config="path/to/fsdp.json",
)

Дальнейшие шаги

  • См. DDP для обучения с параллелизмом данных, если ваша модель помещается на одном GPU.
  • См. FSDP для шардирования параметров, градиентов и состояний оптимизатора между GPU.
  • См. DeepSpeed для оптимизации ZeRO и выгрузки (offloading).
Update on GitHub