你是用PyTorch写transformer的吗?请关注本项目。大多数关于在生产中部署类似Transformer的模型的教程都是建立在PyTorch和FastAPI之上的。两者都是很好的工具,但在推理性能方面不是很好。如果您花时间研究,您可以在ONNXRuntime和Triton推理服务器上构建更好的东西。与普通PyTorch相比,推理速度通常快2到4倍。如果您想在GPU上获得一流的性能,只有一种可能的组合:NvidiaTensorRT和Triton。最终,与普通PyTorch相比,推理速度可以提高5倍。有时它甚至可以将推理速度提高10倍。但是,TensorRT并不以易用性着称,尤其是对于Transformer模型,这需要使用特定的技术。然后,如果你花一些时间,你可以在ONNX运行时和Triton推理服务器之上构建一些东西。与普通的Pytorch相比,您的推理速度通常会快2到4倍。最近,HuggingFace发布了一款名为Infinity的商业产品,它可以以非常高的性能进行推理(与PyTorch+FastAPI部署相比非常快)。不幸的是,据该公司产品总监称,即使是部署在单台机器上的单一型号,这也是一款售价20,000美元的付费产品(具体尺寸信息未公开)。GitHub上有一个项目Transformer-deploy,它是一个基于企业级软件的开源替代方案:推理服务器:NvidiaTriton(它接受查询,将它们提供给引擎,并添加对推理有用的功能,例如动态批处理或多推理引擎调度)推理引擎:MicrosoftONNX运行时(用于CPU和GPU推理)和NvidiaTensorRT(仅GPU)我们似乎可以轻松匹配极少数HFInfinity公共基准测试。但实际上,仍有机会进一步加快推理性能,AFAIK尚未被任何其他OSS项目利用:GPUQuantizationforallTransformermodels!以下是在Roberta-base、seqlen256、batch32、MNLI数据集上的测试结果:源代码:https://github.com/ELS-RD/transformer-deploy/blob/main/demo/quantization/quantization_end_to_end.ipynb项目GitHub:https://github.com/ELS-RD/transformer-deploy执行GPU量化需要修改模型源码(在矩阵乘法等昂贵的操作上添加一些称为QDQ的特定节点),容易出错,繁琐,和一些自己动手做的工作。为此,项目作者为多个模型手动完成了这项工作。在作者看来,这可以通过简单地修补模型模块抽象语法树(又名源代码)来自动完成。从用户端来看,在GPU上执行的模型的基本量化看起来是这样的:要获得比普通PyTorch快4.5倍的模型,需要在MNLI数据集上牺牲0.4个百分点的准确性,如基准测试结果所示,这是一个在许多情况下进行合理的权衡。如果不需要精度损失,加速也可以降低到3.2倍左右。当然,实践中的权衡取决于模型、数据集等,但它给出了一个基本思路。与该项目的先前版本相比,这是一个很大的改进。在指数加速的背后,转换器的源代码被解析为AST,matmul或LayerNorm等运算符被量化器包装,线性层被其量化版本替换,一些不受支持的TensorRT运算符被替换,等等。然后是新的源代码替换的一部分。作者表示,他们已经成功测试了ALBERT、BERT(包括miniLM)、DistilBERT、Roberta(包括Camembert、XLM-R、DistilRoberta等)、Electra的推理。对于任何可以导出为ONNX格式的转换器模型,它应该开箱即用或只需很少的努力。关于CPU的推理,量化很容易,Transformer-deploy项目也支持。但在极端情况下,transformer的性能会变得很差(比如没有批处理、非常短的序列和蒸馏模型)。此外,与NvidiaT4等廉价GPU相比,使用基于上一代IntelCPU(例如C6或M6)的实例在AWS上的性价比非常差。综上所述,在Transformer推理上,除非你满足于慢推理和使用小实例,否则不建议使用CPU推理。参考链接:https://www.reddit.com/r/MachineLearning/comments/rr17f9/p_45_times_faster_hugging_face_transformer/id:almosthuman2014)》】点此阅读该作者更多好文
