模型加速-量化
在深度学习模型部署过程中,推理速度是难以忽视的一个因素,为了使神经网络更快、更轻,当前流行的一些技术有
1)架构的改进;
2)设计新的、高效的层,可以取代传统的层;
3) 神经网络修剪,删除不重要的权重;
4) 软件和硬件的优化;
5) 模型量化
量化是转换深度学习模型以使用较低精度的参数和计算的过程。传统上,DNN 训练和推理依赖于单精度浮点格式,使用32位来表示浮点模型权重和激活张量。
这种计算算在训练时可能是可以接受的,因为大多数 DNN 在数据中心或云中使用专业的训练卡进行训练,这些GPU具有非常大的计算能力和更大的功率预算。然而在部署过程中,这些模型通常需要在边缘计算资源少得多且功耗预算低的设备上运行。考虑到边缘的计算、内存和功率限制,使用完整的32位表示运行DNN 推理对于实时分析是不切实际的。
为了帮助减少计算预算,同时不影响模型中的结构和参数数量,可以以较低的精度运行推理。最初,量化推理以半点精度运行,张量和权重表示为16 位浮点数。虽然这导致了大约 1.2-1.5 倍的计算节省,但仍有一些计算预算和内存带宽可以利用。取而代之的是,模型现在被量化到更低的精度,权重和张量使用8位整数表示。这导致模型的内存缩小4倍,吞吐量提高约2-4 倍。虽然8位量化对于节省计算和内存上非常有效,但它是一个有损的过程。在量化过程中,小范围的浮点数被压缩到固定数量的信息桶中。这会导致信息丢失。对于INT8量化示意图如下
量化最核心的挑战,是如何在减少模型数据位宽的同时,模型的准确度不要掉下来,也就是在压缩率与准确率损失间作trade-off。这衍生出很多有趣的子问题,比如量化对象是谁(weight,activation,gradient),量化到几位(8位,4位,2位,1位),量化参数选哪些(如moving rate,clipping value),量化参数是否可以自动优化,不同层是否需要不同的量化参数,如何在量化后恢复准确率或者在训练时考虑量化,等等……
从量化执行时间来划分,目前主要有训练后量化(POST TRAINING QUANTIZATION)和量化感知训练(QUANTIZATION AWARE TRAINING)两种策略,两种方式简单的对比如下。简而言之,训练后量化流程上更简单,通常效率也会更高,不过精度损失可能更大,而量化感知训练则在训练阶段对模型进行修改,影响,但最终精度随时往往更可控。
- 点赞
- 收藏
- 关注作者
评论(0)