🗒️量化入门
2021-7-2
| 2025-1-1
Words 853Read Time 3 min
type
status
date
slug
summary
tags
category
icon
password

🤔 什么是神经网络量化?

通常来说,“量化”指“连续”到“离散”的一个过程。在人工智能语境下,“量化”通常指将神经网络模型从高精度(例如fp32)转化为低精度(例如int8,binary…),从而降低内存开销和计算开销。
从映射关系上来说,分为线性量化和非线性量化。在线性量化中,又分为对称量化和非对称量化。从量化方式上,分为Post Training Quantization(PTQ)和量化感知训练(QAT, Quantization-Aware Training)。

线性量化(Linear Quantization)

两种数值类型的线性映射(An affine mapping of integers to real numbers),又称uniform quantization,与此对应的是non-uniform quantization.
fig 1. Example of linear quantization(from MIT course 6.S965)
fig 1. Example of linear quantization(from MIT course 6.S965)
r代表浮点数,S代表scale(浮点数),q为量化后的整数。Z为零点(整数),含义是整数的Z值对应到浮点的0值。这个数是没有量化误差的
notion image
一个完整的量化算子过程应该包括量化和反量化:
量化误差来自: round error 和 clip error.
  • rounding error:
  • clipping error: s ,error
真实部署中,还是利用了浮点数乘法,只是做计算的时候用了整数:
在整数乘法结束后,需要进行重量化(Requantization)进行浮点数数值范围恢复。包括:,重新量化(从而可以输入到下一层),公式如下:

对称量化: Symmetric Quantization

z=0, TBA
 

😊 博主推荐

💯 博文/课程推荐:

  • Nvidia tensorrt int8实战:
  • 商汤ppq作者张志大佬的教程:(尤其是前几节)
张志对于量化的一些理解:
[RFC] MMRazor Quantization Design
Updated Jan 17, 2023
  • 华为工程师zomi酱的教程:
 
  • 知乎专栏:大白话模型量化:
 
  • MIT EfficientML(韩松教授主讲)

框架推荐:

各家的推理引擎都有针对tensorflow,pytorch模型的量化包,例如openvino的 nncf,tensorrt的 quantization-for-pytorch 之类,甚至可以直接使用 trtexec 进行量化。但是有以下一些弊端:
  • 只针对自家的推理引擎,如果想部署到多种推理引擎的话比较麻烦;
  • 量化算法黑箱,例如 trtexec int8优化时不知使用什么量化算法;
以下有两个pytorch适配多种端侧的量化包:
onnxruntime也是一个不错的技术路线,提供了量化策略以及在多种端侧的部署;
有一定技术能力的可以考虑tvm,由陈天齐等人开源,是一种神经网络编译器,可以提供更加深层的定制优化
另外还有一些压缩模型库,提供了常用预训练模型:
  • FastDeploy,openmmlab团队出品,主要对接paddlepaddle模型
 
 
 
 
 
 
 
 
 
 
 
 
 
  • CS
  • 生信入门
    Loading...