第二章 开发环境准备:Ubuntu系统安装、NVIDIA驱动与CUDA安装、cuDNN安装与验证、TensorRT安装包获取

好,咱们正式开始动手了。这一章,说白了就是搭台子。你想想看,TensorRT再牛,也得有个能跑的环境。我见过太多人,模型写好了,一部署就翻车,十有八九是环境没搞对。所以这一章,咱们把地基打牢。

2.1 Ubuntu系统安装——别小看这一步

我个人习惯用Ubuntu 20.04 LTS或22.04 LTS。为什么?因为NVIDIA的驱动和CUDA对这两个版本支持最稳。你非要用18.04或者最新的24.04,也不是不行,但我在项目中遇到过几次驱动兼容性问题,折腾半天,最后发现换个系统版本就解决了。嗯,这里要注意。

安装过程我就不细说了,网上教程一堆。但有几个关键点我得提一下:

  • 磁盘分区:建议给根目录至少留50GB。TensorRT本身不大,但CUDA、cuDNN、还有你后面要编译的各种库,加起来很占地方。我吃过这个亏,分区给小了,后来天天清缓存。
  • 网络配置:安装时最好连上网,让系统自动更新。不然后面装驱动时缺依赖包,你会很痛苦。
  • SSH服务:如果你是远程开发,记得装openssh-server。我习惯装完系统第一件事就是打开SSH,方便后面用笔记本连过去操作。
小技巧:装完系统后,先跑一遍 sudo apt update && sudo apt upgrade -y,把系统包更新到最新。这能避免很多莫名其妙的依赖问题。

2.2 NVIDIA驱动安装——最坑的一步

驱动安装,可以说是整个环境准备里最容易翻车的地方。我曾经在一台服务器上折腾了整整一个下午,最后发现是内核版本和驱动不匹配。

我推荐两种方式:

  1. 使用Ubuntu官方仓库:最简单,但版本可能不是最新的。
  2. 使用NVIDIA官方.run文件:版本最新,但需要手动处理一些依赖。

我个人更推荐第二种,因为可控性更强。具体步骤:

# 先卸载旧驱动(如果有)
sudo apt purge nvidia-* -y

# 禁用nouveau开源驱动
sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
sudo update-initramfs -u

# 重启后,进入命令行模式(Ctrl+Alt+F2)
# 下载对应显卡的驱动
wget https://us.download.nvidia.com/XFree86/Linux-x86_64/550.54.14/NVIDIA-Linux-x86_64-550.54.14.run

# 安装
chmod +x NVIDIA-Linux-x86_64-550.54.14.run
sudo ./NVIDIA-Linux-x86_64-550.54.14.run
注意:安装过程中会提示是否安装32位兼容库,建议选是。另外,如果提示"Unable to find the kernel source",说明你没装linux-headers,先跑 sudo apt install linux-headers-$(uname -r) 再试。

装完后,用 nvidia-smi 验证。如果能看到显卡信息,说明驱动装好了。看不到?别慌,重启一下试试。

2.3 CUDA安装——版本匹配是门学问

CUDA版本和驱动版本是绑定的。你装了个新驱动,但CUDA版本太老,可能跑不起来。反过来也一样。我建议直接去NVIDIA官网查一下兼容性矩阵。

我个人习惯用runfile方式安装,因为可以自由选择安装路径,方便后面多版本切换。但如果你只是单用户使用,deb包方式更省事。

# 以CUDA 12.4为例
wget https://developer.download.nvidia.com/compute/cuda/12.4.0/local_installers/cuda_12.4.0_550.54.14_linux.run
sudo sh cuda_12.4.0_550.54.14_linux.run

安装时注意:

  • 不要勾选Driver(因为我们已经装过了)
  • Toolkit和Samples建议都选上

装完后配置环境变量:

# 在 ~/.bashrc 或 ~/.zshrc 中添加
export PATH=/usr/local/cuda-12.4/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-12.4/lib64:$LD_LIBRARY_PATH

# 生效
source ~/.bashrc

验证:

nvcc --version

看到版本号,说明CUDA装好了。

2.4 cuDNN安装与验证——别漏了这一步

cuDNN是NVIDIA的深度学习加速库。没有它,TensorRT的很多算子跑不起来。我见过有人装完CUDA就以为万事大吉,结果跑模型时各种报错,查了半天才发现cuDNN没装。

安装步骤:

  1. 去NVIDIA官网下载cuDNN(需要注册账号)
  2. 选择对应CUDA版本的cuDNN
  3. 解压后复制文件到CUDA目录
# 假设下载的是 cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz
tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz

# 复制文件
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda-12.4/include/
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda-12.4/lib64/

# 设置权限
sudo chmod a+r /usr/local/cuda-12.4/include/cudnn*.h
sudo chmod a+r /usr/local/cuda-12.4/lib64/libcudnn*

验证cuDNN是否安装成功:

# 查看cuDNN版本
cat /usr/local/cuda-12.4/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

如果输出类似:

#define CUDNN_MAJOR 8
#define CUDNN_MINOR 9
#define CUDNN_PATCHLEVEL 7

说明装好了。

验证小技巧:你也可以编译cuDNN自带的sample程序来验证。在samples目录下有个 mnistCUDNN 示例,编译运行一下,能跑通就说明环境没问题。

2.5 TensorRT安装包获取——选对版本很重要

TensorRT的安装包可以从NVIDIA官网下载。注意,它分几种形式:

安装方式 适用场景 我的建议
Tar包 自定义安装路径,多版本共存 推荐,灵活度高
Deb包 系统级安装,简单快捷 适合新手
Pip包 Python环境直接使用 适合快速测试
源码编译 需要定制化功能 不推荐,除非你有特殊需求

我个人习惯用Tar包。为什么?因为我可以同时保留多个版本的TensorRT,切换起来方便。比如我有时候需要对比TensorRT 8.6和10.0的性能差异,直接改个环境变量就行。

下载时注意:

  • 选择对应CUDA版本的TensorRT
  • 注意系统架构(x86_64还是aarch64)
  • 如果做嵌入式开发,记得下载对应Jetson平台的版本

下载完成后,解压到指定目录:

tar -xzvf TensorRT-10.0.1.6.Linux.x86_64-gnu.cuda-12.4.tar.gz
sudo mv TensorRT-10.0.1.6 /opt/

然后配置环境变量:

export TRT_PATH=/opt/TensorRT-10.0.1.6
export LD_LIBRARY_PATH=$TRT_PATH/lib:$LD_LIBRARY_PATH
export PATH=$TRT_PATH/bin:$PATH

验证:

trtexec --version

看到版本信息,说明TensorRT安装成功。

重要提醒:TensorRT的版本一定要和CUDA、cuDNN版本匹配。不匹配的话,编译时各种链接错误,跑模型时各种段错误。我建议你在下载前,先去NVIDIA官网查一下兼容性列表,省得后面折腾。

好了,环境准备就到这里。下一章,咱们开始真正接触TensorRT的核心概念。到时候我会带你手写第一个TensorRT程序,感受一下它的威力。