模型加速-量化

举报
maxloop 发表于 2022/07/03 17:46:39 2022/07/03
【摘要】 量化量化是转换深度学习模型以使用较低精度的参数和计算的过程。传统上,DNN 训练和推理依赖于 IEEE 单精度浮点格式,使用 32 位来表示浮点模型权重和激活张量。这种计算预算在训练时可能是可以接受的,因为大多数 DNN 在数据中心或云中使用 NVIDIA V100 或 A100 GPU 进行训练,这些 GPU 具有非常大的计算能力和更大的功率预算。然而,在部署过程中,这些模型通常需要在边缘...

在深度学习模型部署过程中,推理速度是难以忽视的一个因素,为了使神经网络更快、更轻,当前流行的一些技术有
1)架构的改进;
2)设计新的、高效的层,可以取代传统的层;
3) 神经网络修剪,删除不重要的权重;
4) 软件和硬件的优化;
5) 模型量化

量化是转换深度学习模型以使用较低精度的参数和计算的过程。传统上,DNN 训练和推理依赖于单精度浮点格式,使用32位来表示浮点模型权重和激活张量。
这种计算算在训练时可能是可以接受的,因为大多数 DNN 在数据中心或云中使用专业的训练卡进行训练,这些GPU具有非常大的计算能力和更大的功率预算。然而在部署过程中,这些模型通常需要在边缘计算资源少得多且功耗预算低的设备上运行。考虑到边缘的计算、内存和功率限制,使用完整的32位表示运行DNN 推理对于实时分析是不切实际的。

为了帮助减少计算预算,同时不影响模型中的结构和参数数量,可以以较低的精度运行推理。最初,量化推理以半点精度运行,张量和权重表示为16 位浮点数。虽然这导致了大约 1.2-1.5 倍的计算节省,但仍有一些计算预算和内存带宽可以利用。取而代之的是,模型现在被量化到更低的精度,权重和张量使用8位整数表示。这导致模型的内存缩小4倍,吞吐量提高约2-4 倍。虽然8位量化对于节省计算和内存上非常有效,但它是一个有损的过程。在量化过程中,小范围的浮点数被压缩到固定数量的信息桶中。这会导致信息丢失。对于INT8量化示意图如下
image.png

量化最核心的挑战,是如何在减少模型数据位宽的同时,模型的准确度不要掉下来,也就是在压缩率与准确率损失间作trade-off。这衍生出很多有趣的子问题,比如量化对象是谁(weight,activation,gradient),量化到几位(8位,4位,2位,1位),量化参数选哪些(如moving rate,clipping value),量化参数是否可以自动优化,不同层是否需要不同的量化参数,如何在量化后恢复准确率或者在训练时考虑量化,等等……

image.png

从量化执行时间来划分,目前主要有训练后量化(POST TRAINING QUANTIZATION)和量化感知训练(QUANTIZATION AWARE TRAINING)两种策略,两种方式简单的对比如下。简而言之,训练后量化流程上更简单,通常效率也会更高,不过精度损失可能更大,而量化感知训练则在训练阶段对模型进行修改,影响,但最终精度随时往往更可控。
image.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。