热门推荐

    通过在该方法上施加一个小trick将Transformer的推理速度提高4.5倍!

    2022-01-04来源于:brandnews官方阅读量:11756   

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

    通过在该方法上施加一个小trick将Transformer的推理速度提高4.5倍!

    但是,厉害归厉害,还是有点贵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。不过,和其他很多Transformer变体的论文一样,这篇论文的标题也引发了一些吐槽:。

    推理引擎为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量化需要修改模型源代码,既容易出错,又很无聊,并且还需自己维护修改后的代码。

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

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

    最终,该方法在Roberta—base模型和MNLI数据集上实现了4.53倍的推理速度。

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

    最终他们用Albert,Bert,Distilbert,Roberta,Electra测试了该trick。

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