学习量化一年多了,这里抛个砖。
模型量化实际的推理速度很大程度取决于推理引擎的优化以及硬件的支持。
举个例子,如果是用 ncnn 部署到 CPU(arm) 平台,那么 ncnn 实际上只会对 conv 和 fc 进行量化推理,相比 fp32 而言,这里面的优势只在于 int8 的带宽小、计算速度稍快,理论上速度可以快 2~4 倍,当然实际上由于有量化/反量化这些额外操作,一般能到 2 倍就不错了。但现代 CPU 的浮点运算能力并不算差,加上 winograd 算法加持,fp32 的速度反而可能更快。
而如果是部署到 DSP/NPU 这些纯定点运算的芯片,量化推理才能发挥巨大的优势,在这类芯片上往往可以做到全量化推理,当然前提是推理引擎可以用好硬件上的指令。不过,如果你的模型里面存在一些定点上很难模拟的算子 (比如:tanh),那推理速度可能也会变得异常缓慢。
总的来说,模型量化要实现真正的加速,需要考虑:
- 部署的平台是否有硬件层面的支持;
- 推理引擎本身是否有针对量化的优化;
- 模型包含的算子在定点运算上是否方便。
=======================================================
AI时代,模型量化是趋势,将来也是共识。在入门量化的时候,我磕磕绊绊走了不少弯路,深感这方面的入门资料太少,对小白很不友好。所以写了一系列量化相关的教程,希望能帮助后来者少走弯路: