模型层 开放阅读

FSDP

Fully Sharded Data Parallel

概念 ID
fully-sharded-data-parallel
更新时间
2026-05-29
来源数量
待补

FSDP

3 秒看懂

FSDP(Fully Sharded Data Parallel,全分片数据并行)是一种将模型参数、梯度、优化器状态在所有 GPU 上切成碎片存储的分布式训练策略,属于数据并行范式的变体。它让每一张 GPU 在训练过程中仅始终持有模型的一个分片,在需要完整参数的前向/反向计算时才临时通过通信操作“拼”出全量参数,计算完马上释放,从而用多卡显存换单卡可训模型规模。你可以把它理解成:传统数据并行是每张卡放一整份模型,FSDP 则是把一份模型拆碎后人人保管一小块,用到时再互相借阅。

3 分钟产业解释

大模型时代,单卡显存早已无法放下一整份千亿参数的模型,而传统数据并行要求每张卡都有一份完整的模型副本,即使买再多卡也无济于事。FSDP 正是在这一矛盾下由 PyTorch 团队(Meta)采纳零冗余优化器(ZeRO)中 Stage‑3的思想集成进官方框架的方案。

产业价值在于:它让开发者无需切换到更复杂的模型并行(张量并行、流水线并行),可以在通用的数据并行代码上做极小的改动,就将可训练参数量从几十亿拉升至数百亿级别。这极大地降低了超大模型训练的门槛,同时保留了数据并行高计算效率(GPU 利用率高)的优势。当前 FSDP 已成为主流大规模模型(如 LLaMA 系列、Stable Diffusion 等)的首选训练策略之一,与张量并行、流水线并行混合使用,支撑起了万亿参数规模的预训练。

15 分钟专家深入

FSDP 的本质是用通信换取显存。它重新组织了训练循环中的内存生命周期:

  • 分片状态:模型参数、梯度、优化器状态(如 Adam 的一阶/二阶矩)被均分到所有 GPU rank,平常以分片形式驻留,只有计算时才对需要的那一部分做全局收集。
  • 动态重构:前向传播需要某一层参数时,FSDP 触发 all‑gather 操作,从所有 rank 将该层参数碎片拼回全量,存入临时显存区;该层计算完成立即释放。反向传播对称执行,需要参数时重新 all‑gather,梯度计算后通过 reduce‑scatter 将梯度分片归约并分发到各 rank,随后释放重构的参数和梯度全量。
  • 优化器更新:每个 rank 只对自己保管的参数分片应用优化器步骤,不需额外通信。

这一设计使得在一个通信能力足够的集群里,模型的最大可训规模近似随 GPU 数量线性扩展,单卡只需承担总参数量/GPU 数的内存开销(加上少量临时 buffer 和激活内存)。同时,FSDP 可以按用户指定的策略选择哪些层做分片,支持混合精度、激活检查点、动态分片粒度(如 FlatParameter),以适应不同网络结构。

技术挑战集中在通信效率与计算的重叠:必须精心设计调度,使 all‑gather 和 reduce‑scatter 与矩阵乘法等计算异步执行,否则通信延迟将严重损害吞吐率。此外,大规模集群下的网络拓扑、集合通信库(NCCL)的性能对 FSDP 的训练速度有决定性影响。

技术原理(最深)

FSDP 的核心机制源自 DeepSpeed ZeRO‑Stage‑3,并在 PyTorch 内部实现为 torch.distributed.fsdp.FullyShardedDataParallel。其关键状态机如下:

      +-------------------------------+
      |  Sharded State (resident)     |
      |  - param shard                |
      |  - optimizer states shard     |
      +-------------------------------+
                  |
      [pre-forward: all-gather]
                  v
      +-------------------------------+
      |  Unsharded State (transient)  |
      |  - full parameter             |
      +-------------------------------+
                  |
          [layer computation]
                  |
                  v
      +-------------------------------+
      |  Discard full param;          |
      |  keep only param shard         |
      +-------------------------------+
                  |
      [pre-backward: all-gather again]
                  v
      +-------------------------------+
      |  Unsharded State (transient)  |
      |  - full parameter             |
      +-------------------------------+
                  |
         [backward pass]
                  |
                  v
      +-------------------------------+
      |  Grad computed as full;       |
      |  reduce-scatter to get grad   |
      |  shard per rank               |
      +-------------------------------+
                  |
                  v
      +-------------------------------+
      |  Sharded grad resident;       |
      |  optimizer step on local shard|
      +-------------------------------+

关键参数与机制(定性,无精确检索数字):

  • 分片策略:可对每个 nn.Module 独立设置分片策略,常将整个 transformer block 扁平成 FlatParameter 再分片,以减少通信次数和内存碎片。
  • 通信原语:前向用 all-gather,反向梯度同步用 reduce-scatter,两者均通过 NCCL 实现。注意:这里的通信模式与张量并行的 AllReduce 或 MoE 的 All-to-All 有本质区别。
  • 内存分解:单卡总内存 ≈ 分片参数 + 分片优化器状态 + 分片梯度 + 激活内存 + 临时重构 buffer。若完全不使用 FSDP,总内存 ∝ 模型全量 × 常数;使用 FSDP 后,前三项被除以 GPU 数量,激活内存仍然与 batch size 和层数相关,因此通常还需配合激活检查点。
  • 动态释放:通过注册前向/反向钩子,在 nn.Module 前后自动执行 ungather 和 free,对用户基本透明。

与模型并行混合:当单卡即使分片后仍无法容纳某些超长层或超大嵌入表时,会叠加张量并行(切分单层矩阵乘法)或流水线并行(切分层间)。FSDP 作为外层数据并行,与内层模型并行正交组合,形成 3D 并行。

技术演进史

  • 2017‑2019 年:PyTorch 的 DistributedDataParallel (DDP) 统治主流,通过 AllReduce 同步梯度,每张卡存储完整模型副本,最大模型规模受单卡显存硬限。
  • 2020 年:微软 DeepSpeed 发布 ZeRO 论文,提出将优化器状态、梯度、参数分片的三个阶段,开启“零冗余数据并行”时代。ZeRO‑Stage‑3 首次实现参数分片,让千亿模型训练成为可能。
  • 2021 年:PyTorch 社区推出 FSDP 早期版本,作为 torch.distributed.fsdp 模块,原生集成到 PyTorch 生态,降低了部署门槛。
  • 2022‑2023 年:FSDP 持续迭代,引入 SHARD_GRAD_OP、混合分片、通信计算 overlap、CPU offload 等特性,逐步对齐甚至部分超越 DeepSpeed 的 Stage‑3 性能。
  • 2024 年及以后:FSDP 成为 PyToch 官方推荐的大规模数据并行方案,与 torch.distributed 下的管道并行 torch.distributed.pipelining 等形成统一并行化 API,支持多模态大模型、MoE 等复杂架构的训练。

技术路线对比(量化表)

由于缺乏检索数据,以下为定性比较,基于公开技术原理(非本次检索证据)。

维度FSDP (ZeRO‑Stage‑3)DeepSpeed ZeRO‑3DDP (传统)张量并行 (Megatron‑LM style)
模型参数存储每卡仅存分片每卡仅存分片每卡存全量每卡存垂直切片的子矩阵
通信量级每层 3×参数量 (前向 all‑gather + 反向 all‑gather 和 reduce‑scatter)类似 FSDP每步 2×参数量 (AllReduce 梯度)每层多次 AllReduce,通信频繁
最大可训模型随 GPU 数近似线性扩展随 GPU 数扩展受单卡显存限制,无法扩展受单卡显存×模型并行度扩展
代码侵入性低,包裹模型即可低,配置 json 或调用 api非常低高,需手动切分矩阵维度
额外功能CPU offload,mixed precision,激活检查点同左,另有 ZeRO‑Infinity (NVMe offload)仅依赖于混合精度、DDP通常与流水线并行、数据并行结合
性能瓶颈通信延迟、all‑gather 与计算重叠程度同左多卡梯度的 AllReduce 带宽层内 AllReduce 的延迟,scale 受限
适用场景数百亿至千亿稠密模型,通用性最强同左十亿以内模型万亿模型必需,配合 3D 并行

上下游

上游

  • 集合通信库:NCCL(NVIDIA)、RCCL(AMD)、Gloo(CPU)等是 FSDP 通信高效性的命脉,直接影响训练吞吐率。
  • GPU 硬件:高带宽显存(HBM)、高速 NVLink/NVSwitch 实现跨 GPU 低延迟通信,是分片后性能能否维持的关键。
  • 深度学习框架:PyTorch 本身提供分布式基础设施,FSDP 的实现深度依赖于 ProcessGroupTensor 分片原语。

下游

  • 大规模预训练:用于训练 GPT、LLaMA、Gemma、Falcon 等语言模型,以及扩散模型等生成模型。
  • 微调与定制:在参数高效微调(LoRA、QLoRA)场景,FSDP 可用于基座模型的分片,降低微调整体显存。
  • AI 云服务 / 算力平台:云厂商在其 AI 平台(如 Amazon SageMaker、Google Cloud TPU/GPU 服务)中集成 FSDP 作为大规模训练的首选策略,为用户提供开箱即用的方案。

关键指标

  • 可扩展性(scale-out factor):定义为最大可训参数量与单卡显存之比。理想情况下接近 GPU 数量,实际受通信开销、激活内存、临时 buffer 影响可能打折扣。
  • 模型 FLOPS 利用率(MFU):反映计算资源实际用于矩阵运算的比例。FSDP 引入的通信易降低 MFU,通信与计算的重叠程度是决定 MFU 的关键。
  • 显存峰值:通常由全量参数重构时的临时 buffer 与激活内存共同决定,可通过调整分片粒度、批量大小、激活检查点控制。
  • 通信带宽利用率:受到 all‑gather / reduce‑scatter 数据量、网络拓扑、NCCL 算法选择的影响。
    注:具体数值因硬件配置、模型结构差异极大,无法给出普适数字。

供需与市场数据

由于本次联网检索失败,无法提供基于最新报告的市场规模或采用率数字。从已知产业趋势推算(定性,[行业观察]而非精确数据):

  • 需求侧:随着百亿、千亿参数稠密模型成为云厂商、AI 实验室和大型企业的“入场券”,能最大限度降低单卡显存需求且复用数据并行优势的 FSDP/ZeRO 已成为刚需。几乎所有基于 Transformer 的大模型训练流程都直接或间接使用了 FSDP 或其等效机制。
  • 供给侧:PyTorch 官方 FSDP 因原生集成和质量保障,在学术和工业界份额快速攀升,挤压了 DeepSpeed 的部分空间,但 DeepSpeed 仍凭借更多优化特性(如 ZeRO‑Infinity 等)保持强竞争力。此外,JAX 生态下的 pjit/xmap 和 TensorFlow 的 tf.distribute 也存在类似思想,但生态集中度不及 PyTorch 家族。
  • 无精确数据:FSDP 作为软件特性不单独销售,其经济价值体现在所支撑的模型规模和业务收入上,未形成独立市场统计。

代表公司与资本映射

  • Meta (PyTorch 核心维护方):FSDP 的开发者与主要推动者,通过 PyTorch 生态服务于内部(LLaMA 训练)和外部开发者,影响整个 AI 基础设施。
  • 微软(DeepSpeed 团队):FSDP 的直接竞品 ZeRO 的缔造者,DeepSpeed 被广泛用于 Azure 之上的大模型训练,两家在技术路线和生态上有竞争也有协作(如 PyTorch 与 DeepSpeed 互操作性)。
  • NVIDIA:GPU 硬件与 NCCL、Megatron‑LM 的提供方,通过优化 NCCL 集合操作直接影响 FSDP 的实测性能,同时其 Megatron 框架与 FSDP 可组合使用。
  • 云厂商(AWS、GCP、Oracle 等):在其 AI 训练服务中提供预配置的 FSDP/DeepSpeed 环境,吸引大中型模型训练客户,以此带动计算实例的消耗。
  • 大模型创业公司(OpenAI、Anthropic、Cohere 等):内部训练栈极少会直接使用未修改的 FSDP,但常在其基础设施中自建类似 FSDP 的“分片数据并行”模块;这些公司的技术选择反向驱动开源社区的改进。

投资逻辑

  1. 算力基础设施的乘数效应:FSDP 等技术让同样数量 GPU 能训练更大模型,单位算力的产出复杂度提升,降低了大模型创新的算力门槛。这一效率放大效应使提供 GPU 集群的云厂商和托管服务商受益,因为更多客户能以可接受的成本进入大模型赛道。
  2. 框架生态的护城河:掌握 FSDP 这类核心并行策略的框架(PyTorch)强化了用户粘性,进而带动其背后的公司(Meta)在 AI 标准制定上的话语权,以及与之深度绑定的硬件/云生态。
  3. 软件优化能力成为竞争力:投资于能够将 FSDP 等方案优化到极致的团队(如能够大幅提升 MFU、降低通信损耗),可能带来训练成本的大幅下降,这在大模型价格战背景下是结构性优势。
  4. 风险点:该领域技术演进快,可能出现颠覆性的并行策略或硬件架构(如可扩展的共享内存池、硅光互联)弱化纯数据并行的价值;但短期内 FSDP 仍是主力。

常见误读纠偏

  1. “FSDP 就是数据并行 + 模型分片”
    这不全面。传统数据并行中每张卡拥有相同模型,仅梯度同步用 AllReduce。而 FSDP 是在数据并行框架内深度嵌入参数分片与动态重构机制,通信模式变为每层的 all‑gather + reduce‑scatter,通信量从 2×全参数量变为 3×全参数量(因为参数前向需 all‑gather,反向再 all‑gather 继而梯度 reduce‑scatter),但换来显存呈线性削减。两者的通信拓扑和数据流完全不同。

  2. “用了 FSDP 就可以无限增大模型”
    错误。FSDP 缓解了参数与优化器状态的内存压力,但激活内存仍按序列长度和批量大小增长,且重构参数所需的临时 buffer 也需要额外空间。若单卡激活内存已满,即使参数分片为零也无法训练。因此通常须配合激活检查点、流水线并行或其他策略才能持续扩大模型。

  3. “FSDP 和 DeepSpeed ZeRO‑3 完全一样”
    核心算法相同,但工程实现和默认配置存在差异。FSDP 在通信调度、混合精度集成、参数展平方式等方面有自己的设计(例如将整个 transformer 模块的参数展平成 FlatParameter 以减少通信次数),性能特性在不同硬件和模型下可能与 DeepSpeed 不同。两者都在快速迭代,不可简单视为等价。

学习路径

  1. 基础储备:理解 PyTorch 的 DataParallelDistributedDataParallel 原理,掌握集合通信原语(all‑reduce, all‑gather, reduce‑scatter)与 NCCL 基础。
  2. 核心论文:阅读 ZeRO 论文《ZeRO: Memory Optimizations Toward Training Trillion Parameter Models》,理解三种分片状态的内存节省逻辑。
  3. 官方教程:PyTorch 官方 FSDP 入门教程与 API 文档,通过小规模示例(如 ResNet、GPT‑2)动手测试,观察显存占用变化与通信开销。
  4. 进阶实战:研究 torch.distributed.fsdp.wrap 策略、auto_wrap_policy,尝试对 Hugging Face 模型应用 FSDP,结合混合精度训练的 O2/O3 模式,理解混合分片与通信重叠。
  5. 系统优化:分析 NCCL 性能 profiling 结果,学习如何调优通信与计算的重叠 (limit_all_gathers)、使用 CPU offload 等技术,以及搭建 3D 并行的混合训练栈。
  6. 追踪前沿:关注 PyTorch 仓库 FSDP 相关的 PR 和 RFC,以及各大模型开源项目的训练配置(如 Meta 发布的 LLaMA 训练脚本),了解生产级调优实践。

一句话总结

FSDP 是现代大模型训练栈中“低成本高扩展性”的标配组件:它把模型拆碎了存,需要时再拼,让相同的 GPU 集群能喂进大得多的模型,而开发者几乎不用改变书写模型循环的习惯。

延伸阅读与来源

  • ZeRO 论文:Rajbhandari et al., “ZeRO: Memory Optimizations Toward Training Trillion Parameter Models”, SC20.
  • PyTorch FSDP 官方文档:https://pytorch.org/docs/stable/fsdp.html
  • Meta 开源的 LLaMA 训练代码(如 torchtitan 库)中的 FSDP 配置示例。
  • DeepSpeed 官方文档 ZeRO‑3 章节。
  • NVIDIA Megatron‑LM 项目中关于张量并行与数据并行(含分片)组合使用的技术报告。

注:由于本次联网检索未返回结果,以上内容均基于公开技术原理给出定性描述,未引用具体数值或硬性指标。如需最新性能对比或产业采用率数据,建议查询 [PyTorch 社区报告]、[云厂商技术白皮书] 等原始来源。

source: 公开披露与公开资料整理 本页仅用于产业链学习、信息检索和研究辅助;不构成投资建议,不预测涨跌,不提供买卖、仓位或目标价建议。
完整概念页 复盘 13 节结构 公司投研页 沿产业链找到受益公司 投资课 把概念转成可跟踪模型