【白话模型量化系列一】矩阵乘法量化

简介: 矩阵乘法量化

- BEGIN -

模型量化是模型加速方向一个很重要的方法,主要思想就是用int8数据格式来存储和进行计算。这样做有两点好处:

  1. 可以减小模型存储的体积。原本float32存储需要4个字节,现在int8存储只需要1个字节,体积是原来的1/4。
  2. 可以加快计算速度。这主要是因为int8数据的读写更快,并且int8矩阵乘法一般来说会更快一点。

以现在最常用的Transformer模型来举例,在使用CUDA推理加速库(例如LightSeq)之后,矩阵乘法的占比高达将近90%。所以优化非矩阵乘法的速度意义不是很大了,占比不高,你算得再快对整体的提速也很小,因此可以尝试优化矩阵乘法。

image.png

用整数矩阵来表示浮点数矩阵



image.png

这样我们就可以得到两个浮点数矩阵的整数表示,接下来就可以利用他们来进行整数矩阵乘法的转换。

转化为整数矩阵乘法



image.png

总结一下流程


image.png

进阶(relu激活函数)



image.png

image.png

总结


如果矩阵乘法两个输入的范围都是关于零点对称的,那么计算公式为:


image.png

当然还有很多其他情况,例如softmax的输出范围一定是,那么attention中的矩阵乘法公式还得改写。

此外为了减小量化的损失,还需要在模型结构中插入伪量化节点,然后进行量化感知训练(QAT)。接着还需要将finetune后的模型存储为int8格式。然后还需要开发加载int8模型的推理加速库代码。最后就是本文讲到的整数矩阵乘法了。整个流程比较繁琐,这部分内容今后我会慢慢给大家分享。网上关于量化的优秀教程非常多,我不会讲太多理论上的量化知识,只会从实践的角度来白话一下我们在Transformer模型量化过程中做的一些尝试。

相关文章
|
存储 NoSQL 前端开发
jwt与redis,把生成的token放入redis中进行临时存储
jwt与redis,把生成的token放入redis中进行临时存储
1156 0
|
11天前
|
人工智能 前端开发 Shell
一个文件让 AI Coding 效率翻倍:AGENTS.md 实践指南
文章内容基于作者个人技术实践与独立思考,旨在分享经验,仅代表个人观点。
一个文件让 AI Coding 效率翻倍:AGENTS.md 实践指南
|
Shell Linux 开发工具
linux shell 脚本调试技巧
【9月更文挑战第3天】在Linux中调试shell脚本可采用多种技巧:使用`-x`选项显示每行命令及变量扩展情况;通过`read`或`trap`设置断点;利用`echo`检查变量值,`set`显示所有变量;检查退出状态码 `$?` 进行错误处理;使用`bashdb`等调试工具实现更复杂调试功能。
760 5
|
存储 前端开发 Java
springboot中的第二个IOC容器BootstrapContext
springboot中的第二个IOC容器BootstrapContext
springboot中的第二个IOC容器BootstrapContext
|
监控 安全 Linux
systemd-cgls:Linux中的Cgroup层级结构查看利器
`systemd-cgls`是Linux工具,用于查看Cgroup层级结构,协助管理员管理资源。它以树形结构显示cgroup及其资源使用,用于监控、性能调优和安全隔离。通过`--no-page`, `--all`, `--full`等参数可定制输出。结合`systemd-cgtop`等工具,定期监控和配置资源限制,实现系统优化。
|
调度 Python
Python中的异步编程: asyncio库详解 与应用
Python中的异步编程: asyncio库详解 与应用
583 0
|
存储 DataX Python
BackTrader 中文文档(五)(1)
BackTrader 中文文档(五)
573 0
|
Python
树莓派的摄像头信息实时发送到PC端显示
树莓派的摄像头信息实时发送到PC端显示
838 1
|
Linux 网络安全 文件存储
本地部署Jellyfin影音服务器 - 公网远程影音库
本地部署Jellyfin影音服务器 - 公网远程影音库
1270 0
本地部署Jellyfin影音服务器 - 公网远程影音库
|
存储 缓存 Java
Docker 安装图文教程
Docker 安装图文教程
918 0
Docker 安装图文教程