Deepseek-V3的显存优化

数字化转型网(Professionalism Achieves Leadership 专业造就领导者)人工智能专题

与全球关注人工智能的顶尖精英一起学习!数字化转型网建立了一个专门讨论人工智能技术、产业、学术的研究学习社区,与各位研习社同学一起成长!欢迎扫码加入!

一、FP8 低精度训练:混合训练框架和精细量化策略

1、混合精度训练框架

在 DeepSeek-V3 的训练中,对于占据大量计算量的 GEMM(通用矩阵乘法)操作,采用 FP8 精度执行,FP8 数据类型具有较低的内存占用和更快的计算速度,所以可以显著提升计算效率、降低显存开销;同时为了确保训练的稳定性,对于少数对精度要求比较高的关键操作,如嵌入模块(将输入 Token 转换为向量表示)、注意力操作等,仍保持高精度(BF16/FP32)计算

2、精细量化策略

FP8 虽然在训练速度和显存占用方面优势明显,但是由于需要采取措施对训练数据、模型参数、中间激活值进行量化操作,容易在训练过程中出现因量化误差导致的模型发散等问题,影响训练稳定性和模型性能,DeepSeek-V3 在训练过程中采用了分块量化、块级量化、高精度累加三种精细量化策略解决这个问题。

a)分块量化:数据划分粒度相对较细,将数据划分为多个小块,然后对每个小块分别进行量化操作,这种方式能更精细地适应数据的局部特征,减少量化误差。

b)块级量化:数据划分粒度相对较粗,对更大的块进行统一量化处理,这种方式更关注数据的整体特征和分布情况,通过对较大块的数据采用相同的量化参数进行量化,可以简化量化计算过程,降低计算复杂度。

c)高精度累加:在一些关键计算步骤中,虽然中间计算过程使用了 FP8 精度以提高计算效率,但在进行累加等操作时,会将 FP8 数据转换为更高精度的数据类型(BF16/FP32)进行累加,然后再根据需要转换回 FP8 精度进行后续计算,这种机制可以有效控制量化误差的积累。

二、选择重计算:间隔重计算和选择性重计算优化

1、基本概念

在训练过程中,需要占用大量的显存来存储模型参数、中间结果等数据,当模型参数规模较大或者训练数据量较多时,可能会出现显存不够用的情况;所以业界会采用重计算优化方法,即在前向传播时不保存上述的中间结果数据,而是在反向传播需要的时候重新计算它们,大大减少中间结果所占用的显存空间。

2、实现方案

比较粗暴的实现方案是完全重计算,这种方案因为计算量较大,会大幅增加训练全过程时间,所以业界一直在探索更为高效的选择重计算方案,DeepSeek-V3 在训练过程中主要应用了间隔重计算和选择性重计算两种优化手段。

a)间隔重计算:即“隔一层重计算一次” ,在反向传播中对一半层的输入输出进行重计算,另一半层按照传统方式保存中间结果数据。

b)选择性重计算:大模型每一层的计算,通常由类似 RMSkernel 的计算强度较弱的部分(包含平方、求和、开方等计算操作,用于稳定训练过程、加速模型收敛)和计算强度较强的 GEMM 矩阵乘法部分组成,他们虽然都会产生中间结果,但是计算成本差异较大;通常 RMSkernel 的计算时间占比小、但单位计算的显存占用大,而GEMM的计算时间占比大、但单位计算的显存占用小;所以选择性重计算方法重点是针对 RMSkernel 相关的部分算子进行重计算,获得最大的性价比。

三、EMA显存优化:异步处理与显存卸载优化

1、基本概念

EMA是指数移动平均(Exponential Moving Average),它对于模型训练过程中每一步更新得到的参数,计算指数加权平均值,得到一组新的参数,用于监测训练方向,避免噪声对于模型参数更新的影响,以得到更加稳定、泛化能力更强的参数;由于EMA需要额外维护一组参数,所以会占用一定的显存空间。

2、实现方案

DeepSeek-V3 在训练过程中采用了异步处理和显存卸载方法,优化了EMA的显存占用。

a)异步处理:由于EMA的计算过程并不需要训练过程中实时产生的数据,所以可以独立于前向传播和反向传播而开展,DeepSeek采用异步处理方式,让EMA计算过程与训练过程并行开展。

b)显存卸载:基于上述异步处理的基础,可以将EMA计算从GPU显存卸载至CPU,即在每一轮训练结束后,将模型参数传递给CPU,在 CPU 上计算 EMA 参数,然后将更新后的 EMA 参数存储在 CPU 内存中,减少GPU的显存占用。

四、头尾参数共享:embedding 层和 lm_head 层共享参数的优化策略

1、基本概念

embedding层位于模型首端,核心作用是把离散的 Token 转换为连续的向量表示,实现这一转换依靠的是一个可学习的权重矩阵,其大小为 vocab_size * hidden_size(词表大小 * 每个 Token 对应的嵌入向量的维度);lm_head 层位于模型的末端,将模型输出的嵌入向量重新映射回 Token 的概率分布,以便计算损失函数,其实现方式同样是依赖一个大小为 vocab_size * hidden_size 的权重矩阵。

2、实现方案

头尾参数共享,指的是让 embedding 层和 lm_head 层使用同一个权重矩阵,这种优化方案由于减少了参数存储量,与之相关的梯度、优化器状态和参数备份等占用的显存也会相应减少,且共用的权重矩阵有助于模型学习到更稳定和通用的 Token 表示,从而提高模型的性能和泛化能力。

声明:本文来自Zero417,版权归作者所有。文章内容仅代表作者独立观点,不代表数字化转型网立场,转载目的在于传递更多信息。如有侵权,请联系我们。数字化转型网www.szhzxw.cn

本文由数字化转型网(www.szhzxw.cn)转载而成,来源于Zero417;编辑/翻译:数字化转型网(Professionalism Achieves Leadership 专业造就领导者)默然。

免责声明: 本网站(http://www.szhzxw.cn/)内容主要来自原创、合作媒体供稿和第三方投稿,凡在本网站出现的信息,均仅供参考。本网站将尽力确保所提供信息的准确性及可靠性,但不保证有关资料的准确性及可靠性,读者在使用前请进一步核实,并对任何自主决定的行为负责。本网站对有关资料所引致的错误、不确或遗漏,概不负任何法律责任。 本网站刊载的所有内容(包括但不仅限文字、图片、LOGO、音频、视频、软件、程序等) 版权归原作者所有。任何单位或个人认为本网站中的内容可能涉嫌侵犯其知识产权或存在不实内容时,请及时通知本站,予以删除。http://www.szhzxw.cn/76746.html
联系我们

联系我们

17717556551

邮箱: editor@cxounion.org

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部