Transformers documentation
DDP
Comece agora
Classes base
Modelos
Pré-processadores
Inferência
Pipeline API
API de geração
Otimização
Conversar com modelos
Serving
Treinamento
Hardware
Quantização
Integrações com o ecossistema
Recursos
API
You are viewing main version, which requires installation from source. If you'd like
regular pip install, checkout the latest stable version (v5.22.1).
DDP
DistributedDataParallel (DDP) mantém uma cópia completa do modelo em cada GPU. Cada GPU processa um fragmento de dados não sobreposto com uma passagem de ida e uma de volta. Antes do passo do otimizador, um all-reduce faz a média dos gradientes entre todas as GPUs para que todas as cópias do modelo permaneçam idênticas. Use DDP quando o seu modelo couber em uma única GPU.
┌─────────────────┐
│ training data │
└────────┬────────┘
┌──────────────────┼──────────────────┐
│ shard 0 │ shard 1 │ shard 2
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ model │ │ model │ │ model │
│ (copy 0) │ │ (copy 1) │ │ (copy 2) │
│ GPU 0 │ │ GPU 1 │ │ GPU 2 │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ grads │ grads │ grads
└──────────────────┼──────────────────┘
all-reduce
(average gradients)
┌──────────────────┼──────────────────┐
▼ ▼ ▼
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ optimizer │ │ optimizer │ │ optimizer │
│ step │ │ step │ │ step │
└─────────────┘ └─────────────┘ └─────────────┘
(identical) (identical) (identical)O DDP é ativado automaticamente quando você inicia com um lançador multiprocessos, como o Accelerate.
# 4 GPUs on one machine
accelerate launch --num_processes 4 train.pyConfigurar DDP
Passe estes TrainingArguments para controlar o comportamento do DDP.
gradient_accumulation_steps()determina quando executar o all-reduce. O Trainer ignora o all-reduce nos passos intermediários de acumulação e o executa apenas no micro-lote final. Por exemplo, comgradient_accumulation_steps=4, o all-reduce é executado a cada 4 passes de retropropagação.~TrainingArguments.ddp_find_unused_parameterspercorre o grafo do autograd no final da passagem de frente para parâmetros que não receberão um gradiente e os marca como prontos para que não bloqueiem o all-reduce. Não use com~TrainingArguments.gradient_checkpointingporque o gradient checkpointing descarta as ativações intermediárias e as recalcula em tempo real.~TrainingArguments.ddp_bucket_cap_mbé o tamanho do bucket para agrupar gradientes em uma única operação all-reduce durante a passagem reversa. Um bucket maior significa menos chamadas de all-reduce e menos sobrecarga de lançamento.~TrainingArguments.ddp_broadcast_bufferssincroniza os buffers do modelo (como as estatísticas de execução do BatchNorm) do rank 0 para todos os outros ranks no início de cada forward pass. Desative se o seu modelo usar apenas LayerNorm. Não use com~TrainingArguments.gradient_checkpointing.~TrainingArguments.ddp_backenddefine o backend de comunicação. Use"nccl"para GPUs NVIDIA (padrão e mais rápido),"gloo"para treinamento em CPU ou depuração, e"xccl","hccl"ou"cncl"para outros hardwares.ddp_timeout()define o limite de tempo para que todos os processos e operações (all-reduce, broadcast) sejam concluídos. Se um processo travar, como ao carregar um modelo grande lentamente, o timeout gera um erro em vez de bloquear indefinidamente.
from transformers import TrainingArguments
args = TrainingArguments(
...,
gradient_accumulation_steps=4,
ddp_backend="nccl",
ddp_find_unused_parameters=False,
ddp_bucket_cap_mb=25,
ddp_broadcast_buffers=True,
ddp_timeout=1800,
)Próximas etapas
- Veja FSDP para treinar modelos grandes demais para caber em uma única GPU.
- Consulte DeepSpeed para otimização ZeRO e offloading.
- Leia o capítulo Paralelismo de Dados do The Ultra-Scale Playbook para obter mais informações sobre como o DDP funciona.