极智ai|tensorrtparser构建模型推理方法(代码片段)

极智视界 极智视界     2022-11-29     388

关键词:

欢迎关注我的公众号 [极智视界],获取我的更多笔记分享

  大家好,我是极智视界,本文介绍一下 TensorRT Parser 构建模型推理方法。

  TensorRT 构建模型推理一般有三种方式:(1) 使用框架自带的 TensorRT 接口,如 TF-TRT、Torch-TRT;(2) 使用 Parser 前端解释器,如 TF / Torch / … -> ONNX -> TensorRT;(3) 使用 TensorRT 原生 API 搭建网络。当然难度和易用性肯定是由低到高的,伴随而来的性能和兼容性也是由低到高的。这里我们介绍第二种方式,使用 Parser 前端解释器来构建 TensorRT 模型推理,会分别用现在最主流的 pytorch 和 tensorflow 来进行示例介绍。

文章目录

1 TensorRT Parser - pytorch

  基本流程:

  (1) pytorch 中创建网络并保存为 .pt 模型;

  (2) 使用 pytorch 内部 API 将 .pt 模型转换为 .onnx 模型;

  (3) TensorRT 中读取 .onnx 模型构建 Engine 并做推理;

  上代码:

# pytorch 中创建网络并保存为 .pt 模型文件
# ...
t.save(net, ptFile)
print("successed building model in pytorch")

# 将 .pt 模型文件转换为 .onnx 模型文件
t.onnx.export(
	net,
    t.randn(1, 1, h, w, device="cuda"),
    "./model.onnx",
    examples_outputs = [t.randn(1, 10, device="cuda"), t.randn(1, device="cuda")],
    input_names=['x'];
    output_names=['y', 'z'],
    do_constant_folding=True,
    verbose=True,
    keep_initializers_as_inputs=True,
    opset_version=12,
    dynamic_axes="x": 0: "nBatchSize", "z": 0: "nBatchSize"
)
print("successed converting model into onnx")

# tensorrt 中加载 .onnx 创建 engine
logger = trt.Logger(trt.Logger.ERROR)

# ...

# 用 Parser 加载 .onnx
with open(onnxFile, 'rb') as model:
  if not parser.parse(model.read()):
    print("filed parsing onnx file")
    for error in range(parser.num_errors):
      print(parser.get_error(error))
    exit()
  print("successed paring onnx file")
  
# ..

# 准备 tensorrt runtime 和 buffer,进行推理
context = engine.create_execution_context()

# ...

print("successed running model in tensorrt")

  以上展示了 pytorch -> onnx -> parser -> tensorrt infer 的流程。


2 TensorRT Parser - tensorflow

  基本流程:

  (1) tensorflow中创建网络并保存为 .pt 模型;

  (2) 使用 tf2onnx 将 .pb 模型转换为 .onnx 模型;

  (3) TensorRT 中读取 .onnx 模型构建 Engine 并做推理;

  上代码:

# tensorflow 中创建网络并保存为 .pb 模型
x = tf.compat.v1.placeholder(tf.float32, [None, 28, 28, 1], name='x')

# ...

# 保存为 .pb 模型
constantGraph = tf.graph_util.convert_variables_to_constants(sess, sess.graph_def, ['z'])

with tf.gfile.FastGFile("./model.pb", mode='wb') as f:
  f.write(constantGraph.SerializeToString())
sess.close()
print("successed building model in tensorflow")

# 将 .pb 模型转换为 .onnx 模型
os.system("python -m tf2onnx.convert --input %s --output %s --inputs 'x:0' --outputs 'z:0'" % (pbFile, onnxFile))
print("successed converting model into onnx")

# tensorrt 中加载 .onnx 创建 engine
logger = trt.Logger(trt.Logger.ERROR)

# ...

# 用 Parser 加载 .onnx
with open(onnxFile, 'rb') as model:
  if not parser.parse(model.read()):
    print("filed parsing onnx file")
    for error in range(parser.num_errors):
      print(parser.get_error(error))
    exit()
  print("successed paring onnx file")
  
# ..

# 准备 tensorrt runtime 和 buffer,进行推理
context = engine.create_execution_context()

# ...

print("successed running model in tensorrt")

  以上展示了 tensorflow -> onnx -> parser -> tensorrt infer 的流程,可以看到从 parser 解析 onnx 后面这段和 pytorch 那段是一致的。


  好了,以上分享了 TensorRT Parser 构建模型推理的方法,希望我的分享能对你的学习有一点帮助。


 【公众号传送】

《极智AI | TensorRT Parser 构建模型推理方法》


扫描下方二维码即可关注我的微信公众号【极智视界】,获取我的更多经验分享,让我们用极致+极客的心态来迎接AI !

极智ai|libtorch调用模型推理方法(代码片段)

 欢迎关注我的公众号[极智视界],获取我的更多笔记分享 大家好,我是极智视界,本文介绍一下libtorch调用模型推理方法。 之前写了一篇《ubuntu安装libtorch》,所以关于ubuntu上安装libtorch的方法,有兴趣的... 查看详情

极智ai|libtorch调用模型推理方法(代码片段)

 欢迎关注我的公众号[极智视界],获取我的更多笔记分享 大家好,我是极智视界,本文介绍一下libtorch调用模型推理方法。 之前写了一篇《ubuntu安装libtorch》,所以关于ubuntu上安装libtorch的方法,有兴趣的... 查看详情

极智ai|初识tensorrtplugin(代码片段)

 欢迎关注我的公众号[极智视界],获取我的更多笔记分享 大家好,我是极智视界,本文介绍一下初识TensorRTPlugin。 TensorRT构建模型推理一般有三种方式:(1)使用框架自带的TensorRT接口,如TF-TRT、Torch-TRT࿱... 查看详情

极智ai|教你使用深度学习模型调试器polygraphy(代码片段)

 欢迎关注我的公众号[极智视界],获取我的更多笔记分享 大家好,我是极智视界,本文讲解一下深度学习模型调试器polygraphy的使用方法。 对于深度学习模型的部署,往往涉及多种框架之间的转换,一般... 查看详情

极智ai|昇腾cannatc模型转换(代码片段)

 欢迎关注我的公众号[极智视界],获取我的更多笔记分享 大家好,我是极智视界,本文介绍一下昇腾CANNATC模型转换。 昇腾CANN的全称是ComputeArchitectureforNeuralNetworks,是昇腾针对AI场景推出的异构计算架构,... 查看详情

极智ai|谈谈caffe框架(代码片段)

 欢迎关注我的公众号[极智视界],获取我的更多笔记分享 大家好,我是极智视界,本文介绍一下谈谈caffe框架。 大部分同学应该都知道,caffe是一个古老而又优秀的深度学习训练框架,用过caffe的大部分都... 查看详情

极智ai|caffeproto校验模型结构prototxt讲解(代码片段)

 欢迎关注我的公众号[极智视界],获取我的更多笔记分享 大家好,我是极智视界,本文讲解一下caffeproto怎么校验模型结构prototxt文件。 深度学习模型的格式特别多,基本不同框架都会有一套自己的模型结构&#... 查看详情

极智ai|onnx模型增删改查算子节点方法(代码片段)

...关注我,获取我的更多笔记分享 大家好,我是极智视界,本文介绍一下onnx模型增、删、改、查算子节点方法。 大家知道,onnx是AI业界用的很多的中间模型(应该没人直接把onnx作为原始模型用吧),一般的初... 查看详情

模型推理ncnn模型转换及量化流程(代码片段)

 欢迎关注我的公众号[极智视界],回复001获取Google编程规范 O_o >_< o_O O_o ~_~ o_O 本文介绍一下ncnn模型转换及量化流程,以from_darknetyolov4为例。 关于ncnn的ubuntu和windows安装方法可以参考我之前写的:《... 查看详情

极智ai|opencv你真的会用吗?(代码片段)

 欢迎关注我的公众号[极智视界],获取我的更多笔记分享 大家好,我是极智视界,本文介绍一下opencv你真的会用吗?。 OpenCV是一个实时优化的计算机视觉库,它还支持机器学习(ML)和人工智能(AI)的模型执行。... 查看详情

极智ai|昆仑芯k200全高全长推理卡

...迎关注我,获取我的更多笔记分享大家好,我是极智视界,本文介绍一下昆仑芯k200全高全长推理卡。先说标题,我特意写了"全高全长推理卡",这是因为看到网上有挺多文章拿昆仑k200来对标英伟达T4卡(... 查看详情

极智ai|昆仑芯k200全高全长推理卡

...迎关注我,获取我的更多笔记分享大家好,我是极智视界,本文介绍一下昆仑芯k200全高全长推理卡。先说标题,我特意写了"全高全长推理卡",这是因为看到网上有挺多文章拿昆仑k200来对标英伟达T4卡(... 查看详情

极智ai|谈谈昇腾cannaipp(代码片段)

 欢迎关注我的公众号[极智视界],获取我的更多笔记分享 大家好,我是极智视界,本文介绍一下谈谈昇腾CANNAIPP。 昇腾CANN的全称是ComputeArchitectureforNeuralNetworks,是昇腾针对AI场景推出的异构计算架构。前几天... 查看详情

极智ai|谈谈昇腾cann量化(代码片段)

欢迎关注我的公众号[极智视界],获取我的更多笔记分享大家好,我是极智视界,本文介绍一下谈谈昇腾CANN量化。昇腾CANN的量化体现在AMCT工具,也即模型压缩工具,后面再来说AMCT,这篇先聊一下昇腾CANN... 查看详情

python基于statsmodels包构建多元线性回归模型:模型构建模型解析模型推理预测

Python基于statsmodels包构建多元线性回归模型:模型构建、模型解析、模型推理预测目录 查看详情

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

 欢迎关注我的公众号[极智视界],获取我的更多笔记分享 O_o >_< o_O O_o ~_~ o_O 本文主要讨论一下为什么量化能加速模型推理。 前面已经写过几篇关于模型量化相关的文章:《【模型推理】谈谈几种量化策... 查看详情

模型推理谈谈模型量化组织方式(代码片段)

 欢迎关注我的公众号[极智视界],获取我的更多笔记分享 O_o >_< o_O O_o ~_~ o_O 本文主要聊一下深度学习模型量化组织方式。 在我的这篇《【模型推理】谈谈推理引擎的推理组织流程》文章里对模型量化策略... 查看详情

模型推理聊一聊昇腾canntbe算子开发方式(代码片段)

 欢迎关注我的公众号[极智视界],获取我的更多笔记分享 O_o >_< o_O O_o ~_~ o_O 本文主要聊一聊华为昇腾CANNTBE开发方式。 之前也写过几篇关于昇腾部署相关的文章,在做昇腾卡部署或有兴趣的同学可以查... 查看详情