通过在该方法上施加一个小trick将Transformer的推理速度提高4.5倍!
作者:肖鸥 栏目:滚动新闻 来源:TechWeb 发布时间:2022-01-05 21:49 阅读量:19015
最近,NLP明星公司Hugging Face发布了一个叫做Infinity的产品,可以以1ms延时完成Transformer的推理,性能相当高了。
但是,厉害归厉害,还是有点贵mdash,mdash,1年至少要十几万块。
那有没有什么平替的方法呢。
有的!还是开源的,不费吹灰之力就可以达到Infinity一些公共基准的那种。
并且现在,通过在该方法上施加一个小trick,将Transformer的推理速度提高4.5倍!
帖子发布不到一天就收获了250+热度
那么,一个平替到底为什么能达到付费的效果呢。
一个trick让Transformer推理速度提高4.5倍
先来认识一下这个方法:Transformer—deploy。
它可以用一行命令优化和部署Hugging Face上的Transformer模型,并支持大多数基于Transformer编码器的模型,比如Bert,Roberta,miniLM,Camembert,Albert,XLM—R,Distilbert等。。
Transformer—deploy推理服务器用的是Nvidia Triton。为了使模型能够处理长程上下文,研究者提出用一个连续LTM来扩展原始transformer,这个LTM存储前面步骤的输入嵌入和隐藏状态。
推理引擎为Microsoft ONNX Runtime和Nvidia TensorRT。
如果想在GPU上获得一流的性能,Nvidia Triton+Nvidia TensorRT这样的组合无疑是最佳选择。
虽然TensorRT用起来有点难,但它确实能比用Pytorch快5~10倍。
在实际性能测试中,Transformer—deploy在batch size为1,token分别为16和128的输入序列中的推理速度,都比付费的Hugging Face Infinity要快:
Transformer—deploy在token为16时要1.52ms,Infinity则需要1.7ms,token为128时需要1.99ms,Infinity则需要2.5ms。
那前面说的能让Transformer的推理性能进一步提高的小trick是什么呢。
GPU量化。
据我所知,目前任何OOS云服务都还没用到过这个方法。
不过执行GPU量化需要修改模型源代码,既容易出错,又很无聊,并且还需自己维护修改后的代码。他们还考虑了有两种记忆的可能性:LTM和STM(短期记忆),类似于transformer-XL的记忆。
后来,他们又发现似乎只需修补模型模块的抽象语法树也可以自动完成。
在用户端,在GPU上执行模型的基本量化类似这样:
最终,该方法在Roberta—base模型和MNLI数据集上实现了4.53倍的推理速度。
当然这也牺牲了0.4个点的精度,如果一点不牺牲的话,也可以加速3.2倍左右。
最终他们用Albert,Bert,Distilbert,Roberta,Electra测试了该trick。
结果是对于任何可以导出为ONNX格式的Transformer模型,都可以开箱即用。infin;-former的整体架构如下图1所示。
。郑重声明:此文内容为本网站转载企业宣传资讯,目的在于传播更多信息,与本站立场无关。仅供读者参考,并请自行核实相关内容。