当前位置: 首页 > 科技观察

Transformer推理速度提升4.5倍,这一招还能帮你省几十万

时间:2023-03-13 03:01:44 科技观察

本文经AI新媒体量子比特(公众号ID:QbitAI)授权转载,转载请联系出处。近日,NLP明星公司HuggingFace发布了一款名为Infinity的产品,可以延迟1ms完成Transformer推理,性能相当高。然而,它仍然有点贵——每年至少10万元人民币(2万美元)。有什么办法可以代替吗?一些!它仍然是开源的,可以“毫不费力”地达到Infinity的一些公共基准。而现在,通过对该方法施加一个小技巧,Transformer的推理速度提高了4.5倍!△帖子不到一天就获得了250+的热度。那么,为什么一个“置换”就能达到“支付”的效果呢?一招让变形金刚的推理速度提升4.5倍。首先我们来认识一下这个方法:Transformer-deploy。只需一行命令即可在HuggingFace上优化部署Transformer模型,支持大部分基于Transformerencoder的模型,如Bert、Roberta、miniLM、Camembert、Albert、XLM-R、Distilbert等。Transformer-deploy推理服务器使用NvidiaTriton。推理引擎是MicrosoftONNXRuntime(用于CPU和GPU推理)和NvidiaTensorRT(仅GPU)。如果你想在GPU上获得一流的性能,像NvidiaTriton+NvidiaTensorRT这样的组合无疑是最好的选择。TensorRT虽然有点难用,但确实可以比使用Pytorch快5-10倍。在实际性能测试中,Transformer-deploy在batchsize1,token16和128的输入序列中的推理速度比paidHuggingFaceInfinity要快:Transformer-deploy在token为16时需要1.52ms,Infinity需要1.7多发性硬化症;token为128时耗时1.99ms,Infinity耗时2.5ms。那么上面提到的可以进一步提升Transformer推理性能的小技巧是什么呢?GPU量化。作者表示:据我所知,这种方式还没有在任何OOS云服务中使用过。但是,进行GPU量化需要修改模型源码(在矩阵乘法等昂贵的操作上添加一些称为QDQ的特定节点),容易出错,枯燥乏味,并且需要自己维护修改后的代码。因此,作者为几个基于Transformer的模型手动完成了这项工作。后来他们发现,似乎只要给模型模块的抽象语法树(AST)打个补丁,似乎也可以自动完成。在用户端,模型的基本量化在GPU上执行如下:最终,该方法在Roberta-base模型和MNLI数据集(分类任务)上实现了4.53倍的推理速度。当然,这也牺牲了0.4分的准确率;如果完全不牺牲的话,可以加速3.2倍左右。作者表示,与原来版本的Transformer-deploy相比,这已经是很大的进步了。毕竟原版的加速成本需要1点以上的精度。最后他们用Albert、Bert(包括miniLM)、Distilbert、Roberta(包括Camembert、XLM-R、DistilRoberta等)、Electra测试了这个技巧。结果是任何可以导出为ONNX格式的Transformer模型都可以“开箱即用”。