【DL17】ZeRO,FSDP深入
2026/9/6 2:30:59 网站建设 项目流程

今天我们围绕这一个问题来讲讲,为什么同样是 7B 模型,普通 Data Parallel 放不下,而 ZeRO / FSDP 却能把它拆开?

7B参数,也就是七亿个参数,如果使用adam+FP16训练,参数parameters大约14GB,梯度gradients占14GB,FP32 master weights占28GB,adam m占28GB,adam v占28GB(这些数据都是估计的),总共大约112GB,还没有算activation,cuda工作空间,临时Buffer。注意这里为什么有FP32参数,可以理解成FP32 精度更高,可以减少低精度更新带来的数值误差。

我们看看普通的DP,7B模型,8张GPU,每张GPU大约80GB,每张GPU大概需要承担112GB+,所以根本放不下,因为普通DP把同样的训练状态复制了8份。

我们再看看ZeRO,它将模型进行分片,zero-1只切optimizer states,Parameters → 复制,Gradients → 复制,Optimizer → 分片。刚才我们算的optimizer相关的大约占84GB,8张GPU分片,大约10.5GB,现在每张GPU大概只占14+14+10.5=38.5GB,下降十分明显,zero它将模型参数和梯度仍然每张GPU一份,但优化器状态不在重复保存。zero-2的Optimizer States + Gradients 都切,大约占26.25GB,zero-3全部切,直接112/8,直接降到原来的八分之一。我们都知道不可能只有好处,没有坏处,zero-3能实现显存的压缩是靠通信来换的。

不分片 ↓ 显存占用高 ↓ 通信少 高度分片 ↓ 显存占用低 ↓ 需要更多通信

现在我们再看看FSDP,fully shared data parallel,完全分片的数据并行,它的思想和zero-3非常接近,那么它怎么计算呢,假设有四张GPU,一个layer参数P,被拆成P0,P1,P2,P3,分配到四张GPU,当某个layer需要forward,all gather,获得完整的P,forward。
大致流程:

Shard ↓ All-Gather ↓ Compute ↓ Reshard ↓ Shard

举个实际例子,比如说有一套书,一共有四本,你先要看全部的书,都是你只有买一本书的钱,所以你可以再找三个想要买书的人,一人买一本,然后换着看,唯一的缺点就是需要和别人换,这就是通信换显存。

大型模型训练通常不会只依赖一种并行技术,而是多种组合。

LLM │ ┌────────┼────────┐ ↓ ↓ ↓ TP PP ZeRO │ │ │ 拆矩阵 拆Layer 拆状态

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询