人工智能训练的最大障碍不是计算能力,而是“记忆墙”。AI训练的计算量每年都在大幅增加。最近的研究指出,未来AI训练的瓶颈不是计算能力,而是GPU内存。AI加速器通常会简化或删除其他部分以提高硬件的峰值计算能力,但很难解决内存和通信方面的难题。无论是芯片内部、芯片之间,还是AI加速器之间的通信,都成为了AI训练的瓶颈。Transformer模型(红色)的参数数量在2年内呈现240倍的超指数增长,而单个GPU内存(绿色)仅以每2年2倍的速度扩展。△SOTA模型的参数数量(红点)和AI加速器的存储容量(绿点)历年的演化训练AI模型的内存需求通常是参数数量的数倍。因为训练需要存储中间激活,所以与参数数量(没有嵌入)相比,这通常会使内存增加3-4倍。因此,AI训练不可避免地撞上了“记忆墙”。内存墙不仅仅是内存容量,还有内存传输带宽。在许多情况下,数据传输的容量和速度不会触及内存壁。△训练不同神经网络模型所需的显存量从图中可以看出,每当GPU显存容量增加时,开发者就会设计新的模型;2019年GPT-2所需的内存容量已经是2012年AlexNet的7倍以上;自从谷歌团队在2017年提出Transformer以来,模型所需的内存容量大幅增加。为什么不能靠多GPU来堆显存呢?那么,为了摆脱单一硬件有限的内存容量和带宽,能否将训练扩展到多个AI加速器,使用分布式内存呢?事实上,这样做也会面临内存墙的问题,即神经网络加速器之间移动数据的通信瓶颈,这比在芯片上移动数据更慢、效率更低。与单系统内存的情况类似,扩展带宽的技术挑战尚未克服。横向扩展适用于只有很少通信和数据传输的计算密集型问题。从图中可以看出,在过去的20年里,计算设备的计算能力增长了9万倍;显存虽然从DDR发展到GDDR6x,可用于显卡、游戏终端和高性能计算,接口标准也从PCIe1.0a升级到NVLink3.0;但与计算能力的提升相比,通信带宽的提升只有30倍,可以说是非常缓慢的。由于计算能力和内存之间的差距越来越大,训练更大的模型也将更加困难。如何突破“内存墙”如何解决内存限制问题?笔者从三个方面进行分析。训练算法的改进训练神经网络模型的挑战之一是强力超参数调整。虽然可以通过二阶随机优化的方法来实现,但是目前的方法会增加3-4倍的内存占用,这个问题还有待解决。微软的Zeromethod(万亿级模型参数训练方法)通过去除相同内存下的冗余优化状态变量,实现训练8倍大的模型。也可以在传递期间仅存储或检查激活的子集,而不是保存所有激活,从而将内存占用减少5倍,但需要增加20%的计算量。此外,从单精度算法到半精度(FP16)算法的进步,硬件的计算能力提高了10倍以上,可以进一步研究适合INT8精读训练的优化算法。state-of-the-art模型(如:GPT-3)的高效部署需要分布式内存部署,这是一个很大的挑战。可以通过降低精度或删除冗余参数来压缩这些模型以进行推理。在训练或推理时,可以降低到INT4精度,模型占用空间和延迟可以减少8倍。但是,仍然很难将训练精度降低到远低于FP16。删除冗余参数可能会导致精度下降。目前的方法能够修剪30%的结构稀疏神经元和80%的非结构稀疏神经元,以保证对准确性的影响最小。虽然在AI加速器的设计中很难同时增加存储带宽和峰值计算能力,但可以牺牲峰值计算来获得更好的带宽。在带宽受限的问题上,CPU的性能比GPU好很多,但CPU的峰值计算能力比GPU小一个数量级左右。因此,可以研究两者之间的替代架构以实现更高效的缓存。
