Ubuntu18.04安装cuda 11.3和TensorRT 8教程(碰到的坑及填坑方法,以及python和c++的TensorRT环境搭建)

Posted 黑盒黑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Ubuntu18.04安装cuda 11.3和TensorRT 8教程(碰到的坑及填坑方法,以及python和c++的TensorRT环境搭建)相关的知识,希望对你有一定的参考价值。

1.卸载原环境

原环境:显卡驱动 -- 470.57.02
				  cuda -- 10.0
				  cudnn -- 7.6
				  TensorRT 7.0.0.11

卸载cuda10.0以及相应的cudnn:

cd /usr/local/cuda/bin
sudo ./uninstall_cuda_10.0.pl
cd ..
sudo rm -rf cuda-10.0

2.安装cuda 11.3及相应的cudnn

cuda安装

cuda各版本可在https://developer.nvidia.com/cuda-toolkit-archive下载

下载cuda 11.3的选择如下:

sudo wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/cuda-ubuntu1804.pin
sudo mv cuda-ubuntu1804.pin /etc/apt/preferences.d/cuda-repository-pin-600
sudo wget https://developer.download.nvidia.com/compute/cuda/11.3.0/local_installers/cuda-repo-ubuntu1804-11-3-local_11.3.0-465.19.01-1_amd64.deb
sudo dpkg -i cuda-repo-ubuntu1804-11-3-local_11.3.0-465.19.01-1_amd64.deb
sudo apt-key add /var/cuda-repo-ubuntu1804-11-3-local/7fa2af80.pub
sudo apt-get update
sudo apt-get -y install cuda

这里遇到了坑,运行最后一句时报错,错误信息是:

cuda : 依赖: cuda-11-3 (>= 11.3.0) 但是它将不会被安装

解决方案:

1. 安装aptitude-> sudo apt-get install aptitude

2.将apt-get换成aptitude -> sudo aptitude install cuda

3.显示有许多冲突,其中包括需要将470驱动更换为465驱动的提示。选择y进行安装(这里我选择y并没有安装,
且没有任何反应。反而是先选择了n,后选择了y才安装成功,可作参考)

4. 重启 -> nvidia-smi

5. nvcc --version 显示版本号,成功

最后 nvidia-smi 结果如下:


nvcc --version 结果如下:


配置环境变量

sudo gedit ~/.bashrc

在文件最后添加
export PATH=/usr/local/cuda-11.3/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda

保存,并输入
source ~/.bashrc
生效

测试是否生效

cd /usr/local/cuda-11.3/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery

若结果为如下,则表示配置成功

cudnn安装

下载地址为:https://developer.nvidia.com/rdp/cudnn-archive

这里我选择的是

下载好压缩包后,将压缩包解压,并cd到解压的文件路径/到该路径下打开终端

1.分别输入
sudo cp cuda/include/cudnn.h /usr/local/cuda-11.3/include/ 
sudo cp cuda/include/cudnn_version.h /usr/local/cuda-11.3/include/
sudo cp cuda/lib64/libcudnn* /usr/local/cuda-11.3/lib64/ 
sudo chmod a+r /usr/local/cuda-11.3/include/cudnn.h 

2.输入下列代码查看版本
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

若结果如下,则表示安装成功

3.安装TensorRT 8.0

在网址https://developer.nvidia.com/nvidia-tensorrt-8x-download下载

对应的版本为下图中第三个


官网指南:NVIDIA Deep Learning TensorRT Documentation

下载的包是:nv-tensorrt-repo-ubuntu1804-cuda11.3-trt8.0.1.6-ga-20210626_1-1_amd64.deb

切换到下载包的目录,并执行:

sudo dpkg -i nv-tensorrt-repo-ubuntu1804-cuda11.3-trt8.0.1.6-ga-20210626_1-1_amd64.deb
sudo apt-key add /var/nv-tensorrt-repo-ubuntu1804-cuda11.3-trt8.0.1.6-ga-20210626/7fa2af80.pub

sudo apt-get update
sudo apt-get install tensorrt

如你使用3.X版本的python,则运行

sudo apt-get install python3-libnvinfer-dev

验证安装

dpkg -l | grep TensorRT

我的结果如下:

4.python及c++运行TensorRT

python

事实上,我在完成上述安装后并不能成功import tensorrt成功,不知是否与我用anaconda环境有关。所以我决定曲线救国,下载tar版本的TensorRT,利用tar文件解压后的whl进行python的环境搭建。具体步骤如下:
(1)进入官网下载tar格式文件,即下图第一个。

(2)解压后,进入解压的TensorRT-8.0.1.6文件夹,进入python文件夹,打开终端运行

pip install tensorrt-8.0.1.6-cp36-none-linux_x86_64.whl  // 记得对应自己的python版本号
cd ../uff
pip install uff-0.6.9-py2.py3-none-any.whl
cd ../graphsurgeon
pip install graphsurgeon-0.4.5-py2.py3-none-any.whl
cd ../onnx_graphsurgeon
pip install onnx_graphsurgeon-0.3.10-py2.py3-none-any.whl
// 运行python
python
// 输入
import tensorrt
tensorr.__version__
// 输出8.0.1.6即安装成功

(3)创建engine的代码略有改变(也可能是我原来的代码不够规范,仅作参考)

原代码
with trt.Builder(TRT_LOGGER) as builder, builder.create_network(EXPLICIT_BATCH) as network, trt.OnnxParser(
            network, TRT_LOGGER) as parser:
        builder.max_batch_size = 10
        builder.max_workspace_size = 1 << 5

        with open(engine_path, 'rb') as model:
            if not parser.parse(model.read()):
                raise TypeError("Parser parse failed.")

        engine = builder.build_cuda_engine(network)
现代码
with trt.Builder(TRT_LOGGER) as builder, builder.create_network(EXPLICIT_BATCH) as network, \\
            builder.create_builder_config() as config, trt.OnnxParser(network, TRT_LOGGER) as parser, \\
            trt.Runtime(TRT_LOGGER) as runtime:
        config.max_workspace_size = 1 << 28

        with open(engine_path, 'rb') as model:
            if not parser.parse(model.read()):
                raise TypeError("Parser parse failed.")

        plan = builder.build_serialized_network(network, config)
        engine = runtime.deserialize_cuda_engine(plan)

C++

我用的C++ide是codeblocks,吐槽一句ubuntu18.04的codeblocks就是屑,动不动闪退

(1)设置

把鼠标放至你的文档树的根目录,也就是你的工程那儿,右键->build options...->出现如下界面,输入图示的
相关信息。!!!注意改成自己的路径。




(2)构建engine的代码没什么改变。需注意的是,若用TensorRT 7保存的序列化结果文件,是无法用TensorRT 8直接反序列化加载运行的,需要重新用TensorRT 8来序列化并保存engine。其次,gLogger的构建代码略有改变,具体如下:

class Logger:public ILogger
{
    void log(Severity severity, const char* msg) noexcept // 即将原本的override改为noexcept就可以了,
    																										      // 具体为啥我也不知- -
    {
        // suppress info-level messages
        if(severity != Severity::kINFO)
            cout << msg << endl;
    }
}gLogger;

以上,若有问题,欢迎评论留言。

以上是关于Ubuntu18.04安装cuda 11.3和TensorRT 8教程(碰到的坑及填坑方法,以及python和c++的TensorRT环境搭建)的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu 18.04 安装 CUDA-10.2

Ubuntu18.04安装CUDA

UBUNTU18.04安装CUDA

ubuntu18.04 安装 cuda8 并多版本共存

物理机安装 Ubuntu18.04 + CUDA + Anaconda (简明图文教程)

物理机安装 Ubuntu18.04 + CUDA + Anaconda (简明图文教程)