【开发】模型部署笔记

目录

模型量化

1、模型量化优点

  • 低精度模型表示模型权重数值格式为FP16(半精度浮点)或者INT8(8位定点整数),但是目前低精度往往就指代INT8。
  • 常规精度模型则一般表示模型权重数值格式为FP32(32位浮点,单精度)。
  • 混合精度则在模型中同时使用FP32和FP16的权重数值格式。FP16减少了一半的内存大小,但有些参数或操作符必须采用FP32格式才能保持准确度。

2、模型量化方案

  • data free:不适用校准集,直接将浮点数转化成量化数。高通的DFQ不使用校准集也得到了很高的精度。
  • calibration:基于校准集方案,通过输入少量真实数据进行统计分析。
  • finetune:基于训练微调的方案,将量化误差在训练时仿真建模,调整权重使其更适合量化。好处是能带来更大的精度提升,缺点是要修改模型训练代码,开发周期较长。

在这里插入图片描述
FP32转Int8量化参考这篇博客:
Int8量化介绍

3、PTQ
训练后量化(Post Training Quantizationi),也叫做离线量化,根据量化零点 x z e r o _ p o i n t x_{zero\_point} xzero_point是否为0,训练后量化分为对称量化和非对称量化;根据数据通道顺序NHWC这一维度区分,训练后量化分为逐层量化和逐通道量化。目前TensorRT使用逐层量化的方法,每一层采用同一个阈值进行量化。逐通道量化对每一层每个通道都有各自的阈值,对精度可以有一个很好的提升。

4、QAT
在线量化,即在模型训练时加入伪量化节点,用于模拟模型量化时引起的误差。伪量化节点就是模仿quantization-dequantization的过程。
在这里插入图片描述
论文中一般在activation后和conv weight之前加入伪量化节点。

4、量化的分类

  • 二值化
  • 线性量化:采用均匀分布的聚类中心,原始浮点数据和量化后的定点数据存在一个简单的线性变换关系,因为卷积、全连接等网络层本身只是简单的线性计算,因此线性量化中可以直接用量化后的数据直接计算。
  • 对数量化:一种比较特殊的量化方法。两个同底的幂指数进行相乘,那么等价于其指数相加,降低了计算强度。同时加法也被转变为索引计算。

5、对称量化和非对称量化
根据偏移量Z是否为0,可以将浮点数的线性量化分为两类:对称量化和非对称量化。

在这里插入图片描述
对称量化的浮点值和 8 位定点值的映射关系如下图,从图中可以看出,对称量化就是将一个tensor中的[-max(|x|), max(|x|)]内的FP32值分别映射到8bit数据的[-128, 127]的范围内,中间值按照线性关系进行映射,称这种映射关系是对称量化。可以看出,对称量化的浮点值和量化值范围都是相对于0对称。
在这里插入图片描述
非对称量化就是偏移量不为0,此时INT8的值域为[0, 255]。

权重量化浮点值可以分为两个步骤:
1、通过在权重张量中找到min和max值从而确定 x s c a l e x_{scale} xscale x z e r o p o i n t x_{zero_point} xzeropoint
2、将权重张量的每个值从FP32转换为INT8。
在这里插入图片描述

6、量化方法的改进
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

相关推荐

  1. 学习笔记 - AI大模型部署-环境

    2024-05-16 06:30:19       10 阅读
  2. Web网页开发-盒模型-笔记

    2024-05-16 06:30:19       29 阅读
  3. SpringBoot 多模块开发 笔记

    2024-05-16 06:30:19       32 阅读
  4. LSPosed 安装、模块开发笔记

    2024-05-16 06:30:19       9 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-16 06:30:19       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-16 06:30:19       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-16 06:30:19       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-16 06:30:19       18 阅读

热门阅读

  1. iOS 学习资料

    2024-05-16 06:30:19       14 阅读
  2. Rust语言实现图像编码转换

    2024-05-16 06:30:19       12 阅读
  3. DB类的学习

    2024-05-16 06:30:19       12 阅读
  4. 从HTTP迁移到HTTPS:一篇全面的测试方案设计指南

    2024-05-16 06:30:19       10 阅读
  5. MyBatis的一二级缓存区别

    2024-05-16 06:30:19       13 阅读
  6. http 和 https 的区别及原理解析

    2024-05-16 06:30:19       14 阅读
  7. 阅读笔记——《代码整洁之道》ch2

    2024-05-16 06:30:19       9 阅读
  8. ifconfig 无输出

    2024-05-16 06:30:19       12 阅读
  9. pthread_setname_np 线程设置名字 c++

    2024-05-16 06:30:19       13 阅读
  10. 百度:文心大模型日均处理Tokens文本已达2490亿

    2024-05-16 06:30:19       11 阅读