一、概述
TensorRT输入网络和参数,然后生成一个优化后的运行时引擎,用于对该网络执行推理。
TensorRT有C++和python的接口。
TensorRT应用了graph optimizations图优化、layer fusion层融合以及other optimizations其他优化,同时还利用各种hily optimized kernels高度优化的内核来寻找该模型的最快实现。
TensorRT支持混合精度。
二、入门指南
安装TensorRT之前需要安装以下内容:
不使用python,可以不安装,包括tensorrt里面的whl文件。如要要在python中使用tensorrt,还需要安装pycuda- 安装CUDA
如果需要导出模型的话还需要TensorFlow或者是pytorch。如果想要TensorFlow中导出uff,则需要安装TensorRT包中的uff对应的whl。- tensorrt支持onnx。
- tensorrt和cudnn版本最好能对应。
三、下载tensorRT
四、安装
需要安装CUDA和CUDNN
4.1、Debian安装
1、下载与ubuntu和CPU对应的tensorrt版本
2、修改以下命令以执
os="ubuntuxx04"
tag="cudax.x-trt8.x.x.x-yyyymmdd"
sudo dpkg -i nv-tensorrt-repo-${os}-${tag}_1-1_amd64.deb
sudo apt-key add /var/nv-tensorrt-repo-${os}-${tag}/7fa2af80.pub
sudo apt-get update
sudo apt-get install tensorrt
如果使用python中使用的话
python3 -m pip install numpy
sudo apt-get install python3-libnvinfer-dev
python3-libnvinfer
- 如果tensorflow中使用的话
python3 -m pip install protobuf
sudo apt-get install uff-converter-tf
python中查看例子
python3 -m pip install numpy onnx
sudo apt-get install onnx-graphsurgeon
3、查看安装的tensorrt版本信息
dpkg -l | grep TensorRT
输出:
4.4.1、在Debian使用rpm (network)的方式安装
1、安装CUDA
2、安装tensorrt
仅运行tensorrt c++应用
sudo yum install libnvinfer8 libnvparsers8 libnvonnxparsers8 libnvinfer-plugin8
还需要构建tensorrt c++ 应用
sudo yum install libnvinfer-devel libnvparsers-devel libnvonnxparsers-devel
libnvinfer-plugin-devel
在python中运行tensorrt
sudo yum install python3-libnvinfer
3、安装libnvinfer8
version="8.x.x-1.cudax.x"
sudo yum downgrade libnvinfer8-${version} libnvparsers8-${version} libnvonnxparsers8-${version} libnvinfer-plugin8-${version} libnvinfer-devel-${version} libnvparsers-devel-${version} libnvonnxparsers-devel-${version} libnvinfer-plugin-devel-${version} python3-libnvinfer-${version}
sudo yum install yum-plugin-versionlock
sudo yum versionlock libnvinfer8 libnvparsers8 libnvonnxparsers8 libnvinfer-plugin8
libnvinfer-devel libnvparsers-devel libnvonnxparsers-devel libnvinfer-plugin-devel
python3-libnvinfer
假如想要升级tensorrt或者CUDA,就需要先对libnvinfer8解除绑定。
sudo yum versionlock delete libnvinfer8 libnvparsers8 libnvonnxparsers8 libnvinferplugin8 libnvinfer-devel libnvparsers-devel libnvonnxparsers-devel libnvinfer-plugindevel python3-libnvinfer
4.5 pip 安装
pip-installable nvidia-tensorrt
nvidia-tensorrt支持python3.6~3.9 和CUDA 11.x。Linux系统和x86_64 CPUx架构,wheel文件支持centos 7、ubuntu 18.04。
在安装之前先安装NVIDIA -pyindex,也许还需要更新一下python里面的安装包
python3 -m pip install --upgrade setuptools pip
python3 -m pip install nvidia-pyindex
如果使用requirements.txt,需要在requirements.txt中添加。
--extra-index-url https://pypi.ngc.nvidia.com
步骤
1、安装tensorrt
python3 -m pip install --upgrade nvidia-tensorrt
2、验tensorrt是否安装成功
python3
>>> import tensorrt
>>> print(tensorrt.__version__)
>>> assert tensorrt.Builder(tensorrt.Logger())
4.6. tar文件压缩
- 安装cuda、CUDNN、python
- 下载tensorrt的tar
- 解压
version="8.x.x.x"
arch=$(uname -m)
cuda="cuda-x.x"
cudnn="cudnn8.x"
tar xzvf TensorRT-${version}.Linux.${arch}-gnu.${cuda}.${cudnn}.tar.gz
- 查看解压包的文件
ls TensorRT-${version}
bin data doc graphsurgeon include lib onnx_graphsurgeon python samples targets
TensorRT-Release-Notes.pdf uff
- 将tensorrt的lib文件夹的绝对路径加入到环境变量LD_LIBRARY_PATH:
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:<TensorRT-${version}/lib>
- 安装tensorrt解压包中的wheel文件
cd TensorRT-${version}/python
python3 -m pip install tensorrt-*-cp3x-none-linux_x86_64.whl
- 假如需要在TensorFlow中使用tensorrt
cd TensorRT-${version}/uff
python3 -m pip install uff-0.6.9-py2.py3-none-any.whl
- 检查安装的uff
which convert-to-uff
- 安装graphsurgeon的wheel文件。
cd TensorRT-${version}/graphsurgeon
python3 -m pip install graphsurgeon-0.4.5-py2.py3-none-any.whl
- 验证安装成功
- 确保文件安装在正确的位置。使用tree -d命令,查看lib、include、data、etc...文件夹
- 构建和运行简单的例子。比如sampleMNIST。
- python的例子在samples/python
4.7 zip文件安装
开始安装之前:cuda、cuDNN
步骤:
- 下载tensorRT 的zip
- 解压tensorrt-8.x.x.x.windows10.x86_64.cuda-x.x.cudnn8.x.zip
- 加入到环境变量path
- tensorRT安装有两种方式:
a)、加入到解压的<installpath>/lib到系统环境变量
假如CUDNN没有拷贝到CUDA中,那么也需要将CUDNN的bin路径加入环境变量。
b)、将TensorRT中<installpath>/lib拷贝到CUDA的安装目录。例如C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\vX.Y\bin。。但是CUDA路径要设置成环境变量。
- 安装tensorrt的<installpath>/lib路径中的wheel:
python.exe -m pip install tensorrt-*-cp3x-none-win_amd64.whl
- 为了验证安装的有效性,直接在VS中运行sampleMNIST,并确保能用build和run。
- 加入需要在其他项目中运行tensorrt,请设置以下项:
- 确保dll,<installpath>/lib已经加入到path中,确保VC++ Directories->Excutable Directores。
- <installpath>/include设置在C/C++->General-->AdditionalDirectories。
- 将nvinfer.lib和其他的LIB文件设置到Linker->Input->Additional Dependencies。
- 如果要使用TensorFlow或PyTorch,安装uff、graphsurgeon和onnx_graphsurgen的wheel
python3 -m pip install <installpath>\graphsurgeon\graphsurgeon-0.4.5-py2.py3-none-any.whl
python3 -m pip install <installpath>\uff\uff-0.6.9-py2.py3-none-any.whl
python3 -m pip install <installpath>\onnx_graphsurgeon\onnx_graphsurgeon-0.3.12-py2.py3-
none-any.whl
4.8 附加安装方法
TensorRT container、NVIDIA JetPack™、NVIDIA DRIVE®
五、TensortRT升级
5.1在ubuntu和windows上
5.1.1 从TensorRT 8.0.x升级到 TensorRT 8.4.x
使用一个Debian文件
- Debian包可以直接升级,并且其他的依赖文件都会直接升级
os="ubuntuxx04"
tag="cudax.x-trt8.x.x.x-yyyymmdd"
sudo dpkg -i nv-tensorrt-repo-${os}-${tag}_1-1_amd64.deb
sudo apt-get update
sudo apt-get install tensorrt libcudnn8
sudo apt-get install python3-libnvinfer-dev
- uff-converter 和 graphsurgeon也要升级
sudo apt-get install uff-converter-tf graphsurgeon-tf onnx-graphsurgeon
- 升级后记得检查一下/usr/src/tensorrt和对应的版本是不是对应 dpkg -l tensorrt
- 假如Debian安装方式是使用tar文件的话,更新的时候就不会将之前版本的信息删除掉。除非按照之前安装的方式删除,最好能把之前版本的删除掉以避免,出现冲突
- 假如cuda是network安装的,那么更新的时候libcudnn8应该从tensorrt的资源包中更新到cuda版本当中
version="8.4.x.x-1+cudax.x" sudo apt-get install libcudnn8=${version} libcudnn8-dev=${version} sudo apt-mark hold libcudnn8 libcudnn8-dev
使用tar文件
- 直接一步步的安装,可以有多个版本。
- 要替换之前Debian安装包方式安装的文件,那么tar方式安装不会删除以前安装的,可以自己移除掉libnvinfer8,libnvinfer-dev,libnvinfer-samples
使用zip文件
- 直接一步步的安装,可以有多个版本
- 设置环境变量,或者把文件直接拷贝到之前的cuda目录
5.2 ReadHat和CentOS
六、卸载tensorRT
关于这个任务
- 如果是tar或者是zip形式安装的,可以直接删除对应文件,如果有额外增加环境变量,那把相对的环境变量也删除掉。
- 如果是Debian或者RPM安装方式,跟寻一下步骤删除。
步骤
- 卸载libnvinfer8
sudo apt-get purge "libnvinfer*"
sudo apt-get purge "nv-tensorrt-repo*"
sudo yum erase "libnvinfer*"
sudo yum erase "nv-tensorrt-repo*"
- 卸载uff-converter-tf, graphsurgeon-tf, and onnx-graphsurgeon
sudo apt-get purge graphsurgeon-tf onnx-graphsurgeon
sudo yum erase graphsurgeon-tf onnx-graphsurgeon
上面的命令会将uff-converter-tf一起删除掉,如果希望仅删除uff-converter-tf,则
sudo apt-get purge uff-converter-tf
sudo yum erase uff-converter-tf
如果想只删除graphsurgeon-tf
sudo apt-get autoremove
sudo yum autoremove
- 卸载python Tensorrt
sudo pip3 uninstall tensorrt
- 卸载python uff
sudo pip3 uninstall uff
- 卸载python GraphSurgeon
sudo pip3 uninstall graphsurgeon
- 卸载python ONNX GraphSurgeon
sudo pip3 uninstall onnx-graphsurgeon
七、安装PyCUDA
要记得首先升级CUDA,然后在安装PyCUDA。NumPy已经安装了。
PyCUDA不是必须安装的,它通过python调用CUDA接口,并且某些例子中可能用到。
PyCUDA的特性包括
- 将CUDA映射到python
- 启用运行时代码生成run-time code generation (RTCG),以生成灵活、快速、自动调优的代码。
- 增加了健壮性:自动管理对象生存期,自动错误检查
- 添加的便利:带有现成的on-GPU线性代数,简化,搜索。
- 用于FFT和LAPACK的附加组件包。
- 快。接近于零的包装开销。
安装pycuda之前首先确保nvcc在环境变量中
python -m pip install 'pycuda<2021.1'
7.1 更新CUDA
需要在CUDA安装或者更新之后再安装pycuda。
- 卸载PyCUDA
- 更新CUDA
- 安装pycuda
pip install 'pycuda<2021.1'