AI/模型量化
文章平均质量分 62
AI模型压缩
u013250861
这个作者很懒,什么都没留下…
展开
-
模型量化1-概述1:量化的过程就是选取合适量化参数(scale factor,zero point,clipping value)以及数据映射方式,让原来的浮点值映射到整型值后,尽量保持准确率不下降
模型量化(Model Quantization)通过某种方法将浮点模型转为定点模型。比如说原来的模型里面的权重(weight)都是float32,通过模型量化,将模型变成权重(weight)都是int8的定点模型16位: (半精度(FP16),单精度(FP32),双精度(FP64)) Floating points8位 最常见也相对成熟。各种主流框架和硬件都支持。8位以下目前而言学界相对玩得多些,工业界有少量支持,但还没有太成熟。原创 2024-06-22 12:42:44 · 1136 阅读 · 0 评论 -
模型量化1-概述2:
在 AI 模型训练时,通常使用浮点数(Float32 等)进行计算,这样能够确保更好的精度表现当然浮点数运算也是一把双刃剑,在提升了计算精度的同时带来了更多的计算量和储存空间占用具体的表现就是模型的计算速度较慢、模型的文件体积较大在模型推理的时候,大多数时候并不需要如此高的计算精度,或者说低精度的运算不会对模型精度产生太大的影响这个时候就可以将模型映射到较低精度的运算上,降低计算量,提升运行速度,减少模型文件的体积,方便传输。原创 2024-06-22 21:47:34 · 773 阅读 · 0 评论 -
模型量化2:最常用的数据类型:float32 (FP32)、float16 (FP16) 、 bfloat16 (BF16)【IEEE754制32位浮点数转换为十进制】
数据类型的选择决定了所需的计算资源的数量,从而影响模型的速度和效率。在深度学习应用中,平衡精度和计算性能成为一项至关重要的练习,因为更高的精度通常意味着更大的计算需求。在各种数据类型中,浮点数主要用于深度学习,因为它们能够以高精度表示各种值。通常,浮点数使用n位来存储数值。这种设计允许浮点数以不同的精度级别覆盖广泛的值。原创 2024-06-22 16:11:29 · 1264 阅读 · 0 评论 -
模型量化3-量化类型1:线性量化、非线性量化
线性量化:q=x*s+z。非线性量化,如log。相比来说,非线性量化理论上精度更高(仍然实际不一定),但是实现难度更大。实践中大多都采用线性量化方案。原创 2024-06-22 22:11:00 · 270 阅读 · 0 评论 -
模型量化3-量化类型2:对称量化与非对称量化【是否以0为中心,0两边的动态范围是否一致。】
https://zhuanlan.zhihu.com/p/526293372原创 2024-06-22 22:12:02 · 227 阅读 · 0 评论 -
模型量化3-量化类型3:饱和量化和非饱和量化
https://zhuanlan.zhihu.com/p/526293372原创 2024-06-22 22:12:51 · 192 阅读 · 0 评论 -
模型量化3-量化类型4:Pre-channel量化和pre-tensor量化(从量化粒度来分)【权重通常采取Pre-channel量化,激活值通常采取pre-tensor量化】
https://zhuanlan.zhihu.com/p/526293372原创 2024-06-22 22:14:05 · 147 阅读 · 0 评论 -
模型量化3-量化类型5:训练后量化和量化感知训练(从量化是否参与训练来分)
训练后量化(QAT)直接用训练好的模型获取量化系数,量化感知训练(PTQ)边训练边量化。通常来说量化感知训练的效果更好。原创 2024-06-22 22:14:57 · 150 阅读 · 0 评论 -
模型量化4-Int8量化1:映射fp32的张量(模型权重或模型输入)到int8张量【absmax量化(对称)、Zeropoint量化(非对称)】【零点量化比absmax稍好,但计算成本也更高】
目标都是映射 FP32 张量X(原始权重)到 INT8 张量Xquant(量化权重)。原创 2024-06-22 17:29:36 · 703 阅读 · 0 评论 -
模型量化5:onnx模型的静态量化和动态量化【使用 ONNXRuntime 内置的量化工具对 ONNX 模型进行静态量化和动态量化】
ONNXRuntime 中的量化是指 ONNX 模型的 8 bit 线性量化。Scale 是一个正实数,用于将浮点数映射到量化空间,计算方法如下:Zero_point 表示量化空间中的零。重要的是,浮点零值在量化空间中可以精确地表示。这是因为许多 CNN 都使用零填充。如果在量化后无法唯一地表示 0,则会导致精度误差。原创 2024-06-22 21:43:28 · 1812 阅读 · 0 评论 -
模型量化6:模型量化误差分析【①量化误差来源;②误差度量函数;③网络误差分析;④精度调试工具】
2. KL散度:衡量分布差异,TensorRT的方案,因此使用较广泛。同系列的还有symKL、JSD等。3. 余弦相似度:衡量向量方向上的差异,余弦相似度越接近1误差越小,优化时是最大化余弦相似度。1. L2距离:并不关注准确的L2距离,只需要比较相对大小。原创 2024-06-22 22:07:22 · 274 阅读 · 0 评论 -
Pytorch量化+部署
Open Neural Network Exchange (ONNX, 开放神经网络交换)格式,是一个用于表示深度学习模型的标准,可使模型在不同框架之间进行转移。ONNX是一种针对机器学习所设计的开放式的文件格式,用于存储训练好的模型。它使得不同的人工智能框架(如PyTorch, MXNet)可以采用相同格式存储模型数据并交互。ONNX的规范及代码主要由微软、亚马逊、Facebook和IBM等公司共同开发。原创 2024-06-22 12:36:41 · 1290 阅读 · 0 评论 -
NLP-模型压缩-知识蒸馏:TextBrewer工具包
TextBrewer为NLP中的知识蒸馏任务设计,融合了多种知识蒸馏技术,提供方便快捷的知识蒸馏框架。模型无关:适用于多种模型结构(主要面向Transfomer结构)方便灵活:可自由组合多种蒸馏方法;可方便增加自定义损失等模块非侵入式:无需对教师与学生模型本身结构进行修改支持典型的NLP任务:文本分类、阅读理解、序列标注等TextBrewer软标签与硬标签混合训练动态损失权重调整与蒸馏温度调整。原创 2023-06-28 21:32:39 · 313 阅读 · 1 评论 -
模型压缩:模型量化、模型蒸馏、模型剪枝
模型压缩:模型量化、模型蒸馏、模型剪枝(用的少)原创 2022-03-03 23:15:00 · 421 阅读 · 0 评论 -
模型压缩-方案(四):模型蒸馏【先用完整复杂模型基于训练集训练出来一个老师模型,然后设计一个小的学生模型,再固定老师模型的权重参数,然后设计一系列Loss,让学生在蒸馏中的预测精度逐渐逼近老师】
名词解释其中,专门针对Bert模型的蒸馏方法有很多,如tinybert,distillBert,pkd-bert等等。下面我就从上述几个角度分别总结一下。主要关注的是将蒸馏方法仅作用在Finetune阶段。经过实验,发现仅在对Finetune后的原始模型进行蒸馏,很难保持原始的精度,或多或少都会有一定程度的精度损失。我们能做的就是在inference性能和inference精度两边做一定的平衡。...原创 2022-03-05 02:41:02 · 5897 阅读 · 0 评论 -
模型压缩-方案(三):模型量化【通过减少表示每个权重所需的“比特”数来压缩原始网络】【建立一种浮点数据和定点数据间的映射关系,可以有效的降低模型计算强度、参数大小和内存消耗,但往往带来巨大的精度损失】
量化即通过减少表示每个权重所需的比特数来压缩原始网络。原创 2022-03-05 02:24:49 · 789 阅读 · 0 评论 -
模型压缩-方案(二)-剪枝【①训练一个基准模型;②、对权重值的幅度进行排序,去掉低于一个预设阈值的连接,得到剪枝后的网络;③、对剪枝后网络进行微调以恢复损失的性能;④、重复第②步】
深度学习网络模型从卷积层到全连接层存在着大量冗余的参数,大量神经元激活值趋近于0,将这些神经元去除后可以表现出同样的模型表达能力,这种情况被称为过参数化,而对应的技术则被称为。......原创 2022-03-05 23:55:16 · 470 阅读 · 0 评论 -
模型压缩-方案(一)-参数共享:ALBERT、BERT-of-Theseus
ALBERT中使用和BERT大小相近的30K词汇表。假如我们的embeddingsize和hiddensize一样,都是768,那么如果我们想增加了hiddensize,就也需要相应的增加embeddingsize,这会导致embeddingtable变得很大。原创 2022-07-19 21:07:22 · 295 阅读 · 0 评论