电脑基础 · 2023年3月23日

Ubuntu22.04 下安装驱动、CUDA、cudnn以及TensorRT

CUDA驱动和CUDA Toolkit对应版本

Ubuntu22.04 下安装驱动、CUDA、cudnn以及TensorRT

可查阅官方文档。驱动是向下兼容的,其决定了可安装的CUDA Toolkit的最高版本。

安装与CUDA Toolkit对应的pytorch: 

Previous PyTorch Versions | PyTorch An open source machine learning framework that accelerates the path from research prototyping to production deployment.Ubuntu22.04 下安装驱动、CUDA、cudnn以及TensorRThttps://pytorch.org/get-started/previous-versions/

Ubuntu22.04 下安装驱动、CUDA、cudnn以及TensorRT

 当然也可以用Anaconda建立独立的环境包,各自使用。

一、驱动安装

方法一、驱动在线安装方式

1. 检查你的操作系统:

输入命令: uname -a

2. 查看是否有GPU显卡:

输入命令: lspci | grep -i nvidia

即通过获取显卡型号来确定支持CUDA

3. 自动检测你的显卡型号和推荐安装的驱动型号:

输入命令: ubuntu-drivers devices

从上图可知,目前系统的显卡是 Nvidia GeForce GTX1650 Ti,建议安装驱动程序是 nvidia-driver-515。

4. 安装对应的驱动

输入命令:

sudo apt-get install nvidia-driver-515

然后等驱动安装完成,设置环境变量:

sudo gedit ~/.bashrc

打开后在文件最后加入以下两行内容:
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH
保存退出。

也可以选择自动选择合适的显卡驱动命令:

sudo ubuntu-drivers autoinstall

最后重启就O了。

5. 最后检查是否安装成功

输入命令:nvidia-smi

Ubuntu22.04 下安装驱动、CUDA、cudnn以及TensorRT

方法二、驱动离线安装方式

1. nvidia官网https://www.nvidia.com/Download/index.aspx?lang=en-us下载显卡对应的驱动NVIDIA-Linux-x86_64-xxx.xx.run,拷贝到Linux某个目录后先改权限
chomod 777 NVIDIA-Linux-x86_64-xxx.xx.run

runtime(local)
wget https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda_11.7.0_515.43.04_linux.run
sudo sh cuda_11.7.0_515.43.04_linux.run

2. 禁用nouveau

注:nouveau是一个由爱好者组织的针对NVIDIA显卡开发第三方开源3D驱动的共同项目,并且nouveau是在完全没有得到NVIDIA任何支持的情况下进行开发的,与NVIDIA驱动存在冲突,并且会影响GPU运行的可靠性,建议使用NVIDIA GPU前先禁用该驱动。

        (1)执行 

lsmod|grep nouveau 

查看驱动是否加载,应该是有显示东西。

        (2)编辑文件 blacklist.conf :

sudo gedit /etc/modprobe.d/blacklist.conf

           在文件的最后插入以下两行内容:

blacklist nouveau
options nouveau modeset=0

            保存时命令窗口可能会出现以下提示:
                ** (gedit:4243): WARNING **: Set document metadata failed:不支持设置属性,无视此提示,保存后关闭文件,注意此时还需要执行命令使禁用nouveau真正生效。

        (3)更新系统修改:

 sudo update-initramfs -u

        (4)重新启动,验证nouveau是否已经禁用:

lsmod | grep nouveau

                注意:没有信息显示,说明 nouveau 已经被禁用,接下来可以安装 NVIDIA 显卡驱动。

3. 安装显卡驱动

进入tty文本模式

ctrl+alt+F1

关闭 X-window显示服务

sudo service lightdm stop

卸载原有驱动

sudo apt-get remove --purge nvidia*         #提示有残留可以接着 sudo apt autoremove
给驱动run文件赋予执行权限:

sudo chmod 777 ~/NVIDIA-Linux-x86_64-xxx.xx.run

安装执行命令:

sudo ./NVIDIA-Linux-x86_64-xxx.xx.run -no-x-check -no-nouveau-check -no-opengl-files

        注:只有禁用opengl这样安装才不会出现循环登陆的问题。

    -no-x-check:安装驱动时关闭X服务

    -no-nouveau-check:安装驱动时禁用nouveau

    -no-opengl-files:只安装驱动文件,不安装OpenGL文件

在安装过程中会出现:
(1)The distribution-provided pre-install script failed! Are you sure you want to continue? 选择 yes 继续。

(2)Would you like to register the kernel module souces with DKMS? This will allow DKMS to automatically build a new module, if you install a different kernel later? 选择NO继续

(3)Nvidia's 32-bit compatibility libraries? 选择 No 继续。

(4)Would you like to run the nvidia-xconfigutility to automatically update your x configuration so that the NVIDIA x driver will be used when you restart x? Any pre-existing x confile will be backed up. 选择 Yes 继续

安装后在重新启动X-window显示服务

sudo service lightdm start

退出tty模式进入图形界面

ctrl+alt+F7

4. 最后检查是否安装成功

输入命令:nvidia-smi

Ubuntu22.04 下安装驱动、CUDA、cudnn以及TensorRT

二、CUDA安装

进入 CUDA Toolkit 11.7 Update 1 Downloads | NVIDIA Developer ,依次选择 CUDA类型然后下载即可

上步中已经安装了NVIDIA显卡驱动,故此步骤 CUDA 的安装包括了 nvidia 显卡驱动的安装,此时注意你是否已经安装过 nvidia 显卡驱动。若无法保证已安装的 nvidia 显卡驱动一定正确,那就卸载掉之前安装的 nvidia 显卡驱动(卸载方法链接),然后开始安装 CUDA 11.7;若可以保证已安装正确的 nvidia 显卡驱动,则直接开始安装 CUDA 11.7,在安装过程中选择不再安装 nvidia 显卡驱动。

进入CUDA安装文件路径下,输入:

sudo sh cuda_11.7.0_515.43.04_linux.run

 然后按照提示操作即可,先输入 accept ,然后让选择是否安装 nvidia 驱动,剩下的选择则都输入“y”确认安装或确认默认路径安装,开始安装,此时若出现安装失败提示则可能为在已安装 nvidia 驱动的情况下重复再次安装 nvidia 驱动,安装完成后输入重启命令重启。
接下来配置 CUDA 环境变量,与第3步相同,使用 gedit 命令打开配置文件:
sudo gedit ~/.bashrc
在该文件最后加入以下两行并保存:
export PATH=/usr/local/cuda-11.7/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.7/lib64:$LD_LIBRARY_PATH
使该配置生效:
source ~/.bashrc
三、安装cudnn

从NVIDIA官网的cudnn下载页面上下载与安装CUDA对应的cudnn,网址为https://developer.nvidia.com/rdp/cudnn-download。选择Ubuntu22.04系统下,CUDA11.7对应的cuDNN v8.4.1.5版本,下载得到 cudnn-linux-x86_64-8.4.1.50_cuda11.6-archive.tar.xz,

然后解压

tar -zxvf cudnn-linux-x86_64-8.4.1.50_cuda11.6-archive.tar.xz

然后,使用下面两条指令复制cuda文件夹下的文件到/usr/local/cuda-11.7/lib64//usr/local/cuda-11.7/include/

cp cuda/lib64/* /usr/local/cuda-11.7/lib64/
cp cuda/include/* /usr/local/cuda-11.7/include/

拷贝完成后,我们可以使用如下的命令查看cuDNN的信息: 

cat /usr/local/cuda-11.7/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

Ubuntu22.04 下安装驱动、CUDA、cudnn以及TensorRT

四、安装opencv4.5.3

第一步:下载opencv

下载地址:GitHub - opencv/opencv: Open Source Computer Vision Library

选择4.5.3版本,下载源码。

第二步:解压

unzip opencv-4.5.3.zip

第三步:安装一些依赖文件

sudo apt-get install cmake
sudo apt-get install build-essential
sudo apt-get install cmake git libgtk2.0-dev pkg-config libavcodec-dev libavformat-dev libswscale-dev
sudo apt-get install python-dev python-numpy libtbb2 libtbb-dev libjpeg-dev libpng-dev libtiff-dev libjasper-dev libdc1394-22-dev

第四步:开始建立文件夹编译

mkdir -p build && cd build
cmake  ../opencv-4.5.3
cmake --build .

 第五步:默认安装

sudo make install

默认的安装地址:/user/local/lib 

第六步:环境变量配置

sudo gedit /etc/ld.so.conf

在文件中添加一行: include /usr/local/lib

Ubuntu22.04 下安装驱动、CUDA、cudnn以及TensorRT

sudo ldconfig

 修改bash.bashrc文件

sudo gedit /etc/bash.bashrc

在文件末尾添加:

  • PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig

  • export PKG_CONFIG_PATH

运行下面的命令使之生效。

source /etc/bash.bashrc

测试:

pkg-config opencv –modversion

 没有信息输出那么就是成功了。

也可以去编译源码里面的example来验证。命令如下所示:

cd samples
cd cpp
cd example_cmake
cmake .
make
./opencv_example

五、CUDA的卸载

进入到/usr/local/cuda-11.7/bin目录下,而不是cuda目录。然后打开终端,输入sudo ./cuda-uninstaller

输入命令后,弹出如下界面,通过回车键选中三个选项,最后选中Done。执行完下面指令后,上面的cuda文件就删除了。

Ubuntu22.04 下安装驱动、CUDA、cudnn以及TensorRT

 六、TensorRT安装

1. 下载TensorRT并解压

TensorRT官网下载链接

下载得到 TensorRT-8.4.1.5.Linux.x86_64-gnu.cuda-11.6.cudnn8.4.tar.gz

然后解压  tar -xzvf TensorRT-8.4.1.5.Linux.x86_64-gnu.cuda-11.6.cudnn8.4.tar.gz

修改环境变量:

sudo gedit ~/.bashrc

在文件末尾加入

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/stand/Software/TensorRT-8.4.1.5/lib

source ~/.bashrc

2. 测试样例是否安装成功

cd TensorRT-8.4.1.5/samples/sampleMNIST
make -j16
cd ../../bin/
./sample_mnist

出现问题1:

libnvinfer.so.8: cannot open shared object file: No such file or directory

此时需要加入环境配置

sudo gedit /etc/ld.so.conf

添加 TensorRT lib 的路径,如下:

/home/stand/Software/TensorRT-8.4.1.5/lib

sudo ldconfig

问题2:sudo ldconfig出现下图错误

Ubuntu22.04 下安装驱动、CUDA、cudnn以及TensorRT

 对上面文件创建软连接:

sudo ln -sf /usr/local/cuda/targets/x86_64-linux/lib/libcudnn.so.8.4.1 /usr/local/cuda/targets/x86_64-linux/lib/libcudnn.so.8

问题3:再次执行 ./sample_mnist

Ubuntu22.04 下安装驱动、CUDA、cudnn以及TensorRT

 找不见libnvinfer_builder_resource.so.8.4.1
sudo cp ../TensorRT-8.4.1.5/lib/libnvinfer_builder_resource.so.8.4.1 /usr/lib

即:
把TensorRT根目录中的/lib/下面的文件复制到 /usr/lib/下,
把TensorRT根目录中的/include/下面的文件复制到 /usr/include/下

Ubuntu22.04 下安装驱动、CUDA、cudnn以及TensorRT

3、安装python包 

进入TensorRT根目录下的python/目录下,可以看到多个版本的python包。

在终端执行python3,查看自己的Python版本,可以看到我的是python3.10版,所以这里选择安装tensorrt-8.4.1.5-cp310-none-linux_x86_64.whl

执行安装命令:

pip install --force-reinstall tensorrt-8.4.1.5-cp310-none-linux_x86_64.whl

测试:
python3
import tensorrt
tensorrt.__version__
可以查看到tensorrt版本号:
‘8.4.1.5’

OK!