Transformers documentation
Accelerate
Accelerate
Accelerate fornece uma interface unificada para backends de treinamento distribuído, como FSDP ou DeepSpeed. Ele detecta seu ambiente (número de GPUs, backend distribuído, precisão mista, etc.) e configura automaticamente o treinamento, seja em 1 GPU com DDP ou em 8 GPUs com FSDP.
O Accelerate envolve o modelo no wrapper distribuído apropriado, move-o para o dispositivo correto e cria um otimizador compatível. Durante o treinamento, o Accelerate usa seu próprio método backward para lidar com o escalonamento de gradientes para precisão mista. O Trainer chama as APIs apropriadas do Accelerate e delega toda a mecânica distribuída ao Accelerate.
Configure o Accelerate para o Trainer com um arquivo de configuração do Accelerate ou TrainingArguments.
Arquivo de configuração do Accelerate
Execute o comando accelerate config e responda às perguntas sobre seu hardware e configuração de treinamento. Isso cria um arquivo default_config.yaml no seu cache. O exemplo abaixo é 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: 4Execute accelerate launch com um script baseado em Trainer, e o Accelerate lê o arquivo de configuração para configurar o treinamento. Os argumentos fsdp_config e deepspeed são desnecessários, pois o arquivo de configuração do Accelerate cobre as mesmas configurações.
accelerate launch train.pyO accelerator_config aceita configurações que não possuem argumentos de nível superior dedicados. Por exemplo, defina non_blocking=True junto com dataloader_pin_memory() para sobrepor a transferência de dados com o cálculo, obtendo maior throughput na GPU.
from transformers import TrainingArguments
TrainingArguments(
...,
dataloader_pin_memory=True,
accelerator_config={
"non_blocking": True,
},
)TrainingArguments
Passe uma configuração específica do backend para TrainingArguments. O método create_accelerator_and_postprocess() lê as configurações e configura o treinamento.
Passe um arquivo de configuração JSON ou um dicionário para ~TrainingArguments.fsdp_config. Consulte FSDP para obter um guia completo e a referência de configuração.
from transformers import TrainingArguments
TrainingArguments(
...,
fsdp=True,
fsdp_config="path/to/fsdp.json",
)Passe um arquivo de configuração JSON ou um dicionário para ~TrainingArguments.deepspeed. Consulte DeepSpeed para obter um guia completo e uma referência de configuração.
from transformers import TrainingArguments
TrainingArguments(
...,
deepspeed="path/to/ds_config.json",
)O DDP é configurado diretamente por meio dos campos de TrainingArguments. Consulte DDP para obter mais detalhes.
from transformers import TrainingArguments
TrainingArguments(
...,
ddp_backend="nccl",
ddp_find_unused_parameters=False,
ddp_bucket_cap_mb=25,
ddp_timeout=1800,
)Próximas etapas
- Consulte DDP para treinamento paralelo de dados quando o seu modelo couber em uma única GPU.
- Consulte FSDP para particionar parâmetros, gradientes e estados do otimizador entre GPUs.
- Consulte DeepSpeed para otimização ZeRO e offloading.