Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如果只能做整数Integer运算还能用BERT吗?

如果只能做整数Integer运算还能用BERT吗?

作者头像
AI部落联盟
发布于 2021-04-08 05:15:59
发布于 2021-04-08 05:15:59
1.6K0
举报
文章被收录于专栏:AI部落联盟AI部落联盟

想当年,其实估摸着也就大半年前,多多同学还在实验室瞪大眼睛盯着一种叫做xilinx系列的板子,调试着一种叫做VHDL的语言,还记得那个写代码的工具叫做Vivado,不知道大家听说过没有?那个时候,我想实现一个复杂的公式,涉及的计算稍微复杂点(比如来个开方)就要写一大串代码(虽然常用的复杂函数是有IP核可以调的),同时调试过程十分麻烦,甚至要具体到clock对齐。总而言之,十分难忘。那个时候业余时间写下一行Python代码解决一个问题,简直可以直呼“爽啊”。当然,硬件代码虽然难写,但毕竟计算速度、能耗比、并行优势一直很好,所以即便不好写,还是依旧使用广泛。

那么回到今天的主题,在这样只能进行整型数计算的设备上,我们的无敌的BERT如何部署上去呢?当多多看到这篇文章的时候,立刻就来分享给大家了。以下内容主要参考文章:I-BERT: Integer-only BERT Quantization。代码已开源,HuggingFace Git 仓库也有。

相关背景

  1. 最近两年,以BERT为代表的预训练模型大火,在自然语言处理/最近计算机视觉超越各种达到新SOTA,当然预训练模型虽然效果一个比一个好,参数大小也是越来越大。
  2. 想要把这些大模型高效(存储空间小,运算速度快)跑起来大致有这么几个办法: A. Pruning,去掉不太重要的参数; B. 知识蒸馏,找个小一点的模型仿大模型; C. 更快更好的计算框架设计; D. 结合计算硬件对模型进行针对性的优化设计; E. Quantization,量化,比如32bit浮点数变成16bit浮点数甚至8bit整型数。
  3. 目前已有很多压缩Transformer的研究,其中Quantization方面的也不少,但这些Quantization的方法大多不是完完全全的整型数量化(GELU、Softmax、LayerNorm部分都还是用浮点数计算的)。
  4. 新的Integer-only优秀硬件不断更新,比如ARM处理器。

I-BERT主要贡献

  1. 针对激活函数GELU,Softmax函数,I-BERT提出了一种高效并且正确的integer-only的估算方法,该方法为基于整型计算实现的轻量级二阶多项式。
  2. 针对Transformer里的LayerNorm,使用integer-only迭代算法对平方根进行估算。
  3. 基于GELU、Softmax、LayerNorm的估算,将Transformer进行了量化。 具体的Transformer量化为:用INT8乘法和INT32累加器处理Embedding和Matrix multiplication;然后基于INT32的累加结果计算GELU、Softmax和LayerNorm,然后再将INT32量化回INT8。整个计算图中的参数和激活函数计算都是用Intergers。图1展示了I-BERT和其他工作的区别。
  4. I-BERT在基于Roberta-base/large进行了实现,并在GLUE上取得了和全精度模型相近的效果; 和32位浮点计算相比,将I-BERT基于TensorRT部署到T4 GPU上,有4倍的加速效果。

图1 对比I-BERT和之前的工作

I-BERT实现

I-BERT全文都在传递一个思想,其实和我上一篇写的贝叶斯优化很相似:如果一个函数的计算解决不了,就找个近似函数,如果近似函数不好找,就限定自变量范围来找!

1

基本量化方法

这里简单介绍以基本的量化概念和方法,在uniform symmetric quantization框架下(对称、均匀的量化),一个实数x会被映射成一个整数q,q的范围是[-2^(b-1), 2^(b-1) -1],b为量化的bit数,正式定义为:

简单来讲为:

  1. 如果一个数x不在[-a,a]范围内则直接用x=a或者x=-a,如果在范围内则保持x。
  2. 得到x除以2^(b-1)-1得到的整数商作为量化结果。

把量化的结果转化为原始值也就是用q乘以上式中的分母,可以看到量化是损失的,一般来说,量化之后再反量化过程无法得到和原来一摸一样的数字。除了均匀量化,还有很多非均匀、不对称的量化方法,这里不再深入介绍。

1

Integer-Only的非线性函数GELU计算

我们先放出非线性GELU的表达式,然后思考下这么复杂的函数如何用整数计算进行近似估计,orz我感觉挺难的反正:

I-BERT是这么解决这个问题的?

由于整型计算可以计算2阶多项式,比如a(x+b)^2 + c。那么先用2阶多项式估计GELU函数,再用整型计算2阶多项式。为什么是2阶不是更高阶呢?因为阶数约高,估算函数也越复杂,作者发现2阶多项式足够估计GELU了。

2阶多项式估算GLUE又可以转化为优化如下目标函数,主要是对erf函数进行估计:找到一个2阶多项式,系数为a,b,c,能让GELU函数与2阶多项式误差最小。

erf函数有这么两个特点:对于输入很大的值而言,erf结果基本趋近于1或者-1,并且erf函数还是一个奇函数,因此只考虑优化正实数域的优化。在这两个特点下,作者找到一个相对较优的2阶多项式:

其中a=-0.2888,b=-1.769。sgn为符号函数。最终GELU的近视表达为:

整个GELU的估算和效果如图所示:

图2 GELU算法和效果

1

Integer-Only的softmax计算

个人觉得这几个估算十分精妙!

softmax函数的表达式是和特点:

然后可以发现x=x-x_max之后都会变成非正数,然后任何一个非正数可以表达为x=(-ln2)z + p,其中z是一个非负整数,p是一个在[-ln2,0]之间的实数,因此x的指数可以表示为:

>>是移位运算,在整型逻辑计算硬件中十分常见。最终将估计问题变化为简单的:估计[-ln2,0]之间的p的指数值。同样使用2阶多项式进行估计,最终得到:

到这里,整个integer-only的softmax计算逻辑如图所示:

图3 Softmax估计算法

1

Integer-Only的Layer Norm

Layer Norm在Transformer中大量使用,并且使用了非线性函数来计算方差和均值。

而且,注意LayerNorm的计算是在模型运行的是时候动态计算的,所以这些开方、平方运算也需要跟着一起算。不过这些平方、开方运算在整型运算里面还算常见,常见的方法就是迭代求解。如下图所示,便不再详细介绍啦:

图4 Layer Norm中的平方根估算方法

1

I-BERT的效果

虽然说I-BERT能完成用整型计算得到Transformer的结果了,但也不能损失太多的效果。总体上I-BERT的效果是不错的。如下图所示:

图5 GLUE任务上的效果

同时I-BERT在硬件上的运算速度也很好,相比于浮点数计算有2-4倍的加速。

图6 硬件运行加速对比

总结

本文对I-BERT进行了介绍,整体上I-BERT能完全基于整型计算进行,并且对于GELU、Softmax、LayerNorm的估算非常有借鉴意义。笔者能从这几个估算过程感受懂啊数学之美啊!!!!!

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-03-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 AI部落联盟 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
担心prompt泄露隐私?这个框架让LLaMA-7B完成安全推理
现如今已有大量提供深度学习服务的供应商,在使用这些服务时,用户需要将自己的信息包含在 prompt 中发送给这些服务商,这会导致隐私泄漏等问题。另一方面,服务商基本不愿意公开自己辛苦训练得到的模型参数。
机器之心
2023/08/08
5050
担心prompt泄露隐私?这个框架让LLaMA-7B完成安全推理
AI大模型落地不远了!首个全量化Vision Transformer的方法FQ-ViT(附源代码)
论文地址:https://arxiv.org/pdf/2111.13824.pdf
计算机视觉研究院
2023/08/24
6850
AI大模型落地不远了!首个全量化Vision Transformer的方法FQ-ViT(附源代码)
I-LLM:首次实现了LLM全整形量化,精度逼近浮点,超过Smooth/Omini/AffineQuant
来源丨https://zhuanlan.zhihu.com/p/701393483
BBuf
2024/06/06
1.1K0
I-LLM:首次实现了LLM全整形量化,精度逼近浮点,超过Smooth/Omini/AffineQuant
LLM 盛行,如何优雅地训练大模型?
ChatGPT于2022年12月初发布,震惊轰动了全世界,发布后的这段时间里,一系列国内外的大模型训练开源项目接踵而至,例如Alpaca、BOOLM、LLaMA、ChatGLM、DeepSpeedChat、ColossalChat等。不论是学术界还是工业界,都有训练大模型来优化下游任务的需求。
NewBeeNLP
2023/09/01
2.4K0
LLM 盛行,如何优雅地训练大模型?
降低预测过程计算成本,这些NLP模型压缩方法要知道
近年来,基于谷歌Transformer的语言模型在神经机器翻译,自然语言推理和其他自然语言理解任务上取得了长足进展。
AI科技大本营
2020/04/26
8910
降低预测过程计算成本,这些NLP模型压缩方法要知道
深度学习模型压缩与加速综述
本文详细介绍了4种主流的压缩与加速技术:结构优化、剪枝、量化、知识蒸馏,作者分别从每个技术结构与性能表现进行陈述。
小白学视觉
2022/02/10
1K0
深度学习模型压缩与加速综述
LRP-QViT完美而来 | 输出层分配相关性+剪切通道让Swin Transformer量化后居然涨1.5个点
视觉 Transformer (ViTs)在各种视觉任务上取得了最先进(SOTA)的性能,包括图像分类,目标检测和分割。然而,它们的计算需求高、内存占用大且能源消耗大,这使得在资源受限的平台部署起来不切实际。压缩和加速技术已经被研究用于ViTs,旨在在保持性能的同时减少原始网络大小。用于模型缩减的各种方法包括网络剪枝,低秩分解,量化,知识蒸馏,以及动态标记减少。
集智书童公众号
2024/01/29
1.1K0
LRP-QViT完美而来 | 输出层分配相关性+剪切通道让Swin Transformer量化后居然涨1.5个点
最高加速9倍!字节跳动开源8比特混合精度Transformer引擎
如何继续提升速度?降低计算精度是比较直接的方法。2017 年以来,fp16 混合精度技术 [2] 获得了广泛应用。在对模型效果无损的前提下,将模型训练和推理的速度提升了 50% 以上。而为了维持模型效果,更低精度的方法(例如 int8)通常需要使用如下传统方案:
机器之心
2022/12/15
1.1K0
最高加速9倍!字节跳动开源8比特混合精度Transformer引擎
AAAI 2020 | 超低精度量化BERT,UC伯克利提出用二阶信息压缩神经网络
上周四,加州大学伯克利分校 Zhewei Yao 博士分享了他的 AAAI 论文《Q-BERT: Hessian Based Ultra Low Precision Quantization of BERT》,本文对此论文进行了详细解读。该研究介绍了一种使用二阶信息进行模型压缩的新型系统性方法,能够在图像分类、目标检测和自然语言处理等一系列具有挑战性的任务中产生前所未有的小模型。
机器之心
2020/02/14
1.1K0
AAAI 2020 | 超低精度量化BERT,UC伯克利提出用二阶信息压缩神经网络
Trio-ViT | 专门针对高效 ViTs 的卷积 Transformer混合架构的加速器!
感谢自注意力机制强大的全局信息提取能力,Transformers在各种自然语言处理(NLP)任务中取得了巨大成功。这一成功催生了视觉Transformers(ViTs)[4, 5]的快速发展,它们在计算机视觉领域受到了越来越多的关注,并且与基于卷积的对应物相比显示出优越的性能。
集智书童公众号
2024/05/17
5440
Trio-ViT | 专门针对高效 ViTs 的卷积 Transformer混合架构的加速器!
BERT代码实现及解读
$$ \text{Attention}(\boldsymbol{Q},\boldsymbol{K},\boldsymbol{V}) = \text{softmax}(\frac{\boldsymbol{Q}\boldsymbol{K}^T}{\sqrt{d_k}})\boldsymbol{V} $$
机械视角
2019/10/23
1.2K0
BERT代码实现及解读
【BERT】BERT模型压缩技术概览
由于BERT参数众多,模型庞大,推理速度较慢,在一些实时性要求较高、计算资源受限的场景,其应用会受到限制。因此,讨论如何在不过多的损失BERT性能的条件下,对BERT进行模型压缩,是一个非常有现实意义的问题。
用户1508658
2020/08/17
1.5K0
【BERT】BERT模型压缩技术概览
绕过除法与平方根,PEANO-ViT 在 FPGA 上实现高效视觉Transformer !
凡本公众号注明“来源:XXX(非集智书童)”的作品,均转载自其它媒体,版权归原作者所有,如有侵权请联系我们删除,谢谢。
集智书童公众号
2024/07/10
3980
绕过除法与平方根,PEANO-ViT 在 FPGA 上实现高效视觉Transformer !
解决LLaMA、BERT等部署难题:首个4-bit浮点量化LLM来了
大语言模型 (LLM) 压缩一直备受关注,后训练量化(Post-training Quantization) 是其中一种常用算法,但是现有 PTQ 方法大多数都是 integer 量化,且当比特数低于 8 时,量化后模型的准确率会下降非常多。想较于 Integer (INT) 量化,Floating Point (FP) 量化能更好的表示长尾分布,因而越来越多的硬件平台开始支持 FP 量化。而这篇文章给出了大模型 FP 量化的解决方案。文章发表在 EMNLP 2023 上。
机器之心
2023/11/18
8220
解决LLaMA、BERT等部署难题:首个4-bit浮点量化LLM来了
【AI系统】感知量化训练 QAT
本文将会介绍感知量化训练(QAT)流程,这是一种在训练期间模拟量化操作的方法,用于减少将神经网络模型从 FP32 精度量化到 INT8 时的精度损失。QAT 通过在模型中插入伪量化节点(FakeQuant)来模拟量化误差,并在训练过程中最小化这些误差,最终得到一个适应量化环境的模型。
用户11307734
2024/12/05
4430
【大模型学习 | BERT 量化实战(2) 】
🔴 在量化过程中,发现无法采用export量化,但是 Eager Mode 成功了, Eager Mode 只对线性层进行了量化,而没有对embedding层进行量化; EXPORT 量化仅支持对所有的层进行量化 (所以量化结果只剩下0.01M),无法支持指定层的量化;
九年义务漏网鲨鱼
2025/06/27
750
【大模型学习 | BERT 量化实战(2) 】
NLP新秀:BERT的优雅解读
恰逢春节假期,研究了一下BERT。作为2018年自然语言处理领域的新秀,BERT做到了过去几年NLP重大进展的集大成,一出场就技惊四座碾压竞争对手,刷新了11项NLP测试的最高纪录,甚至超越了人类的表现,相信会是未来NLP研究和工业应用最主流的语言模型之一。本文尝试由浅入深,为各位看客带来优雅的BERT解读。
腾讯技术工程官方号
2019/02/18
8.8K0
NLP新秀:BERT的优雅解读
【ADAS】万字文告诉你Transformer在BEV、3D检测、2D检测、Lane检测的应用,量化与加速
近年来,自动驾驶已成为一个快速发展的领域,旨在为人类驾驶员提供自动化和智能系统。自动驾驶技术的成功部署有望显著提高交通系统的安全性和效率。在过去的二十年里,为自动驾驶开发了一系列数据驱动技术,从传统的基于规则的方法到先进的机器学习方法。
公众号-arXiv每日学术速递
2023/08/26
2.6K0
【ADAS】万字文告诉你Transformer在BEV、3D检测、2D检测、Lane检测的应用,量化与加速
一文速览EMNLP 2020中的Transformer量化论文
「论文地址:」https://www.aclweb.org/anthology/2020.findings-emnlp.1.pdf
godweiyang
2020/12/14
6220
一文速览EMNLP 2020中的Transformer量化论文
加速AGI落地!使用4-bit整数训练Transformer,比FP16快2.2倍,提速35.1%
论文地址:https://arxiv.org/pdf/2306.11987.pdf
计算机视觉研究院
2023/08/24
3490
加速AGI落地!使用4-bit整数训练Transformer,比FP16快2.2倍,提速35.1%
推荐阅读
相关推荐
担心prompt泄露隐私?这个框架让LLaMA-7B完成安全推理
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档