ICLR Spotlight|Facebook提出无损INT8优化器,单机可以跑千亿参数模型了??(2)
扫一扫
分享文章到微信
扫一扫
关注99科技网微信公众号
我们不禁要问,模型训练时是谁占据了大量的显存?
10亿 (1 Billion)参数量的模型使用Adam优化器进行训练,所有数据使用FP32进行存储,模型权重(Model weights)和梯度(Gradients)分别需要4GB存储空间,Adam优化器保存了梯度的一阶矩估计(First Moment Estimation,即梯度的均值)和二阶矩估计(Second Moment Estimation,即梯度的未中心化的方差)又分别需要4GB存储空间。Adam优化器占据了50%的显存空间!!!
如何缩减Adam优化器的显存占用无疑成为了重点,微软提出了ZeRO-Offload方案把优化器参数卸载到CPU内存中,那是否还有其他方法呢?使用半精度或者FP8来代替全精度数据类型去存储参数?实际上,一种称为量化的方法已经广泛应用于深度学习中。
那么,下一个问题,什么是量化?
量化: 通俗理解就是将权值参数或中间激活值用更少位数的数据类型近似表示FP32浮点型数据。16年Deep Compression论文中首次提出参数量化方法,使用K-means聚类方法将参数矩阵进行聚类,使用聚类中心来代替原值,模型只需存储聚类的index和聚类中心centroid,从而达到压缩参数的目的,一般来讲为了更好的聚类首先会将参数归一化到某个区间范围,让不同张量值的量级保持一致。
这是量化操作的一种方案,反过来从量化数值转化为原始数值的过程称为反量化,量化可以有效降低内存消耗和计算强度但也带来了严重的精度损失问题。
▲Deep Compression
当优化器遇到了量化,思路很简单,但是优化很难,FP16优化器已经很不稳定,但Facebook直接使用FP8优化器,直接减少38%的显存占用,需要更少的模型训练时间,但拥有和FP32优化器完全相当的效果。
三个方法构建无损FP8优化器
FP8优化器会以低精度的状态存储在显存中,在参数更新时会反量化为FP16的高精度状态,从而既能够高精度的更新参数,也可以尽可能缩减存储空间,如下图所示。为了构建无损FP8优化器,作者提出了逐块量化和动态量化的量化策略,以及稳定化词嵌入层的方法。
逐块量化 Block-wise Quantization
量化的第一步需要将张量归一到[-1,1]范围内,常见的归一化需要将整个张量的缩减,但这样多GPU核心同步会带来一定的通信消耗。块级动态量化将输入张量划分为2048大小的块来降低这个代价,每个块归一化可以独立的计算,不需要在核心之间同步,提供了吞吐量。此外,它对输入张量中的异常值也有更强的鲁棒性,在逐块量化中,异常值的影响被限制在单个块上。因此,大多数比特在其他块中被有效地使用,保证了量化的鲁棒性和精确性。
99科技网:http://www.99it.com.cn

北京时间7月20日早间消息,据报道, 美国企业 MetaX LLC 公司起诉 Meta 商标侵权
快资讯2022-07-20

北京时间 7 月 19 日下午消息,据报道,亚马逊今日对 10000 多个 Facebook 群组的管
快资讯2022-07-19

北京时间 7 月 8 日消息,Meta 将推出一种新的方式,让用户们无需使用 Facebook
快资讯2022-07-08

新浪科技讯 北京时间 7 月 7 日晚间消息,据报道,Facebook(Meta)前员工布伦南
快资讯2022-07-08
