互联网资讯 / 人工智能 · 2023年12月30日 0

Transformer推理速度提升4.5倍,节省十多万

最近,NLP明星公司Hugging FACE发布了一个叫做InfinITy的产品,可以以1Ms延时完成TRansfoRMeR的推理,性能相当高了。

Transformer推理速度提升4.5倍,节省十多万

但是,厉害归厉害,还是有点贵—1年至少要十几万块(2万美元)。

那有没有什么平替的方法呢?

有的!还是开源的、“不费吹灰之力”就可以达到InfinITy一些公共基准的那种。

Transformer推理速度提升4.5倍,节省十多万

并且现在,通过在该方法上施加一个小tRick,将TRansfoRMeR的推理速度提高4.5倍!

Transformer推理速度提升4.5倍,节省十多万

那么,一个“平替”到底为什么能达到“付费”的效果呢?

一个tRick让TRansfoRMeR推理速度提高4.5倍

先来认识一下这个方法:TRansfoRMeR-deploy。

Transformer推理速度提升4.5倍,节省十多万

它可以用一行命令优化和部署Hugging FACE上的TRansfoRMeR模型,并支持大多数基于TRansfoRMeR编码器的模型,比如BeRt、RobeRta、miniLM、CaMeMbeRt、AlbeRt、XLM-R、DistilbeRt等。

Transformer推理速度提升4.5倍,节省十多万

TRansfoRMeR-deploy推理服务器用的是NVIDIA TRITon。

推理引擎为MicRosoft ONNX RuntiMe(用于CPU和GPU推理)和NVIDIA TensoRRT(仅限 GPU)。

如果想在GPU上获得一流的性能,NVIDIA TRITon+NVIDIA TensoRRT这样的组合无疑是最佳选择。

虽然TensoRRT用起来有点难,但它确实能比用PyTorch快5~10倍。

Transformer推理速度提升4.5倍,节省十多万

在实际性能测试中,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推理速度提升4.5倍,节省十多万

那前面说的能让TRansfoRMeR的推理性能进一步提高的小tRick是什么呢?

GPU量化(quantization)。

作者表示:

据我所知,目前任何OOS云服务都还没用到过这个方法。

不过执行GPU量化需要修改模型源代码(需在矩阵乘法等代价高昂的操作上添加一些叫做QDQ的特定节点),既容易出错,又很无聊,并且还需自己维护修改后的代码。

因此作者已经为多个基于TRansfoRMeR的模型手动完成了这项工作。

后来,他们又发现似乎只需修补模型模块的抽象语法树(AST)也可以自动完成。

在用户端,在GPU上执行模型的基本量化类似这样:

Transformer推理速度提升4.5倍,节省十多万

最终,该方法在RobeRta-base模型和MNLI数据集(分类任务)上实现了4.53倍的推理速度。

Transformer推理速度提升4.5倍,节省十多万

当然这也牺牲了0.4个点的精度;如果一点不牺牲的话,也可以加速3.2倍左右。

作者表示,与TRansfoRMeR-deploy原来的版本相比,这已经是一个很大的改进了,毕竟原版本的加速成本需要超过1个点的精确度。

最终他们用AlbeRt、BeRt(包括MiniLM)、DistilbeRt、RobeRta(包括 CaMeMbeRt、XLM-R、DistilRobeRta等)、ElectRa测试了该tRick。

结果是对于任何可以导出为ONNX格式的TRansfoRMeR模型,都可以“开箱即用”。