当前位置: 首页 > article >正文

模型量化相关知识汇总

量化&反量化

量化操作可以将浮点数转换为低比特位数据表示,比如int8和 uint8.

Q(x_fp32, scale, zero_point) = round(x_fp32/scale) + zero_point,

量化后的数据可以经过反量化操作来获取浮点数

x_fp32 = (Q - zero_point)* scale 

pytorch中 quantize_per_tensor的解释

pytorch可以使用quantize_per_tensor函数来对一个浮点tensor做8bit量化.

    ts_quant = torch.quantize_per_tensor(ts, scale = 0.1, zero_point = 10, dtype = torch.quint8)
    print(f'fp32 ts:{ts}, quant ts:{ts_quant}, int_repr:{ts_quant.int_repr()}')
    # 截断后的浮点数.
    naive_quant = np.array([24.5, 1.0, 2.0]) / 0.1 + 10
    print(f'naive_quant:{naive_quant}')

打印结果:

fp32 ts:tensor([100.,   1.,   2.]), quant ts:tensor([24.5000,  1.0000,  2.0000], size=(3,), dtype=torch.quint8,
       quantization_scheme=torch.per_tensor_affine, scale=0.1, zero_point=10), int_repr:tensor([255,  20,  30], dtype=torch.uint8)
naive_quant:[255.  20.  30.]

有几点值得说明

  • ts_quant直接打印出来的值并不是quint8数据,依然是个浮点,它表示的是映射到8bit后被截断剩下有效的浮点范围. scale=0.1的前提下,uint8只能表示出[0, 25.5]范围的浮点数,加上zero_point=10, 那么输入的浮点必须要在[0, 24.5]范围内才能被表示,超出部分会被截断,所以打印出来的是24.5, 1, 2.
  • 浮点表示的[24.5, 1.0, 2.0]可以通过int_repr方法打印出定点表示.
  • int_repr等效与naive_quant的实现

http://www.kler.cn/a/155893.html

相关文章:

  • Tomcat 和 Netty 的区别及应用场景分析
  • Android 10 默认授权安装app运行时权限(去掉运行时所有权限授权弹窗)
  • 马斯克万卡集群AI数据中心引发的科技涟漪:智算数据中心挑战与机遇的全景洞察
  • npm list @types/node 命令用于列出当前项目中 @types/node 包及其依赖关系
  • python魔术方法的学习
  • C获取程序名称的方法
  • 程序的未定义行为(Undefined Behavior)
  • 含光伏发电的变电站供电系统设计
  • PMP考试解析
  • 目标检测YOLO系列从入门到精通技术详解100篇-【图像处理】图像识别
  • xxl-job(分布式调度任务)
  • 分享一下docker的使用心得
  • Jupyter Markdown 插入图片
  • Blender学习笔记:小车狂奔动画
  • Vue3 Router跳转传参
  • Vmware17虚拟机安装windows10系统
  • Android跨进程通信,RPC,IPC
  • DBS note7 (end):DB Design
  • 根文件系统构建-对busybox进行配置
  • java中如何将mysql里面的数据取出来然后通过stream流的方式进行数据处理代码实例?
  • 论文阅读——Loss odyssey in medical image segmentation
  • 1.1、Autosar_CP软件集群设计与集成指南说明
  • CentOS7搭建部署NTP服务器
  • 外观模式 rust和java的实现
  • 长度最小的子数组(Java详解)
  • PCL 点云加权均值收缩