Multipathpp模型部署

目前主要的问题是在模型中穿在一个叫做scatter_max的pytorch封装好的函数,而这个函数在onnx和tensorrt中没有具体的实现,所以部署受阻
为了实现部署,有三种方法可以尝试
方法一:添加tensorrt算子
思路:

  1. 目前从pytorch转换成onnx已经没有问题
  2. 但是从onnx转换到tensorrt的时候由于scatter_max这个算子tensorrt无法识别导致转换不成功
  3. 所以需要在tensorrt中添加自定义的tensorrt算子
    特点:
  4. 周围没有人同学做过tensorrt算子,所以没有经验请教,具体实现方法可参考https://zhuanlan.zhihu.com/p/297002406
  5. 在阅读过程中的时候的困惑:貌似需要重新编译tensorrt的库来实现算子的注册,如果理解正确,那就需要在bcloud中连接新的tensorrt库
  6. 可以请教主线同学,别的模型转换的时候肯定也遇到过,但是在planning代码库里面没有看到有自定义算子的相关痕迹,问问他们是怎么解决的

方法二:将scatter_max用python自己实现
思路:

  1. 由于scatter_max是pytorch封装的一个函数,在tensorrt没有对应的算子,导致转换失败
  2. 如果我们将scatter_max用python自己实现了,那么在转换的时候,onnx和tensorrt就知道要如何来进行转换,无非是一些加减乘除
  3. 这样子就不涉及到算子的自定义,从pytorch到onnx到tensorrt的转换,应该不会遇到什么问题
    特点:
  4. 这样就涉及到改动模型,但是好在scatter_max这个函数不涉及到任何训练参数的赋值,模型也许不需要重新训练,但这一部分存疑
  5. 据汪涛的调研,网上有大神也是用这个方法实现了他那个模型的部署,但在验证推理一致性的时候遇到了很多坑,涉及到一些运算的底层逻辑的理解,这部分如果没有大神指导的话,自己定位问题较为困难。

方法三:将模型转换为多个onnx,在C++中实现scatter_max
思路:

  1. 同样不去定义tensorrt算子,但是将scatter_max这个函数从模型中拆分出来,即由一个完整的模型变为,小模型1 --> scatter_max -->小模型2 --> scatter_max --> 小模型3
  2. 这个方法不需要重新训练模型,但是在转onnx的时候比较麻烦,需要将.pth文件中的参数一一赋给模型中对应的变量,然后将模型进行拆分,生成小模型并生成相应的.onnx
  3. 在C++部署的时候,将各个onnx模型分别加载,并在模型推理的时候按照小模型1 --> scatter_max -->小模型2 --> scatter_max --> 小模型3的方法进行推理
    特点:
  4. 汪涛是使用这个方法进行模型部署的,有相关同学可以请教经验
  5. 由于我们的模型和汪涛的模型的差异,我们的scatter_max从模型中拆分出来不像他那么清晰,所以遇到的问题肯定比他多

总结:三种方法需要大家一起讨论来确定选择哪一种方法,但是不管哪一种都需要自己实现scatter_max算法,所以可以现在python中将scatter_max这个算法实现并验证了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值