众所周知,深度学习的成功依赖大量神经网络的深度模型,这些模型的存储量可以达到几十兆Bytes到几百兆Bytes,在训练期间更是会达到十几亿次的运算。例如,我们熟悉的ResNet50,其权重和激活的存储量在int8格式下分别为25.5MB和10.1MB,计算量有77亿次。这样的算法复杂性给AI的广泛部署带来了巨大挑战,特别是在资源受限的边缘测环境中,在内存、功耗和模型精度方面都面临严重挑战。因此,对算法模型进行优化,是非常必要且势在必行的。
目前的AI芯片算法优化主要有三个方向:降低位宽、模型压缩、增加稀疏性。这些方法有些已有成熟的产品实现,有些则还停留在实验室样片阶段,通常都需要专门的硬件来支撑。
1. 降低数值精度的量化技术
模型参数的数值精度(或称位宽)会影响到网络训练和推理的性能及效率。深度学习的一个特征是,它不需要很高的计算精度。降低CNN权重的位宽,可以显著降低存储要求和计算复杂性,因此受到越来越多的关注。但不当的量化会带来输出精度的损失。为了避免降低数值位宽之后引入的AI系统在训练阶段的精度损失,近年来很多研究人员对此做了大量研究,并提出了各种改进方案。例如,"多种精度混合"的自适应方法,会根据不同的需求进行位宽的灵活变换,从而在满足降低存储和计算量的同时,最大限度地保持训练精度。再比如,Google发明的16 bit脑浮点(Brain Floating Point, bf16 或bfloat16),与fp16相比增加了动态范围,与fp32相同,但能以fp32一半地位宽完成任务,从而使吞吐量翻倍,内存需求减半。bf16格式一直是第二代和第三代TPU的主力浮点格式,且也逐渐得到因特尔、ARM和一些初创公司的采用。
目前,通常采用的方案是,使用