Accelerate 是 HuggingFace 提供的统一分布式训练工具,旨在让 PyTorch 训练脚本以最小改动运行在多种硬件与分布式配置上。它的定位是简化分布式训练:同一份代码可以在 CPU、单 GPU、多 GPU、多节点、TPU 和 Apple MPS 等环境上运行,并在 DDP、DeepSpeed、FSDP、Megatron 等后端之间切换,而不需要为每种方案重写训练循环。
主要能力
代码改动极小。典型改造是在脚本中引入 Accelerator、创建实例,用 accelerator.prepare() 接管模型、优化器和数据加载器,并将反向传播替换为 accelerator.backward()。资料给出的示例显示,把单卡脚本扩展为多卡通常只需新增约 4 行代码。设备放置、混合精度等由库自动处理,用户无需手动把 batch 搬到 cuda。
统一启动方式。通过 accelerate launch train.py 即可运行;多 GPU 可用 --multi_gpu --num_processes 参数,多节点则配合 --num_machines、--machine_rank、--main_process_ip 等参数。也可用 --config_file 指向具体的 accelerate YAML 配置。
交互式配置。accelerate config 会依次询问机器类型(单卡/多卡/TPU/CPU)、机器数量、混合精度(no/fp16/bf16/fp8)、是否启用 DeepSpeed 等,并写入 accelerate YAML 配置(默认位于 ~/.cache/huggingface/accelerate/default_config.yaml)。
混合精度。可在 Accelerator 中指定 mixed_precision='fp16'(带梯度缩放)、'bf16'(更稳定、无需缩放)或 'fp8'(H100 及以上)。其余流程自动化;也可显式使用 accelerator.autocast()。
DeepSpeed ZeRO 集成。通过 DeepSpeedPlugin 传入 zero_stage、offload_optimizer_device、gradient_accumulation_steps 等参数;也可用 hf_ds_config 指向完整的 DeepSpeed JSON 配置。资料特别说明:DeepSpeed 的原始 JSON 配置应通过插件传入,而不是通过 --config_file;--config_file 期望的是 accelerate YAML。也可在 accelerate config 中选择 DeepSpeed → ZeRO-2,由它写出 accelerate YAML。
FSDP 支持。通过 FullyShardedDataParallelPlugin 设置 sharding_strategy(如 FULL_SHARD,相当于 ZeRO-3)、auto_wrap_policy(transformer_based_wrap、size_based_wrap、no_wrap)与 cpu_offload,再传给 Accelerator。也可通过 accelerate config 选择 FSDP → Full Shard → No CPU Offload。
梯度累积。设置 gradient_accumulation_steps,并用 with accelerator.accumulate(model) 上下文管理器包裹训练步骤,由库处理累积逻辑。有效批次大小为 batch_size × GPU 数量 × 梯度累积步数。
检查点保存。在分布式环境中,资料建议使用 accelerator.save_state('checkpoint/') 并仅在 accelerator.is_main_process 为真时保存,加载则用 accelerator.load_state('checkpoint/')。
使用方式
安装命令为 pip install accelerate。基本流程为:实例化 Accelerator,调用 prepare() 包装模型/优化器/数据加载器,将 loss.backward() 换成 accelerator.backward(loss),然后用 accelerate launch 启动。配置可通过 accelerate config 交互完成,或直接编写 accelerate YAML 并在启动时用 --config_file 指定。
适用场景
资料列出适合使用 Accelerate 的情况:希望以最简单方式做分布式训练;需要用同一份脚本适配多种硬件;使用 HuggingFace 生态;需要在 DDP、DeepSpeed、FSDP、Megatron 之间保持灵活性;需要快速原型验证。它也被 HuggingFace Transformers、TRL、PEFT 以及各项 HF 库使用。
限制与替代方案
若需要回调机制与高层抽象,可考虑 PyTorch Lightning;需要多节点编排与超参数调优,可考虑 Ray Train;需要直接的 API 控制与高级特性,可考虑 DeepSpeed;需要最大控制权与最少抽象,可考虑原生 DDP。
常见问题(资料列举)
手动把数据搬到设备是错误的做法,prepare() 之后由库自动处理;梯度累积必须使用 accumulate 上下文管理器,否则不生效;分布式检查点应使用 accelerator 提供的方法,并注意主进程判断;FSDP 下结果不一致时应确保随机种子一致,可用 from accelerate.utils import set_seed 并 set_seed(42)。
高级主题
资料提到 Megatron 集成(张量并行、流水线并行、序列并行)、自定义插件、性能调优(性能分析与内存优化)等,需参考相应文档。
硬件与启动器要求
CPU、单 GPU、多 GPU、多节点、TPU、Apple MPS 均受支持。启动器方面:DDP 使用内置的 torch.distributed.run;DeepSpeed 需 pip install deepspeed;FSDP 需 PyTorch 1.12+(内置);Megatron 需自定义配置。
相关资料
文档 https://huggingface.co/docs/accelerate,GitHub https://github.com/huggingface/accelerate,版本为 1.11.0+,示例位于 https://github.com/huggingface/accelerate/tree/main/examples。