32 位与 16 位格式的混合精度训练,正是当前深度学习的主流。
最新的英伟达核弹 GPU H100,刚刚添加上对 8 位浮点数格式 FP8 的支持。
英伟达首席科学家 Bill Dally 现在又表示,他们还有一个“秘密武器”:
在 IEEE 计算机运算研讨会上,他介绍了一种实验性 5nm 芯片,可以混合使用 8 位与 4 位格式,并且在 4 位上得到近似 8 位的精度。
目前这种芯片还在开发中,主要用于深度学习推理所用的 INT4 和 INT8 格式,对于如何应用在训练中也在研究了。
相关论文已发表在 2022 IEEE Symposium on VLSI Technology 上。
新的量化技术
降低数字格式而不造成重大精度损失,要归功于按矢量缩放量化(per-vector scaled quantization,VSQ)的技术。
具体来说,一个 INT4 数字只能精确表示从-8 到 7 的 16 个整数。
其他数字都会四舍五入到这 16 个值上,中间产生的精度损失被称为量化噪声。
传统的量化方法给每个矩阵添加一个缩放因子来减少噪声,VSQ 则在这基础之上给每个向量都添加缩放因子,进一步减少噪声。
关键之处在于,缩放因子的值要匹配在神经网络中实际需要表示的数字范围。
英伟达研究人员发现,每 64 个数字为一组赋予独立调整过的缩放因子可以最小化量化误差。
计算缩放因子的开销可以忽略不计,从 INT8 降为 INT4 则让能量效率增加了一倍。
Bill Dally 认为,结合上 INT4 计算、VSQ 技术和其他优化方法后,新型芯片可以达到 Hopper 架构每瓦运算速度的 10 倍。
还有哪些降低计算量的努力
除了英伟达之外,业界还有更多降低计算量的工作也在这次 IEEE 研讨会上亮相。
马德里康普顿斯大学的一组研究人员设计出基于 Posits 格式的处理器核心,与 Float 浮点数相比准确性提高了多达 4 个数量级。
Posits 与 Float 相比,增加了一个可变长度的 Regime 区域,用来表示指数的指数。
对于 0 附近的较小数字只需要占用两个位,而这类数字正是在神经网络中大量使用的。
适用 Posits 格式的新硬件基于 FPGA 开发,研究人员发现可以用芯片的面积和功耗来提高精度,而不用增加计算时间。
ETH Zurich 一个团队的研究基于 RISC-V,他们把两次混合精度的积和熔加计算(fused multiply-add,FMA)放在一起平行计算。
这样可以防止两次计算之间的精度损失,还可以提高内存利用率。
FMA 指的是 d = a * b + c 这样的操作,一般情况下输入中的 a 和 b 会使用较低精度,而 c 和输出的 d 使用较高精度。
研究人员模拟了新方法可以使计算时间减少几乎一半,同时输出精度有所提高,特别是对于大矢量的计算。
相应的硬件实现正在开发中。
巴塞罗那超算中心和英特尔团队的研究也和 FMA 相关,致力于神经网络训练可以完全使用 BF16 格式完成。
BF16 格式已在 DALL・E 2 等大型网络训练中得到应用,不过还需要与更高精度的 FP32 结合,并且在两者之间来回转换。
这是因为神经网络训练中只有一部分计算不会因 BF16 而降低精度。
最新解决办法开发了一个扩展的格式 BF16-N,将几个 BF16 数字组合起来表示一个数,可以在不显著牺牲精度的情况下更有效进行 FMA 计算
关键之处在于,FMA 计算单元的面积只受尾数位影响。
比如 FP32 有 23 个尾数位,需要 576 个单位的面积,而 BF16-2 只需要 192 个,减少了 2/3。
另外这项工作的论文题目也很有意思,BF16 is All You Need。
参考链接:
[1]https://spectrum.ieee.org/number-representation
[2]https://ieeexplore.ieee.org/document/9830277
[3]https://ieeexplore.ieee.org/document/9823406
本文来自微信公众号:量子位 (ID:QbitAI),作者:梦晨
本文由LinkNemo爬虫[Echo]采集自[https://www.ithome.com/0/660/152.htm]