【白话模型量化系列一】矩阵乘法量化
模型量化是模型加速方向一个很重要的方法,主要思想就是用int8数据格式来存储和进行计算。这样做有两点好处:
- 可以减小模型存储的体积。原本float32存储需要4个字节,现在int8存储只需要1个字节,体积是原来的1/4。
- 可以加快计算速度。这主要是因为int8数据的读写更快,并且int8矩阵乘法一般来说会更快一点。
以现在最常用的Transformer模型来举例,在使用CUDA推理加速库(例如LightSeq)之后,矩阵乘法的占比高达将近90%。所以优化非矩阵乘法的速度意义不是很大了,占比不高,你算得再快对整体的提速也很小,因此可以尝试优化矩阵乘法。
那么我们考虑浮点数矩阵乘法
用整数矩阵来表示浮点数矩阵
首先我们需要将一个浮点数矩阵
接着整数矩阵
这样我们就可以得到两个浮点数矩阵的整数表示,接下来就可以利用他们来进行整数矩阵乘法的转换。
转化为整数矩阵乘法
整数矩阵
所以回到原始的问题,浮点数矩阵乘法
那么就可以先计算整数矩阵乘法
注意输入矩阵
总结一下流程
- 输入两个浮点数矩阵
和
,先分别转化为各自的整数矩阵
和
。
- 然后计算整数矩阵乘法结果
。
- 最后乘上系数还原为浮点数的乘法结果
。
进阶(relu激活函数)
熟悉Transformer的同学应该知道,FFN第二层输入分别是relu的结果
如果我们强行还按照
那按照
稍稍推导一下就可以得出,
这样矩阵乘法可以改写为
第一项因子和之前一样,先算整数矩阵乘法
第二项因子
总结
如果矩阵乘法两个输入的范围都是关于零点对称的,那么计算公式为:
量化:
反量化:
如果矩阵乘法其中一个输入是relu的结果,那么计算公式为:
量化:
反量化:
当然还有很多其他情况,例如softmax的输出范围一定是
此外为了减小量化的损失,还需要在模型结构中插入伪量化节点,然后进行量化感知训练(QAT)。接着还需要将finetune后的模型存储为int8格式。然后还需要开发加载int8模型的推理加速库代码。最后就是本文讲到的整数矩阵乘法了。整个流程比较繁琐,这部分内容今后我会慢慢给大家分享。网上关于量化的优秀教程非常多,我不会讲太多理论上的量化知识,只会从实践的角度来白话一下我们在Transformer模型量化过程中做的一些尝试。
【白话模型量化系列一】矩阵乘法量化相关推荐
- CUDA实例系列一: 矩阵乘法优化
CUDA实例系列一----矩阵乘法优化 很多朋友在学习CUDA的时候都会面临一个题目----矩阵乘法, 这也是CUDA最广泛的应用之一. 本文将详细讲解如何利用GPU加速矩阵乘法的计算. 话不多说, ...
- 【自然语言处理】【大模型】用于大型Transformer的8-bit矩阵乘法介绍
用于大型Transformer的8-bit矩阵乘法介绍 原文地址:A Gentle Introduction to 8-bit Matrix Multiplication for transforme ...
- 一起实践神经网络INT8量化系列教程(一)
开篇 老潘刚开始接触神经网络量化是2年前那会,用NCNN和TVM在树莓派上部署一个简单的SSD网络.那个时候使用的量化脚本是参考于TensorRT和NCNN的PTQ量化(训练后量化)模式,使用交叉熵的 ...
- matlab量化矩阵,MATLAB量化金融分析基础与实战/MATLAB工程应用书库
目录 前言 量化投资基础篇 第1章 基本数据类型 1.1 变量及其命名规则 1.2 数值 1.2.1 数值类型概述 1.2.2 如何查看数值类型范围 1.2.3 实例1:当心数值类型转换中的溢出 1. ...
- 【模型压缩】(三)——量化
一.概述 量化: 剪枝是删除不重要的权重参数,量化则是减少存储权重的bit,将权重存储在更小的空间中: 权重不需要以高精度方式存储,甚至不应该以高精度方式存储: 如果用简单的量化方式效果并不好,需要一 ...
- 隐马尔科夫模型(HMM)择时应用的量化策略
HMM模型 隐马尔科夫模型(HMM)择时应用的量化策略. 仅为研究学习使用, 不作为任何投资策略建议. 文章内容从各处整理汇总而成, 感谢各位大神分享. 具体策略代码均调试通过. 一.从大奖章讲起 ...
- 二流四流神经网路(模型融合矩阵乘法理论实践)
下面这个代码是传统方式将经济的设计方式倍数的方式将流 网络变为 双流网络 从收敛的速度上看收敛的速度变快了一点点 ,所以说基本一致 下面给出了一个根据上面理论设计的一个四流网络,虽然是四流也就是说权重 ...
- 深度学习框架Caffe学习系列(2):Ristretto 量化 cifar_small 实验记录
模型压缩之量化策略 Caffe 量化工具:Ristretto 近似方案 学习资源 量化cifar_small模型 1. 创建模型训练文件 2. 创建模型训练参数文件 3. 开始训练原始模型 4. 测试 ...
- Tensorflow模型优化 端侧部署 tflite 量化 稀疏 quantization sparsity
Tensorflow模型优化 文章目录 Tensorflow模型优化 为什么要模型优化 端侧部署 模型优化方式 Quantization 工具包支持 32 bit float ->16 bit ...
- AI算力碎片化:矩阵乘法的启示
尽管AI的发展取得了巨大进步,但编译器LLVM之父Chris Lattner认为,AI技术应用并不深入,远远没有发挥出已有机器学习研究的所有潜力.而AI系统和工具的单一化和碎片化正是造成这一问题的根源 ...
最新文章
- Optional 是个好东西,你真的会用么?
- vsearch2.8.1使用和命令简介——中文帮助文档(免费64位版usearch)
- Windows下使用xShell向远程Linux上传文件
- 世界农业巨头嘉吉-国际农民丰收节贸易会:解读与经验借鉴
- oralce用存储过程实现分页 以及 用java调用这个存储过程的代码
- 利用Python进行数据分析--绘图和可视化
- c/c++中与字符串处理相关的函数
- 股票交易数据接口是什么?
- 分页控件AspNetPager的用法
- 转行成为数据分析师的经验分享
- html网页实时在线聊天,基于webSocket的网页在线聊天
- 转:关于启用 HTTPS 的一些经验分享(二)
- word打开总是安装解决方法
- 数据融合技术——基本/常值增益/平方根/遗忘因子/自适应/限制k/扩大p的卡尔曼滤波
- 安装PL-2303驱动
- 基于HSV颜色空间的辅助车牌定位
- OpenGL---GLUT教程(四) GLUT动画
- 单点登录(一)-----理论-----单点登录SSO的介绍和CAS+选型
- Mojarra JSF ViewState 反序列化漏洞复现
- UltralSO制作Centos U盘系统盘
热门文章
- bzoj2756: [SCOI2012]奇怪的游戏
- phpmailer 与 mail
- SSCLI中GC源码分析(1) - EE与BCL之间的调用接口FCall
- mysql grant权限分配(转)。
- halcon图像处理的基本思路
- maven-dependencyManagement和dependencies区别
- spring定时任务配置,以及不执行的解决办法
- BZOJ3956: Count
- HDU 6274 Master of Sequence (暴力+下整除)
- 数据结构与算法(三)-线性表之静态链表