当前位置: 首页 > news >正文

模型部署——自定TensorRT算子

CenterPoint基于OpenPcDet已经导出一个完整的ONNX,转onnx可以参考:模型部署——CenterPoint转ONNX(自定义onnx算子),下面我们基于导出的onnx模型,并用TensorRT进行推理,直接推理有些算子不支持,下面讲解下TensorRT自定义算子,由于torch.unique相比,其他的几个算子相对比较简单点,我会重点讲解下自定义Unique的TensorRT算子,torch.unique功能如下:

        # sorted:是否返回无重复张量按照数值进行排序,默认是升序排列,sorted并非表示降序
        # return_inverse:是否返回原始张量中每个元素在处理后的无重复张量中对应的索引
        # return_counts:统计原始张量中每个独立元素的个数
        # dim:值沿那个维度进行unique的处理
        unq_coords, unq_inv, unq_cnt = torch.unique(merge_coords, return_inverse=True, return_counts=True, dim=0)

注意:该算子没有通用性,只是实现上述python代码的功能,与torch.unique的三个输出相对应,考虑通用性,需要进一步实现各个参数选项对应的功能。

核心难点在于思路,有思路后顺利用cuda实现就行,所以先介绍Unique算子的实现思路如下:

  • 排序:先对网格坐标coords进行排序,cuda实现排序可以参考:CUDA动态并行实现快速排序,也可以直接调用CUDA Thrust库。记排序后的坐标为coord_sort
  • 去重复:对排序后的坐标coord_sort去除重复元素,可以自己写,也可以直接调用Thrust unique函数,得到去重后的坐标unq_coords
  • 哈希:unq_coords的索引下标和对应的值互换,用一个哈希数组进行存储,就可以根据去重后的网格坐标,获取每个元素在处理后的无重复张量中对应的索引,
  • 遍历:遍merge_coords,通过哈希数组可以得到原始张量中每个元素在处理后的无重复张量中对应的索引

接下来将要讲解的TensorRT,将会是基于最新的8.4版本。主要是讲解:

  • TensorRT自定义插件的使用方式
  • 如何添加自己的自定义算子

有兴趣的可以先看看TensorRT的官方文档,官方文档的介绍简单意骇

首先按照官方plugin的排布方式,下面随便挑了个官方plugin,在官方提供基础算子修改,会节省很多时间

相关文章:

  • 网站页面如何设计图/网站在线优化工具
  • 网站 工信部备案 收回/宁波如何做seo排名优化
  • 如何做汽车团购网站/网络营销是什么课程
  • 商贸公司寮步网站建设/外包网
  • 想自己做个网站怎么做/站长综合查询工具
  • 山东今日头条新闻/湘潭网站seo磐石网络
  • ReentrantLock与ReentrantReadWirteLock 原理
  • Highcharts高级响应能力支持
  • WPF程序打包
  • componentone/activex-ui-controls-老树发新芽
  • 【老生谈算法】matlab实现图像增强处理算法源码——图像增强处理算法
  • 3.8 PCIe控制器——运行机制——错误处理
  • Android Studio入门之按钮触控的解析及实战(附源码 超详细必看)(包括按钮控件、点击和长按事件、禁用与恢复按钮)
  • 关于利用卡诺图快速解决时序电路自启动问题的研究
  • 【解决方案】校园明厨亮灶监控系统实施方案
  • 网络编程及三大协议(TCP + UDP + Http)
  • 京东商品接口加解密算法解析
  • stm32毕业设计 单片机MP3音乐播放器