模型推理加速系列07:以bert为例全面评测各种推理加速方案(代码片段)

JasonLiu1919 JasonLiu1919     2022-12-23     240

关键词:

简介

冬至夜月圆,霜露点清银。枫叶落尽霜,寒风凛冽水。山河冰封路,长夜独酌愁。火炉照暖家,窗外雪花飞。小伙伴们好,我是微信公众号小窗幽记机器学习的首席试药师:卖布洛芬的小男孩。上面这首诗是最近顶流ChatGPT模仿李白风格创作的,仅供欣赏。前文以CV领域中的resnet18模型为例综合评测各种推理加速方案,具体评测结果可以参考之前的小作文:模型推理加速系列 | 06: 基于resnet18加速方案评测。今天这篇小作文尝试以NLP领域中的常用模型BERT为例(仅将输入文本进行encode),综合评测包括Pytorch、ONNX、JIT、TensorRT和OpenVino在内这5种推理方案的性能。

更多、更新文章欢迎关注微信公众号:小窗幽记机器学习。后续会持续输出模型推理加速和工程部署相关系列,敬请期待~

模型导出

导出 ONNX

如何将Pytorch版BERT导出为ONNX格式可以参考之前的文章:模型推理加速系列|04:BERT模型推理加速 TorchScript vs. ONNX

导出 TorchScript

如何将Pytorch版BERT导出为TorchScript格式可以参考之前的文章:模型推理加速系列|04:BERT模型推理加速 TorchScript vs. ONNX,更多关于TorchScript模型格式的介绍可以参考之前的文章:模型推理加速系列|05:TorchScript模型格式简介及其使用

导出 TensorRT

在TensorRT这部分依次评测变长定长版(指文本输入长度上的限制),所以在导出TensorRT模型格式的时候,导出支持变长和定长文本输入的两个版本。

导出输入文本定长版 TensorRT engine格式模型示例如下:

CUDA_VISIBLE_DEVICES=0 trtexec --onnx=/home/model_zoo/nlp/onnx/bert-base-chinese/bert_dynamic.onnx  --minShapes=input_ids:1x32,attention_mask:1x32,token_type_ids:1x32 --optShapes=input_ids:64x32,attention_mask:64x32,token_type_ids:64x32 --maxShapes=input_ids:128x32,attention_mask:128x32,token_type_ids:128x32 --saveEngine=/home/model_zoo/nlp/tensorrt/bert_static_32.engine

PS:

以上导出的模型在batch size维度上的动态的,但是只支持长度为32的输入文本。

导出输入文本变长版 TensorRT engine格式模型示例如下:

CUDA_VISIBLE_DEVICES=0 trtexec --onnx=/home/model_zoo/nlp/onnx/bert-base-chinese/bert_dynamic.onnx --minShapes=input_ids:1x8,attention_mask:1x8,token_type_ids:1x8 --optShapes=input_ids:64x32,attention_mask:64x32,token_type_ids:64x32 --maxShapes=input_ids:128x64,attention_mask:128x64,token_type_ids:128x64 --saveEngine=/home/model_zoo/nlp/tensorrt/bert_dynamic_max64.engine

导出 OpenVino

使用的镜像是openvino/ubuntu20_runtime:latest。先用之前Pytorch格式模型转为的ONNX格式模型,再将ONNX格式模型转为OpenVino所需要的格式。这里需要用到mo命令,安装方式如下:pip3 install openvino-dev[all]。将ONNX模型转为openvino的命令如下:

mo --input_model /home/model_zoo/nlp/onnx/bert-base-chinese/bert_dynamic.onnx --input "input_ids[-1 128],attention_mask[-1 128],token_type_ids[-1 128]" --output_dir /home/model_zoo/nlp/openvino/bert/ --data_type FP32

评测结果

本次实验硬件信息:

GPU:1张 Nvidia T4

CPU:10 Intel® Xeon® Platinum 8255C CPU @ 2.50GHz

以下实验结果是batch size的推理耗时,单位是ms

输入文本长度为 8

CPU:

batch sizePytorchONNXJITOpenVino(定长版)OpenVino(变长版)
124.510.118.812.112.5
246.712.035.514.716.2
453.918.040.925.425.5
865.230.350.635.036.8
1682.653.665.366.166.2
32126.399.1105.9112.7112.1
64236.2194.2192.9198.5200.1
128474.9368.2360.3362.1364.6

GPU:

batch sizePytorchONNXJITTensorRT(定长版)TensorRT(变长版)
110.76.58.34.87.9
211.66.68.35.17.9
410.97.17.25.58.0
811.610.011.37.88.0
1615.814.915.413.020.9
3224.323.823.920.675.3
6444.642.644.437.2287.9
12886.587.683.973.5568.1

输入文本长度为 16

CPU:

batch sizePytorchONNXJITOpenVino(定长版)OpenVino(变长版)
146.112.235.514.616.3
252.718.141.921.824.2
464.130.051.931.938.6
881.152.768.052.566.2
16125.497.4111.1102.6112.4
32235.2190.8216.7185.8197.1
64430.8362.8352.6340.7366.3
128754.7725.4769.1620.1718.5

GPU:

batch sizePytorchONNXJITTensorRT(定长版)TensorRT(变长版)
111.06.68.05.121.1
211.27.17.25.521.1
411.810.211.47.921.4
816.215.215.813.521.9
1625.124.724.820.920.8
3245.943.745.438.074.3
6488.890.187.275.8286.9
128174.2174.8170.8148.6571.2

TensorRT 模型是定长输入,如果使用变长版TensorRT,但是输入的文本长度设置为16。

输入文本长度为 32

CPU:

batch sizePytorchONNXJITOpenVino(定长版)OpenVino(变长版)
145.818.039.721.822.7
264.729.851.132.232.4
480.652.965.652.752.0
8129.496.8115.295.492.6
16244.9191.7213.5178.8196.3
32420.1363.7362.3312.2318.2
64794.5733.0701.9636.4713.7
1281648.01477.61501.51281.91441.1

GPU:

batch sizePytorchONNXJITTensorRT(定长版)TensorRT(变长版-maxlen512)
110.67.57.25.574.6
212.010.511.77.974.9
416.315.616.013.575.4
824.824.724.821.876.4
1644.944.145.637.374.9
3286.589.486.674.574.4
64173.3174.6170.7146.1288.0
128326.9346.8322.3285.61188.4

输入文本长度为 64

CPU:

batch sizePytorchONNXJITOpenVino(定长版)OpenVino(变长版)
156.730.249.432.132.6
272.253.372.052.853.3
4112.498.3105.893.093.2
8218.4197.1205.6208.9177.3
16402.5367.9392.9310.0391.7
32764.8739.3752.7653.2711.3
641531.41488.31442.01356.51580.3
1283244.53139.72883.63063.23133.2

GPU:

batch sizePytorchONNXJITTensorRT(定长版)TensorRT(变长版-maxlen512)TensorRT(变长版-maxlen64)
111.810.511.58.0287.7287.4
216.315.416.113.7287.8287.5
425.324.625.322.0288.6291.6
844.943.646.239.4293.1291.1
1688.989.886.774.7287.3288.9
32176.2174.9170.5146.2287.9288.9
64332.7348.1322.7287.3288.6288.6
128675.4683.1655.1569.21185.5574.9

结论

根据上述实验结果可以得出以下结论:

  • 对于CPU,短文本和小batch size 场景,ONNX推理速度最快,OpenVnio次之。而在长文本和大batch size的场景,OpenVino推理速度最快
  • 对于OpenVino,在短文本和小batch size场景,定长输入和变长输入性能差别不大。随着文本长度增加和batch size增大,定长版OpenVino显著优于变长版OpenVino
  • 对于GPU定长版TensorRT显著优于变长版TensorRT。但是,定长版在实际使用中可能会涉及对输入文本的padding操作,需要在具体使用场景中评测该部分的耗时。

更多、更新文章欢迎关注微信公众号:小窗幽记机器学习。后续会持续输出模型推理加速和工程部署相关系列,敬请期待~

模型推理加速系列bert加速方案对比torchscriptvs.onnx(代码片段)

文章目录简介基于ONNX导出ONNX模型示例代码基于TorchScriptJITTorchScript示例代码推理速度评测CPUGPU附录简介本文以BERT-base的为例,介绍2种常用的推理加速方案:ONNX和TorchScript,并实测对比这两种加速方案与原始Pytorch模型... 查看详情

模型推理加速系列04:bert加速方案对比torchscriptvs.onnx(代码片段)

文章目录简介基于ONNX导出ONNX模型示例代码基于TorchScriptJITTorchScript示例代码推理速度评测CPUGPU附录简介本文以BERT-base的为例,介绍2种常用的推理加速方案:ONNX和TorchScript,并实测对比这两种加速方案与原始Pytorch模型... 查看详情

模型推理加速系列06:基于resnet18加速方案评测(代码片段)

...称重师:卖麻辣烫的小男孩。今天这篇文章以resnet18模型为例,对比Pytorch、ONNX、TorchScript、TensorRT模型格式在不同硬件(包括CPU和GPU)上的inference性能。由于此前TorchScript模型在AMDCPU上的评测结果是负向效果(远慢于Pytorch)ÿ... 查看详情

模型推理加速系列06:基于resnet18加速方案评测(代码片段)

...称重师:卖麻辣烫的小男孩。今天这篇文章以resnet18模型为例,对比Pytorch、ONNX、TorchScript、TensorRT模型格式在不同硬件(包括CPU和GPU)上的inference性能。由于此前T 查看详情

量化感知训练实践:实现精度无损的模型压缩和推理加速(代码片段)

简介:本文以近期流行的YOLOX[8]目标检测模型为例,介绍量化感知训练的原理流程,讨论如何实现精度无损的实践经验,并展示了量化后的模型能够做到精度不低于原始浮点模型,模型压缩4X、推理加速最高2.3X... 查看详情

bert模型介绍

  前不久,谷歌AI团队新发布的BERT模型,在NLP业内引起巨大反响,认为是NLP领域里程碑式的进步。BERT模型在机器阅读理解顶级水平测试SQuAD1.1中表现出惊人的成绩:全部两个衡量指标上全面超越人类,并且还在11种不同NLP测试... 查看详情

基于bert的多模型融合借鉴(代码片段)

...文提出的方法在最终的评测数据上达到F1为0.92664的成绩。模型介绍模型结构本文采用了多种模型,下以BERT-CNN-Pooling模型为例介绍,见下图。该模型采用BERT模型提取出字向量(不Finetune),然后结合腾讯词向量,作为最终的词向... 查看详情

「大模型」之所短,「知识图谱」之所长

近两年,人工智能领域的大模型可谓炙手可热。以自然语言处理领域为例,自BERT横空出世,在各种评测上分数一飞冲天,在斯坦福阅读理解评测集上超越人类水平之后,各种越来越大的自然语言处理模型不断... 查看详情

nlp下的bert模型的一些学习

...态情绪识别项目中自然语言处理在经过训练LSTM与Bert两款模型后发现Bert是真的强BERT是2018年10月由GoogleAI研究院提出的一种预训练模型。BERT在机器阅读理解顶级水平测试SQuAD1.1中表现出惊人的成绩:全部两个衡量指标上全面超越人... 查看详情

模型推理谈谈为什么量化能加速推理(代码片段)

... o_O O_o ~_~ o_O 本文主要讨论一下为什么量化能加速模型推理。 前面已经写过几篇关于模型量化相关的文章:《【模型推理】谈谈几种量化策略:MinMax、KLD、ADMM、EQ》、《【模型推理】谈谈模型量化组织方式》、... 查看详情

两行代码自动压缩vit模型!模型体积减小3.9倍,推理加速7.1倍

Transformer模型及其变体,因其更优的注意力机制能力和长时依赖等特性,已成为自然语言处理(NLP)、语音识别(ASR)、计算机视觉(CV)等领域的主流序列建模结构。根据PaperWithCode网站ObjectDetectiononCOCOtest-dev专栏数据,检测... 查看详情

bert技术

...ationfromTransformers)就成为NLP领域大火、整个ML界略有耳闻的模型。BERT的出现,彻底改变了预训练产生词向量和下游具体NLP任务的关系,提出龙骨级的训练词向量概念。词向量,就是用一个向量的形式表示一个词。(1)one-hot编码:... 查看详情

bert/transformer模型加速

...ontext信息编码或长时依赖建模能力,能够使图像/视觉模型具备更强的特征表达能力、与领域适应性。因此在计算机视觉领域(CV)& 查看详情

模型推理一文看懂winograd卷积加速算法(代码片段)

...篇卷积加速相关的文章,感兴趣的同学可以查阅《【模型推理】一文看懂Img2Col卷积加速算法》、《【模型推理】一文看懂GoogleTPU脉动阵列加速卷积计算原理》、《【模型推理】谈谈为什么 查看详情

如何加速 Tensorflow 2 keras 模型进行推理?

】如何加速Tensorflow2keras模型进行推理?【英文标题】:HowtospeedupTensorflow2kerasmodelforinference?【发布时间】:2020-03-0420:50:55【问题描述】:所以现在有一个重大更新,从TensorFlow1.X迁移到2.X。在TF1.X中,我习惯了一个管道,它帮助我... 查看详情

如何再次微调一个bert微调模型

【中文标题】如何再次微调一个bert微调模型【英文标题】:Howtofinetuningagainofabertfinedtunedmodel【发布时间】:2021-07-2220:45:13【问题描述】:我使用ktrain为文本分类做了一个微调的bert模型。我想再次在另一个文本分类数据上微调这... 查看详情

tensorrt模型加速|网络结构优化|低精度推理

...张量融合”实现,低精度推理通过使用FP16或INT8进行模型推理实现。一、低精度推理背景:神经网络在训练时采用高精度保存参数,一般采用 32 位浮点数(Floating-Point, FP32),因此模型最后的 weights 也... 查看详情

tensorrt模型加速|网络结构优化|低精度推理

...张量融合”实现,低精度推理通过使用FP16或INT8进行模型推理实现。一、低精度推理背景:神经网络在训练时采用高精度保存参数,一般采用 32 位浮点数(Floating-Point, FP32),因此模型最后的 weights 也... 查看详情