【tensorrt】——python tensorrt的使用解析

关键词: python c 混合编程

简介
首先应该明确,tensorrt是c写的,而且是没有开源的。同时其提供的sample中有c++的和python的。这里我们解析一下tensorrt python的使用解析,为什么能调c的部分。

1. c使用的动态库

下载tensorrt ,解压之后在lib文件夹下有所有c/c++使用的动态库。可以将路径加入到环境变量:$LD_LIBRARY_PATH。Linux系统就可以发现这些动态库了。
【tensorrt】——python tensorrt的使用解析_第1张图片
在c/c++使用的时候,只需要相关的头文件和这些动态库就ok了,然后按照官方的例子就可以

2. python使用

2.1 安装python tensorrt
参考我前面的文章

2.2 解析
import tensorrt as trt时,做了如下:

import ctypes
import glob
import os


def try_load(library):
    try:
        ctypes.CDLL(library)
    except OSError:
        pass


# Try loading all packaged libraries
CURDIR = os.path.realpath(os.path.dirname(__file__))
for lib in glob.iglob(os.path.join(CURDIR, "*.so*")):
    try_load(lib)


from .tensorrt import *
__version__ = "7.2.2.3"

import sys
if sys.version_info.major == 2:
    print("WARNING: TensorRT Python 2 support is deprecated, and will be dropped in a future version!")

主要是:CURDIR = os.path.realpath(os.path.dirname(__file__)),也就是采用ctypes载入tensorrt.so
【tensorrt】——python tensorrt的使用解析_第2张图片
然后我们可以看一下tensorrt.so的链接,采用ldd tensorrt.so
【tensorrt】——python tensorrt的使用解析_第3张图片
可以看到其链接到了libnvinfer.so.7,libnvonnxparser.so.7 。。。等tensorrt的库

那这里tensorrt.so又是什么东西呢?有什么作用呢?这里我们用nm来查看动态库中函数,来大概理解。
nm -D tensorrt.so
有太多东西了。
【tensorrt】——python tensorrt的使用解析_第4张图片
我们可以用nm -D tensorrt.so | awk '{if($2=="T"){print $3}}'打印出函数的部分

_fini
_init
PyInit_tensorrt

可以看到这就是c中创建一个python module初始化的函数。所以tensorrt.so其实就是 tensorrt 使用 python和c实现之间的接口函数。

3. tensorrt插件

tensorrt插件的编写之后,编译好新的libnvonnxparser.so.7解析库之后,替换原来的就ok。
后面具体举例

你可能感兴趣的:(嵌入式AI,tensorrt,c++,python)