基于Transformer的语言模型显示出的性能改进令人惊讶,但是随着模型大小的成倍增长,对服务成本的关注也变得越来越重要。对于基于Bert或GPT-2的情况,大约有1亿个参数,因此必须在很大程度上优化模型大小,内存带宽和推断时间。
用于模型优化的两种代表性技术是蒸馏和量化。共享链接是Huggingface和Microsoft工作的结果,将INT8量化和ONNX运行时应用于Huggingface的模型,并分析了最新CPU支持的SIMD指令集(AVX2,AVX512 VNNI)的性能。作为参考,AVX2具有256位寄存器,AVX512支持512位寄存器,以及一个称为VNNI的CNN特定指令集。
总而言之,应用INT8量化和ONNX运行时可以将模型大小减小到大约四分之一,而性能几乎没有下降。此外,AVX2的推理速度也提高了1.6倍,AVX512 VNNI的推理速度也提高了3倍以上。其中,INT8量化的贡献约为85%,与Pytorch相比,通过应用ONNX运行时所获得的速度提高了约15%。
另一方面,如果测量推断时间,则基于批次大小1,序列长度128,GPT-2和AVX512 VNNI,Pytorch FP32约为58ms;应用ONNX运行时时为45ms,应用INT8量化时为20ms。考虑到以上结果不适用于其他优化技术,例如蒸馏,因此我认为INT8量化和ONNX运行时应用程序都是服务化必不可少的项目。
在深度学习学习市场中,GPU是必不可少的,不可能用CPU取代它们,但是推理市场尚未得出结论。 NVidia Ampere多实例GPU,Intel AVX512 VNNI,Google TPU,高通神经处理引擎,华为麒麟,Apple Bionic等,都可以看作是他们努力拥有自己的解决方案的一步。在这方面,来自不同供应商的产品的互操作性和标准化可能很重要,我认为模型表达标准化框架(例如ONNX)将在这方面做出很大贡献。以下是一起使用HuggingFace和ONNX运行时的介绍和实验结果。
我们还共享了一个指向HuggingFace转换器和ONNX Runtime github的链接。