模型推理谈谈为什么量化能加速推理(代码片段)

极智视界 极智视界     2023-01-23     747

关键词:

欢迎关注我的公众号 [极智视界],获取我的更多笔记分享

O_o>_<o_OO_o~_~o_O

  本文主要讨论一下为什么量化能加速模型推理。

  前面已经写过几篇关于模型量化相关的文章:《【模型推理】谈谈几种量化策略:MinMax、KLD、ADMM、EQ》、《【模型推理】谈谈模型量化组织方式》、《【模型推理】谈谈非线性激活函数的量化方式》,要了解相关知识可以查阅,这里主要讨论一下为什么量化能加速模型推理。

  量化经常会涉及到 Quantize 和 Dequantize 的过程,其实对于不量化的 flow,量化是会增加操作子的,所以对于量化能加速的原因,可能并没有想象的那么简单。这里以 Conv 层来进行说明量化与不量化的速度区别。

  假设输入通道为 C1,输出为 C2HW,卷积核的大小为 K,下述为各个不同类型运算指令的时钟周期:

  假设未量化的 Conv 算子使用 fp16 精度进行推理,其耗时如下:

  先抛开 Quantize 层和 Dequantize 层不看,单独计算量化为 int8 卷积后的耗时,需要注意的是,为了保证运算不溢出,不能够总是使用 int8 来进行卷积运算,中间计算结果有时需要使用 int16 甚至是 int32 数据类型来保存。下述 n1 表示做多少次 int8 乘加才不会溢出 int16 类型,n2 表示做多少次 int16 乘加才不会溢出 int32 类型:

  可以看到当进行 2 次 int8 乘加,就需要把原中间结果保存在 int16 寄存器中的数据累加到 int32 寄存器上;进行 n2 次 int16 加,就需要把本来中间结果保存在 int32 寄存器中的数据累加到 int64 寄存器上。因此,可以得到以下量化卷积后的时间:

  上述卷积还未添加 Requantize 操作,其运算操作耗时如下:

  最终量化后的卷积操作耗时如下:

  整型运算的算力往往要比浮点运算的算力高一倍,指令周期方面整形运算的周期是浮点运算的四分之一。单纯从上述的量化前后的卷积周期耗时来看,确实是会有速度上的提升。

  然后我们来考虑加入 Quantize 层和 Dequantize 层,需要引入如下的指令时钟周期:

  我们可以很容易得到加入 Quantize 层和 Dequantize 后的总体耗时,如下:

  从上述公式,可知加入量化和反量化后,需要涉及到其他众多指令的时钟周期,这样是无法直接判断是否会比未量化的卷积更加快,这个问题需要结合不同的推理部署环境来看。

  其实对于部署量化模型,大多数情况之所以可以加速,不止是因为浮点变整型运算指令周期缩短的原因,在很多专门为神经网络部署设计的芯片上,往往会存在专门为整型运算设计的加速单元。此外,有些硬件是不存在浮点运算单元的,这个时候可以使用量化模型进行部署。


  以上从指令周期缩短的角度分析了一下量化提速的原因,量化提速是一个系统工程,需考虑的因素较多。


 【公众号传送】

《【模型推理】谈谈为什么量化能加速推理》



扫描下方二维码即可关注我的微信公众号【极智视界】,获取更多AI经验分享,让我们用极致+极客的心态来迎接AI !

模型推理谈谈非线性激活函数的量化方式(代码片段)

...O_o >_< o_O O_o ~_~ o_O 本文主要聊一聊深度学习模型量化中对激活函数的处理方式。 之前已经写过几篇关于模型量化的文章:《【模型推理】谈谈几种量化策略:MinMax、KLD、ADMM、EQ》、《【模型推理】谈谈模... 查看详情

模型推理谈谈为什么卷积加速更喜欢nhwclayout(代码片段)

 本文主要讨论一下为什么卷积加速更加喜欢NHWC的数据排布。 我目前接触过的数据排布类型(主要针对卷积)有NCHW(pytorch、caffe),NHWC(Tensorflow,也是TVMGPU和寒武纪MLUCore上更喜欢的dataLayout),CHW(TensorRT里不考虑动态batch... 查看详情

模型推理谈谈几种量化策略:minmaxkldadmmeq(代码片段)

...O_o >_< o_O O_o ~_~ o_O 本文主要聊一下深度学习模型量化相关策略。 模型小型化是算法部署的关键技术,模型小型化的过程通常用模型量化来描述。量化通常是高比特位到低比特位的映射过程,量化的对象既... 查看详情

模型推理一文看懂winograd卷积加速算法(代码片段)

...gleTPU脉动阵列加速卷积计算原理》、《【模型推理】谈谈为什么 查看详情

量化感知训练实践:实现精度无损的模型压缩和推理加速(代码片段)

简介:本文以近期流行的YOLOX[8]目标检测模型为例,介绍量化感知训练的原理流程,讨论如何实现精度无损的实践经验,并展示了量化后的模型能够做到精度不低于原始浮点模型,模型压缩4X、推理加速最高2.3X... 查看详情

模型推理谈谈caffe的conv算子(代码片段)

 欢迎关注我的公众号[极智视界],获取我的更多笔记分享 O_o >_< o_O O_o ~_~ o_O 本文主要聊一下caffe框架中的conv算子。 caffe中的卷积主要有两种实现:一种是img2col+gemm+bias,另一种是调用cudnn_conv&#x... 查看详情

模型推理寒武纪mluresnet50量化及离线推理流程(代码片段)

...搭建、resnet50量化、resnet50离线推理,resnet系列是标准模型,其他模型也可参考该流程执行。文章目录1、 查看详情

markdown使用mxnet实现生产级神经网络模型量化推理(代码片段)

查看详情

cpu推理|使用英特尔sapphirerapids加速pytorchtransformers(代码片段)

...个专用于英特尔平台的硬件加速开源库。让我们开始吧!为什么你应该考虑使用CPU推理在决定使用CPU还是GPU进行深度学习推理时需要考虑多个因素。最重要的当然是模型的大小。一般来说,较大的模型能更多地受益于GPU提供的强... 查看详情

模型推理ncnn模型转换及量化流程(代码片段)

...规范 O_o >_< o_O O_o ~_~ o_O 本文介绍一下ncnn模型转换及量化流程,以from_darknetyolov4为例。 关于ncnn的ubuntu和windows安装方法可以参考我之前写的:《【嵌入式AI】ubuntu安装ncnn》、《【经验分享】win10qm 查看详情

模型推理加速系列bert加速方案对比torchscriptvs.onnx(代码片段)

文章目录简介基于ONNX导出ONNX模型示例代码基于TorchScriptJITTorchScript示例代码推理速度评测CPUGPU附录简介本文以BERT-base的为例,介绍2种常用的推理加速方案:ONNX和TorchScript,并实测对比这两种加速方案与原始Pytorch模型... 查看详情

模型推理加速系列07:以bert为例全面评测各种推理加速方案(代码片段)

...李白风格创作的,仅供欣赏。前文以CV领域中的resnet18模型为例综合评测各种推理加速方 查看详情

模型推理加速系列07:以bert为例全面评测各种推理加速方案(代码片段)

...李白风格创作的,仅供欣赏。前文以CV领域中的resnet18模型为例综合评测各种推理加速方 查看详情

模型推理tengine模型转换及量化(代码片段)

...范 O_o >_< o_O O_o ~_~ o_O 本文介绍一下Tengine模型转换及量化流程。 Tengine同ncnn一样,也是优秀的端侧推理框架,前面写过一篇《ncnn模型转换及量化流程》,有兴趣的同学可以查阅。 下面开始。文章目... 查看详情

模型推理量化实现分享一:详解min-max对称量化算法实现(代码片段)

 欢迎关注我的公众号[极智视界],回复001获取Google编程规范 O_o >_< o_O O_o ~_~ o_O 大家好,我是极智视界,本文剖析一下min-max对称量化算法实现,以Tengine的实现为例。 Tengine是OpenAILab开源的优秀端... 查看详情

模型推理谈谈caffe的bn和scale算子(代码片段)

...写过一篇关于bn的文章,有兴趣的同学可以查阅《【模型推理】从部署 查看详情

模型推理谈谈darknetyolo的route算子(代码片段)

 欢迎关注我的公众号[极智视界],获取我的更多笔记分享 O_o >_< o_O O_o ~_~ o_O 本文聊一聊darknetyolo网络中的route算子。 yolo是目标检测算法落地常用的网络,具有速度快、精度高的优点,相信很多同学... 查看详情

模型推理比特大陆se5边缘盒子caffessd量化与转换部署模型(代码片段)

...本教程详细记录了在比特大陆SE5边缘盒子上对caffeSSD检测模型进行量化和转换部署模型的方法。文章目录1、准备ssd模型2、转换fp32bmodel2.1转fp32bmodel2.2、模型精度验证3、Int8量化与模型转换3.1模型转换fp32umodel3.2模型转换int8umodel3.2.1... 查看详情