type
Post
status
Published
password
date
May 29, 2026
slug
summary
category
人工智能
URL
tags
工具
icon
Accelerate 为不同的分布式配置提供了统一的启动与训练接口,使您可以专注于 PyTorch 训练代码,而无需处理各类环境差异带来的复杂性。
概述
训练
配置环境
通常建议先运行
accelerate config,在 Accelerate 的缓存目录中创建并保存 default_config.yaml 文件。该文件用于存储训练环境的配置信息。- 运行
accelerate config,生成default_config.yaml文件
- 配置
default_config.yaml文件
- 验证配置信息
accelerate test
python脚本
启动命令
评估
分布式设置中的每个设备只接收一部分评估数据
推理
空权重初始化
不加载真实模型权重,只在内存里初始化大模型结构。几乎不耗显存
加载并分发权重
load_checkpoint_and_dispatch() 函数会将完整或分片的检查点加载到空模型中,并自动把权重分发到所有可用设备上。device_map参数决定了每个模型层的位置,指定"auto"会首先将它们放在 GPU 上,然后是 CPU,如果仍然没有足够的内存,则最后放在硬盘上作为内存映射的张量。
-
no_split_module_classes参数来指示哪些模块不应被拆分到不同设备上
追踪器
追踪器(Tracker)是对实验日志工具的统一封装,用于在多进程 / 多卡训练中安全、方便地记录 loss、指标、超参数与日志,并将其写入 TensorBoard、WandB 等平台。
目前
Accelerate 开箱支持八种追踪器。TensorBoard、WandB、Trackio、CometML、Aim、MLFlow、ClearML、DVCLive性能分析器
性能分析器(Profiler)用于在训练和推理期间收集性能指标,帮助我们更清楚地定位哪些模型算子的开销最大。
内存使用
FLOPS使用
GPU分析
长时间运行的任务
跟踪所有执行可能会很慢,并导致非常大的跟踪文件。为避免这种情况,请使用可选参数。
schedule_option:调度选项允许您控制性能分析的激活时间,可以避免收集过多的数据。可用键包括wait、warmup、active、repeat和skip_first。性能分析器将跳过前skip_first步,然后等待wait步,然后对接下来的warmup步进行预热(该阶段同样不记录数据),然后对下active步进行主动记录,然后重新回到wait步开始循环。通过repeat参数指定可选的循环次数,零值表示循环将一直持续到性能分析完成。
on_trace_ready:指定一个函数,该函数接受性能分析器的引用作为输入,并在每次新的跟踪准备就绪时由性能分析器调用。
故障排除
日志记录
日志可协助定位错误根源。多进程分布式场景下,日志统一采集存在难度,Accelerate 内置
logging()工具,能够保障日志同步输出。常见故障
张量形状不匹配
张量形状不匹配是在分布式设置中导致代码长时间挂起的常见问题。
提前停止
对于分布式训练中的提前停止,如果每个进程都有特定的停止条件(例如验证损失),则可能不会在所有进程之间同步。
内存不足
find_executable_batch_size() 工具会重试因 OOM(内存不足)条件而失败的代码,并自动降低批次大小。训练
常用配置
梯度累计
方式1
方式2
在大小可变的训练样本上进行梯度累积
混合精度
梯度同步
本地 SGD
各个进程会先独立更新自身模型权重,达到指定步数后再统一对所有权重取平均值完成同步,该方式能大幅降低通信开销、提升训练速度,尤其适配没有 NVLink 这类高速互联的设备,同时它无需调整批次大小、学习率与学习率调度器,还能够和梯度累积搭配使用。
执行流程
在单个进程上执行
某些代码只需要在一台机器上运行一次,例如打印日志语句或仅在本地主进程上显示一个进度条。
在所有进程上执行一次
在特定进程上执行
使用
on_process() 方法并指定进程索引来执行函数。保存&恢复
模型
恢复DataLoader
从检查点恢复后,如果状态在 epoch 中途保存,您可能希望从活动
DataLoader 的特定点恢复。并行方式
FSDP
FSDP(Fully Sharded Data Parallel)是 PyTorch 大模型分布式训练方案,分片参数、梯度、优化器状态到多张 GPU,大幅降低单卡显存占用,支持超大模型与更大 batch 训练,Accelerate 已原生集成。
accelerate_fsdp.yaml
参数名称 | 功能说明 |
fsdp_sharding_strategy | 分片策略:
・FULL_SHARD:分片参数、梯度、优化器状态(对应 ZeRO-3)
・SHARD_GRAD_OP:仅分片梯度、优化器状态(对应 ZeRO-2)
・NO_SHARD:不分片,等价原生 DDP
・HYBRID_SHARD:节点内全分片,节点间保留完整模型副本
・HYBRID_SHARD_ZERO2:节点内分片梯度 + 优化器,节点间保留完整副本 |
fsdp_offload_params | 是否将参数、梯度卸载到 CPU,进一步降低 GPU 显存占用 |
fsdp_auto_wrap_policy | 模型自动分片包裹策略:
・TRANSFORMER_BASED_WRAP:按 Transformer 层自动包裹
・SIZE_BASED_WRAP:按参数数量阈值包裹
・NO_WRAP:不自动包裹,需手动控制 |
fsdp_transformer_layer_cls_to_wrap | 配合 TRANSFORMER_BASED_WRAP 使用,指定需要被 FSDP 包裹的 Transformer 层类;共享权重模块(如嵌入层)禁止拆分到不同包裹单元 |
fsdp_min_num_params | 配合 SIZE_BASED_WRAP 使用,设置触发分片包裹的最小参数阈值 |
fsdp_backward_prefetch_policy | 反向传播参数预取策略,优化通信与计算重叠 |
fsdp_forward_prefetch | 前向传播时,是否提前预取下一轮 all-gather 数据;仅支持静态图模型 |
fsdp_state_dict_type | 模型 / 优化器断点存储格式:
・FULL_STATE_DICT:rank0 保存完整权重文件
・LOCAL_STATE_DICT:仅保存当前进程的本地分片
・SHARDED_STATE_DICT:各进程分别保存对应分片 |
fsdp_use_orig_params | 支持分层冻结、参数高效微调(LoRA)、多优化器参数组;允许参数 requires_grad 状态不统一 |
fsdp_cpu_ram_efficient_loading | 仅 Transformer 模型生效;开启后仅主进程加载权重,其余进程空初始化,降低内存占用 |
fsdp_sync_module_states | 所有 FSDP 包裹单元从 rank0 广播参数,保证多卡权重一致 |
run_fsdp.py
运行python脚本
DeepSpeed插件
Accelerate 通过 2 种方式集成 DeepSpeed
- 通过在
accelerate config中指定deepspeed config file来集成 DeepSpeed 功能。您只需提供自定义配置文件或使用我们的模板。
- 通过
deepspeed_plugin集成。它支持部分 DeepSpeed 功能,并为其余配置使用默认选项。
ZeRO 阶段-2 DeepSpeed 插件示例
方式1:accelerate形式
方式2:deepspeed_config_file形式
或者我们可以向deepspeed_config_file传输config_file文件。
- Accelerate配置文件
- deepspeed_config_file文件内容
- 启动命令
使用 DeepSpeed 运行多个模型
使用 Accelerate 和 DeepSpeed 运行多个模型。知识蒸馏,即训练一个较小的学生模型来模仿一个更大、性能更好的教师模型。如果学生模型适合单个 GPU,我们可以使用 ZeRO-2 进行训练,并使用 ZeRO-3 来分片教师模型以进行推理。这比为两个模型都使用 ZeRO-3 要快得多。
教师模型zero3_config.json
学生模型zero2_config.json
train_distill.py
运行train_distill.py
Megatron-LM
megatron_config.yaml
配置字段 | 含义 / 作用 | 并行类型 |
megatron_lm_tp_degree | 张量并行:把单层模型权重切分到多 GPU | 张量并行 TP |
megatron_lm_pp_degree | 流水线并行:把模型层按顺序切分到多 GPU | 流水线并行 PP |
megatron_lm_sequence_parallelism | 序列并行:按句子长度维度分片,配合 TP 使用 | 序列并行 SP |
megatron_lm_use_distributed_optimizer | 分布式优化器:优化器状态分片存储 | 数据并行 DP |
megatron_lm_recompute_activations | 激活重计算:丢弃中间激活,反向时重算 | 通用优化 |
megatron_lm_num_micro_batches | 流水线微批次:PP 调度的小批次数量 | 流水线并行 PP |
megatron_lm_gradient_clipping | 梯度裁剪:防止训练时梯度爆炸 | 训练稳定性 |
megatron_full_train.py
配置文件说明
parallelism_config 是 Accelerate 0.28.0 引入的统一并行配置体系,整合了所有模型并行 + 数据并行维度,替代了之前分散在不同插件中的配置。它支持任意组合的并行策略,所有参数都可以在 yaml 配置文件中设置,也可以在代码中通过ParallelismConfig类传入。基础并行维度
配置文件参数名 | 代码参数名 | 默认值 | 含义与说明 |
parallelism_config_dp_replicate_size | dp_replicate_size | 1 | 数据并行复制度:传统 DDP 的并行度,每个副本拥有完整模型,数据分片训练。设为 1 禁用 DDP。 |
parallelism_config_dp_shard_size | dp_shard_size | 1 | 数据分片并行度:FSDP/ZeRO 的模型分片度,模型参数被切分到多个 GPU 上。设为 1 禁用 FSDP。 |
parallelism_config_tp_size | tp_size | 1 | 张量并行度:层内维度切分,将线性层 / 注意力头分配到不同 GPU。设为 1 禁用张量并行。 |
parallelism_config_sp_size | sp_size | 1 | 序列并行度:序列长度维度切分,专门用于超长上下文训练。设为 1 禁用序列并行。 |
parallelism_config_cp_size | cp_size | 1 | 上下文并行度:最新的上下文并行技术,进一步拆分超长序列。设为 1 禁用上下文并行。 |
序列并行 (SP) 专属参数
仅当
sp_size > 1时生效,目前仅支持deepspeed后端(Ulysses 算法)配置文件参数名 | 代码参数名 | 默认值 | 含义与说明 |
parallelism_config_sp_backend | sp_backend | "deepspeed" | 序列并行后端,目前唯一有效值是 "deepspeed" |
parallelism_config_sp_seq_length_is_variable | sp_seq_length_is_variable | True | 是否支持动态序列长度。设为 False 时所有样本必须长度相同,性能略优。 |
parallelism_config_sp_attn_implementation | sp_attn_implementation | "sdpa" | 注意力实现方式,可选值:"sdpa"、"flash_attention_2"。必须与模型加载时的 attn_implementation一致。 |
parallelism_config_sp_seq_length | sp_seq_length | None | 固定序列长度,仅当 sp_seq_length_is_variable=False时需要设置。 |
上下文并行 (CP) 专属参数
配置文件参数名 | 代码参数名 | 默认值 | 含义与说明 |
parallelism_config_cp_comm_strategy | cp_comm_strategy | "allgather" | 上下文并行通信策略,可选值:"allgather"、"alltoall"。"alltoall" 在长序列下性能更好。 |
张量并行 (TP) 专属参数
配置文件参数名 | 代码参数名 | 默认值 | 含义与说明 |
parallelism_config_tp_enable_async_communication | tp_enable_async_communication | True | 是否启用异步通信,隐藏通信延迟。 |
parallelism_config_tp_use_ring_exchange | tp_use_ring_exchange | False | 是否使用环形交换通信,在大 TP 度下性能更好。 |
完整配置文件示例(生产级 4D 并行)
示例
张量并行
通常使用Megatron-LM。
完整示例
配置文件
python代码
其他并行方式的组合使用方法
TP + DP(数据并行)= 2D 并行基础
TP + DeepSpeed ZeRO 配置
TP + PP(流水线并行)配置
流水线并行
完整示例
配置文件
python脚本
其他并行方式的组合使用方法
PP + DP(数据并行)
PP + TP = 2D 模型并行
3D 并行(TP+PP+DP)
PP + DeepSpeed ZeRO
序列并行
完整示例
配置文件
- 方式一:Megatron-LM SP
- 方式二:ALST/Ulysses SP