🌈Accelerate
2026-5-29
| 2026-5-29
字数 10872阅读时长 28 分钟
type
Post
status
Published
password
date
May 29, 2026
slug
summary
category
人工智能
URL
tags
工具
icon
Accelerate 为不同的分布式配置提供了统一的启动与训练接口,使您可以专注于 PyTorch 训练代码,而无需处理各类环境差异带来的复杂性。

概述

训练

配置环境

通常建议先运行 accelerate config,在 Accelerate 的缓存目录中创建并保存 default_config.yaml 文件。该文件用于存储训练环境的配置信息。
  1. 运行 accelerate config,生成default_config.yaml 文件
  1. 配置 default_config.yaml 文件
  1. 验证配置信息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:调度选项允许您控制性能分析的激活时间,可以避免收集过多的数据。可用键包括 waitwarmupactiverepeat 和 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
  1. 通过在 accelerate config 中指定 deepspeed config file 来集成 DeepSpeed 功能。您只需提供自定义配置文件或使用我们的模板。
  1. 通过 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
            python脚本

            其他并行方式的组合使用方法

            SP + TP 的标准组合
            SP + DP + PP 完整 4D 并行
            SP + DeepSpeed ZeRO
          • 工具
          • deepseed使用事件脉络概述
            Loading...