ZeRO-DP: 零冗余并行训练
ZeRO-DP: 零冗余并行训练

论文地址:ZeRO: Memory Optimizations Toward Training Trillion Parameter Models
自transformer及后续bert、gpt等模型发布,神经网络模型变得越来越大、训练用数据量越来越大,模型难以使用单卡进行训练,因而并行训练技术也越来越受到。在神经网络训练中,显存是制约模型训练的关键元素之一,如果gpu显存足够大,那么我们根本就不需要进行并行训练,在一张卡上完成训练即可。然而现实情况是,目前最大显存大约在80GB左右,以FP16半精度能部署约40B大小的模型,更别提训练了。而且如何减少训练时占用的显存,是一件十分值得研究的事情。
注:本文中仅介绍了ZeRO-DP对于训练时显存的优化,对于ZeRO-R部分关于激活值、缓冲区、显存碎片管理等的优化暂不涉及。
显存花到了哪里?
要研究如何减少显存占用,需要先了解显存到底花在了哪里。首先是模型参数,假设模型参数量是
哪些可以省去?
: Optimizer State Partitioning
首先问题个问题:每张卡都需要保存所有的优化器状态吗?答案是:不需要。
假设我们有
由于每张卡只保留了
: Gradient Partitioning
同样的问题:每张卡都需要保存所有的梯度吗?答案是:不需要。
假设我们有
在进行参数更新时,首先经过一次reduce-scatter操作,获取每张卡对应梯度的聚合状态。然后进行对应参数更新。参数更新完后,经过一次all-gather操作,将更新后的参数分发到每张卡上,完成一轮训练。整个过程单卡通信量约为
: Parameter Partitioning
最后的问题:每张卡都需要保存所有的参数吗?答案是:不需要。
假设我们有
在进行前向传播时,首先进行一次All-gather操作,取回分布在别的卡上的参数,完成前向计算后,立即把不属于自己的参数抛弃,通信量
总结
显存 | 单卡通信量 | |
---|---|---|
朴素DP | ||
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现