Transformers documentation
Accelerate
Accelerate
Accelerate fournit une interface unifiée pour les backends d’entraînement distribué tels que FSDP ou DeepSpeed. Il détecte votre environnement (nombre de GPU, backend distribué, précision mixte, etc.) et configure automatiquement l’entraînement, que vous utilisiez 1 GPU avec DDP ou 8 GPU avec FSDP.
Accelerate enveloppe le modèle dans l'enveloppe distribuée appropriée, le déplace sur le bon appareil et crée un optimiseur compatible. Pendant l'entraînement, Accelerate utilise sa propre méthode backward pour gérer le mise à l'échelle des gradients pour la précision mixte. Trainer appelle les API Accelerate appropriées et délègue toute la mécanique distribuée à Accelerate.
Configurez Accelerate pour Trainer à l'aide d'un fichier de configuration Accelerate ou de TrainingArguments.
Fichier de configuration d'Accelerate
Exécutez la commande accelerate config et répondez aux questions concernant votre matériel et votre configuration d’entraînement. Cela crée un fichier default_config.yaml dans votre cache. L’exemple ci-dessous concerne 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: 4Exécutez accelerate launch avec un script basé sur Trainer, et Accelerate lit le fichier de configuration pour configurer l’entraînement. Les arguments fsdp_config et deepspeed sont inutiles car le fichier de configuration d’Accelerate couvre les mêmes paramètres.
accelerate launch train.pyLe accelerator_config accepte des paramètres qui ne disposent pas d’arguments de premier niveau dédiés. Par exemple, définissez non_blocking=True en même temps que dataloader_pin_memory() pour superposer le transfert de données et le calcul afin d’augmenter le débit du GPU.
from transformers import TrainingArguments
TrainingArguments(
...,
dataloader_pin_memory=True,
accelerator_config={
"non_blocking": True,
},
)TrainingArguments
Passez une configuration spécifique au backend à TrainingArguments. La méthode create_accelerator_and_postprocess() lit les paramètres et configure l’entraînement.
Passez un fichier de configuration JSON ou un dictionnaire à ~TrainingArguments.fsdp_config. Consultez FSDP pour un guide complet et une référence de configuration.
from transformers import TrainingArguments
TrainingArguments(
...,
fsdp=True,
fsdp_config="path/to/fsdp.json",
)Passez un fichier de configuration JSON ou un dictionnaire à ~TrainingArguments.deepspeed. Consultez DeepSpeed pour un guide complet et une référence de configuration.
from transformers import TrainingArguments
TrainingArguments(
...,
deepspeed="path/to/ds_config.json",
)DDP est configuré directement via les champs de TrainingArguments. Consultez DDP pour plus de détails.
from transformers import TrainingArguments
TrainingArguments(
...,
ddp_backend="nccl",
ddp_find_unused_parameters=False,
ddp_bucket_cap_mb=25,
ddp_timeout=1800,
)Étapes suivantes
- Voir DDP pour l’entraînement parallèle sur les données lorsque votre modèle tient sur une seule GPU.
- Voir FSDP pour le fractionnement des paramètres, des gradients et des états de l’optimiseur sur plusieurs GPU.
- Voir DeepSpeed pour l'optimisation ZeRO et le déchargement.