0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

tansformer的量化实现方案

454398 来源:AI加速微信公众号 作者:AI加速微信公众号 2020-11-03 15:21 次阅读

理论介绍

相比于训练后量化方法,将量化过程插入到训练中可以弥补量化产生的误差,但是带来的问题可能是增加了训练的时间。在tansformer的量化实现中,我们采用了训练中量化的方法,在网络前向传输中,对权重等参数进行线性量化。反向传播中,对scale和权重参数的求导采用Hinton的strait-through estimator的方式。在CPU上训练花费了10天的时间,在这期间又review了最近的量化方法的文章。所以先总结一下,然后再分析一下transformer量化的结果。

1) PACT

这是一种实现对activation量化的方法,基本思想是通过训练来获得ReLU的一个clip参数a。a的动态调整能够在减少量化误差和保证反向传播有效进行之间获得平衡。PACT重新定义了ReLU过程如下:

参数a限定了activation的范围为[0, a]。然后获得的激活值y在进行线性映射到k bit的表示空间,如下:

在这里[0, a]是y值的一个限定,a>=y。所以其范围比y值的实际范围要大,这可以对y的量化误差有一些弥补。采用strait-through estimator方法计算其相对于a的梯度为:

当a趋向于无穷大的时候,就接近于ReLU函数,所以训练过程一定是往a增大方向移动。通过在loss中增加a的L2 规范化可以寻求一个合适的a值。

2) quantization-aware training

谷歌采用量化和训练分离的方法,在前向计算使用量化数据,而在训练的时候还是浮点训练。量化方法为如下公式:

其中S为scale参数,z是零点偏移,q是量化后参数。Z值的存在会导致矩阵或者卷积运算中有交叉项。这会增加一部分加法和乘法项。这在CPU等通用处理器上容易实现,只是一个时间复杂度的问题,但是实际上不利于在FPGA硬件上实现。所以FPGA等平台的量化一般都让z值为0。消除交叉项计算。对于一个矩阵乘法,量化导致了scale的组合,比如:




在这里M是浮点数据,在这里作者对其又做了一次量化,首先将M数据映射到[0.5, 1)空间,然后在使用32bit数据来表达为整数。

32bit的表达能够降低量化精度。

在量化整个网络的过程中,作者也提供了一些处理技巧。在进行线性量化的时候,采用了对称的量化区间,比如8bit量化,正常取值范围在[-128, 127],作者取了对称空间[-127, 127]。这样做的目的和实现的平台有关。在量化activation的时候,使用EMA来处理收集到的数值范围,这样做可以在初始训练中,完全屏蔽掉对activation的量化,使得训练进入到一个比较稳定的状态后在进行量化。BN是一个复杂的计算,但是可以将其折叠到之前的卷积层和FC层中,如下图所示:



3) 训练后量化,基于KL发散性。

基于训练后的量化方法的优势就是量化花费时间短。在tensorRT中使用了KL发散性来描述量化后的数据和浮点数据之间的信息损失程度。通过最小化这个值来达到量化后数据包含的信息接近浮点数据的信息。这种方法的出发点是,为了保证量化后模型的精度损失较小,应该让量化后的数据和原始浮点数据表达的信息最一致。具体的做法是:

对每层网络,先收集activation的数值区间,这样就生成一个activation值的分布;采用不同的量化区间[a,b]来对activation进行线性映射,这样就形成了针对参数a和b的多种不同分布,然后找到和原始数据分布KL最小的分布,这个时候得到的a和b的值就是量化activation时所采用的threshold值。

Transformer量化结果

还是决定由简入难,先进行16bit的量化,量化内容包括transformer中的dense层,FC层。对权重和数据都进行16bit的量化,即将量化节点插入到计算图中。梯度采用strait-through estimator来估计。对于embedding,softmax,layer normalization还是使用浮点值。因为担心对这些的量化可能会导致精度降低。选择batch size为256,epoch为20,数据集使用英语德语翻译数据集。这个数据集有460万个句子。在服务器上使用CPU跑了10天,以下是结果:

对比一下github上作者浮点模型的训练结果:


发现存在以下问题:

1 loss下降很慢,浮点模型在训练到达5k次的时候,loss已经下降到4了,但是量化的训练loss在5k次的时候才到5.4。经历了前几次快速下降之后,后边更加缓慢。

2 BLEU得分很低,训练了10K次后得分才有0.11。得分低的原因也是loss值很低。

第一次做没有什么经验,猜测可能有以下几种原因:

1 对所有的scale我都使用了常数2作为初始值,为什么选择2,并没有什么原因,就是随便选择的。或许初始值的不当导致了loss训练很慢。设想通过以下方式来改进,先进行warmup,通过计算参数的范围来计算出一个scale值。进行了几轮warmup之后再进行量化训练。

2 因为看到loss也一直是下降的趋势,那么猜测可能是量化训练是比正常训练收敛慢。因为量化参数的梯度在参数超过阈值会为0,这个可能导致梯度更新较慢。

编辑:hfy


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10824

    浏览量

    211095
  • Transformer
    +关注

    关注

    0

    文章

    141

    浏览量

    5980
收藏 人收藏

    评论

    相关推荐

    解读大模型FP量化的解决方案

    63.1 的分数,只比完整精度模型低了 5.8 分,且比之前的 SOTA 方法平滑量高出了 12.7,这是目前少数已知可行的 4-bit 量化方案了。
    发表于 11-24 11:15 884次阅读
    解读大模型FP<b class='flag-5'>量化</b>的解决<b class='flag-5'>方案</b>

    实现量化生产线性恒流驱动IC方案

    变压器和电感,可实现量化生产。SM2082B支持单颗应用,也支持并联应用,同时还支持可控硅调光应用,适用于T8/T5、平板灯、吸顶灯等LED照明领域,易过3C、UL、CE等认证标准
    发表于 11-20 15:00

    怎么在GUI中如何实现量化

    在GUI中如何实现均匀量化和非均匀量化,可以达到等距输入参数得到相应变化,谢谢帮助,最好给个程序
    发表于 05-26 18:23

    碳纤维为何能实现汽车轻量化

    碳纤维是一种与人造丝、合成纤维丝一样的纤维状碳材料,是目前世界高科技领域中十分重要的新型工业材料,提高汽车的绿色化性能。 节约不可再生能源和提高燃料效率的汽车轻量化解决方案正推动碳纤维应用快速增长
    发表于 01-25 16:52

    怎样分析量化过程及Verilog实现方法?

    编码语法等。由于采用了整数变换,计算不会出现浮点数,而且精度高等。这些措施使得H.264算法具有很高的编码效率。在量化方面,量化步长采用52个,下面将主要分析量化。在此,提出量化的Ve
    发表于 07-05 08:16

    请问怎样实现H.264的量化

    量化的功能有哪些?量化的算法是什么?怎样用Verilog语言实现H.264的量化?如何运用Modelsim对H.264进行仿真?
    发表于 04-28 06:12

    INT8量化常见问题的解决方案

    一、int8的输出和fp32模型输出差异比较大 解决方案: 检查前后处理是否有问题,int8网络输入输出一般需要做scale处理,看看是否遗漏? 通过量化可视化工具分析int8的输出和fp32
    发表于 09-19 06:09

    基于模糊规则的服装风格的区域量化实现

    服装风格的概念和影响因素十分复杂,是款式CAD 实现智能化的难点所在。本文根据模糊规则,采用划分风格区域的方法对款式风格进行初步的量化。通过对具体款式的量化分析,对
    发表于 08-15 09:06 17次下载

    数字马达控制系统的量化误差设计方案

    数字马达控制系统的量化误差设计方案 量化误差的产生 数字控制系统能够为设计人员提供多种优势,如更易于实现高级算法功能、成本更低且性能更稳定等
    发表于 03-12 15:49 729次阅读
    数字马达控制系统的<b class='flag-5'>量化</b>误差设计<b class='flag-5'>方案</b>

    非线性量化的模拟实现方法

    本内容详细介绍了非线性量化的模拟实现方法
    发表于 06-22 15:54 26次下载
    非线性<b class='flag-5'>量化</b>的模拟<b class='flag-5'>实现</b>方法

    如何使用FPGA实现微型SAR成像的量化显示

    针对微型合成孔径雷达(SAR)实时成像处理机高性能、小体积、低功耗的特点和要求,提出了一种基于FPGA实现微型SAR成像灰度量化、显示驱动的设计方案。采用StratixⅡEP2S180开发板为
    发表于 01-26 15:30 10次下载

    深度解析MegEngine 4 bits量化开源实现

    因此量化模型被广泛使用在推理侧,量化也成为了一个重要且非常活跃的研究领域。近期,MegEngine 开源了 4 bits 的量化的相关内容,通过 MegEngine 4 bits 量化
    的头像 发表于 09-23 15:08 933次阅读

    浅谈轻量化设计:材料、创新技术及未来解决方案

    量化的材料就是可以用来减轻产品自重且可以提高产品综合性能的材料。材料轻量化,指的是在满足机械性能要求的前提下,通过采用轻量化的金属和非金属材料实现重量减轻的方法。在当前汽车制造领域,
    的头像 发表于 01-29 10:43 1553次阅读

    量化5G核心网的实现方式

    5G核心网分离架构明确了各网元间的分工,为轻量化5GC的实现提供了保障。轻量化5GC设备是一种利用较少资源实现核心网主要功能的技术产品,通常在单个硬件服务器上就能
    发表于 06-20 10:35 1010次阅读
    轻<b class='flag-5'>量化</b>5G核心网的<b class='flag-5'>实现</b>方式

    基于MacroBenchmark的性能测试量化指标方案

    基于Benchmark的性能测试量化指标方案是一种用于评估和量化系统性能的方法。通过使用Benchmark测试工具,该方案旨在提供可靠的性能数据,并使用具体的指标来衡量系统在各个方面的
    的头像 发表于 10-17 10:15 713次阅读