热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Tensorrt自定义算子实现步骤

Tensorrt自定义算子实现步骤目的这篇文章主要是用于记录tensorrt自定义算子的过程.这里采用的是torch2trt直接转换的方式.实验思路:造一个pytorch中

Tensorrt自定义算子实现步骤


目的

这篇文章主要是用于记录tensorrt自定义算子的过程.这里采用的是torch2trt直接转换的方式.


实验思路:

造一个pytorch中支持的操作,但是tensorrt中不支持的,也是说用torch2trt不能直接转换过去的算子,然后通过自定义一个插件实现跟torch中一样的功能,然后再用torch2trt接口就能转换成功了.


下面是具体步骤

在模型中造一个自定义的算子:

这里torch中的自定义算子为do_custom_op_shift,其功能是将输入参数增加一个偏移
在这里插入图片描述


定义一个模型,使用这个算子:

在这里插入图片描述


用minist数据集训练这个模型得到一个pytorch模型

在这里插入图片描述


用torch2trt接口转换模型,出现错误.

在这里插入图片描述
在这里插入图片描述
出现上面这种原因是因为在do_custom_op_shift这个函数中使用了tensorrt不支持的op,我们再看一下这个操作:
在这里插入图片描述
这个函数do_custom_op_shit在torch的模型中能够正常运行,但是不能转换成tensorrt的模型,现在需要做的就是给tensorrt增加一个自定义的算子,让他实现do_custom_op_shift的功能.


使用自定义算子解决问题


赖工程工程

https://github.com/grimoire/torch2trt_dynamic
https://github.com/grimoire/amirstan_plugin


修改torch2trt_dynamic工程,这里是用python接口层面上增加一个自定义算子

再converters文件夹中增加一个converter命名为custom_op_shift.py,并在converters/init.py中增加一行

from .custom_op_shift import *

custom_op_shift.py的代码如下,这个文件的作用就是写一个接口,让他替换do_custom_op_shift的操作,这里的操作需要能够被tensorrt支持:
在这里插入图片描述
在plugins文件夹下增加一个plugin命名为create_shifop_plugin.py,并再plugins/init.py中增加一行代码

from .create_shiftop_plugin import create_shiftop_plugin

create_shifop_plugin.py的代码如下所示:
在这里插入图片描述


修改amirstan_plugin工程,这里是用ShiftPluginDynamic算子的具体实现

在include文件夹下增加一个文件,shiftPlugin.h
在这里插入图片描述
在src文件加下增加一个文件夹,命名为shiftPlugin,这里创建跟shiftPlugin有关的操作.
在这里插入图片描述
修改src/plugin/CMakeList.txt文件,增加shiftPlugin
在这里插入图片描述
修改src/plugin/InferPlugin.cpp,增加一行
在这里插入图片描述
重新编译这个工程.
重新安装torch2trt,再使用torch2trt接口转换上面的那个模型,就能成功了.


推荐阅读
  • 如何优化Webpack打包后的代码分割
    本文介绍了如何通过优化Webpack的代码分割来减小打包后的文件大小。主要包括拆分业务逻辑代码和引入第三方包的代码、配置Webpack插件、异步代码的处理、代码分割重命名、配置vendors和cacheGroups等方面的内容。通过合理配置和优化,可以有效减小打包后的文件大小,提高应用的加载速度。 ... [详细]
  • 本文介绍了计算机网络的定义和通信流程,包括客户端编译文件、二进制转换、三层路由设备等。同时,还介绍了计算机网络中常用的关键词,如MAC地址和IP地址。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 向QTextEdit拖放文件的方法及实现步骤
    本文介绍了在使用QTextEdit时如何实现拖放文件的功能,包括相关的方法和实现步骤。通过重写dragEnterEvent和dropEvent函数,并结合QMimeData和QUrl等类,可以轻松实现向QTextEdit拖放文件的功能。详细的代码实现和说明可以参考本文提供的示例代码。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 无损压缩算法专题——LZSS算法实现
    本文介绍了基于无损压缩算法专题的LZSS算法实现。通过Python和C两种语言的代码实现了对任意文件的压缩和解压功能。详细介绍了LZSS算法的原理和实现过程,以及代码中的注释。 ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • Android源码深入理解JNI技术的概述和应用
    本文介绍了Android源码中的JNI技术,包括概述和应用。JNI是Java Native Interface的缩写,是一种技术,可以实现Java程序调用Native语言写的函数,以及Native程序调用Java层的函数。在Android平台上,JNI充当了连接Java世界和Native世界的桥梁。本文通过分析Android源码中的相关文件和位置,深入探讨了JNI技术在Android开发中的重要性和应用场景。 ... [详细]
  • r2dbc配置多数据源
    R2dbc配置多数据源问题根据官网配置r2dbc连接mysql多数据源所遇到的问题pom配置可以参考官网,不过我这样配置会报错我并没有这样配置将以下内容添加到pom.xml文件d ... [详细]
  • 文章目录前言pandas主要分为如下几个阶段:表格数据操作:增删改查实现多个表格的处理数据清洗操作:缺失值、重复值、异常值、数据标准化、数 ... [详细]
  • iOS 集成Facebook 第三方分享报错[FBSDKInternalUtility validateAppID]: failed for URL: fbauth2:/error:...
    2019独角兽企业重金招聘Python工程师标准出现这种原因主要是因为info.plist文件里面没有添加一些配置文件转载于:https:my.oschina.net1715 ... [详细]
  • 本文由编程笔记#小编为大家整理,主要介绍了StartingzookeeperFAILEDTOSTART相关的知识,希望对你有一定的参考价值。下载路径:https://ar ... [详细]
  • 一:跨域问题1、同源策略(浏览器的安全策略)    只允许当前页面朝当前域下发请求,如果向其他域发请求,请求可以正常发送,数据也可以拿回,但是被浏览器拦截了  2、c ... [详细]
  • ***Createdbyjiachenpanon161118.**合法uri*exportfunctionvalidateURL(textval){consturlregex^( ... [详细]
author-avatar
手机用户2502855967
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有