3. 操作系统与驱动:Ubuntu 20.04 LTS安装、NVIDIA驱动安装、CUDA与cuDNN配置

说实话,工业缺陷检测这个方向,环境配置往往是第一个坑。我见过不少团队,模型在开发机上跑得飞起,一到产线工控机就各种报错。说白了,底层环境没搞扎实。

这一章,咱们就把地基打牢。Ubuntu 20.04、NVIDIA驱动、CUDA、cuDNN,一步都不能省。

核心原则: 工业场景追求稳定,不是追新。Ubuntu 20.04 LTS + CUDA 11.x 是目前工控机兼容性最好的组合之一。

3.1 Ubuntu 20.04 LTS 安装要点

我个人习惯用 Ubuntu Server 版,不带桌面,省资源。但如果你需要调试可视化界面,Desktop 版也行。记住,选 LTS,别碰 interim 版本。

安装时几个关键点:

  • 磁盘分区: 建议手动分区。`/` 给 50-80GB,`/home` 给剩余空间,swap 分区大小等于物理内存即可(工控机一般 16GB 或 32GB)。
  • 软件源: 安装时选国内镜像(阿里云、清华、中科大),不然下载慢到怀疑人生。
  • SSH 服务: 安装过程中勾选 OpenSSH server。产线工控机通常无头操作,没 SSH 你连上去都费劲。
我的经验: 曾经在一台老款工控机上装 Ubuntu 22.04,结果网卡驱动不兼容,折腾了两天。换回 20.04,半小时搞定。所以,别盲目追新。

3.2 NVIDIA 驱动安装:两种主流方式

驱动装不好,后面全是白搭。我推荐两种方式,看你的网络环境选。

方式一:Ubuntu 官方源(推荐,最稳)

# 先禁用 nouveau(开源驱动,不装这个 NVIDIA 驱动起不来)
sudo bash -c "echo blacklist nouveau > /etc/modprobe.d/blacklist-nvidia-nouveau.conf"
sudo update-initramfs -u
# 重启
sudo reboot

# 重启后,添加显卡驱动 PPA
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update

# 查看推荐版本
ubuntu-drivers devices

# 安装推荐版本(比如 nvidia-driver-535)
sudo apt install nvidia-driver-535

# 再次重启
sudo reboot

# 验证
nvidia-smi

方式二:NVIDIA 官网 .run 文件(离线环境必备)

产线工控机经常没网。这时候提前下载好 `.run` 文件,U盘拷进去。

# 同样先禁用 nouveau(同上)
# 进入纯命令行模式(Ctrl+Alt+F2)
sudo telinit 3

# 给 .run 文件执行权限
chmod +x NVIDIA-Linux-x86_64-535.xxx.run

# 安装,加 --no-opengl-files 避免和桌面冲突
sudo ./NVIDIA-Linux-x86_64-535.xxx.run --no-opengl-files

# 重启
sudo reboot

# 验证
nvidia-smi
避坑: 我曾经在安装 .run 文件时忘了加 `--no-opengl-files`,结果 Ubuntu 桌面循环登录,进不去系统。最后进 recovery mode 卸载驱动重装才解决。所以,这个参数一定要加。

3.3 CUDA 安装与配置

驱动装好只是第一步。CUDA 才是深度学习模型的加速引擎。工业场景我推荐用 runfile 方式安装,灵活,不污染系统包管理器。

安装步骤:

  1. 去 NVIDIA 官网下载 CUDA 11.8(对应你的驱动版本,用 `nvidia-smi` 看支持的 CUDA 版本上限)。
  2. 选择 runfile (local) 版本。
  3. 执行安装,注意:安装时不要勾选 Driver,只装 CUDA Toolkit。
# 下载(假设已经下载到本地)
chmod +x cuda_11.8.0_520.61.05_linux.run
sudo ./cuda_11.8.0_520.61.05_linux.run

# 安装过程中:
# - 输入 accept
# - 取消勾选 Driver(重要!)
# - 其他全选,Install

# 配置环境变量
echo 'export PATH=/usr/local/cuda-11.8/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc

# 验证
nvcc --version
小技巧: 我习惯在 `/usr/local` 下保留多个 CUDA 版本(比如 11.8 和 12.1),通过软链接 `sudo ln -s /usr/local/cuda-11.8 /usr/local/cuda` 切换。这样不同项目可以灵活选择。

3.4 cuDNN 配置:别小看这个库

cuDNN 是 NVIDIA 的深度神经网络加速库。没有它,卷积运算慢 3-5 倍。工业场景下,推理延迟差几毫秒可能就是良品率的问题。

安装步骤:

  1. 去 NVIDIA 官网下载 cuDNN(需要注册账号)。选择对应 CUDA 11.x 的版本。
  2. 下载 cuDNN Library for Linux (x86_64) 的 `.tar.xz` 包。
# 解压
tar -xvf cudnn-linux-x86_64-8.9.7.29_cuda11-archive.tar.xz

# 复制文件到 CUDA 目录
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda-11.8/include/
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda-11.8/lib64/

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

# 验证
cat /usr/local/cuda-11.8/include/cudnn_version.h | grep CUDNN_MAJOR -A 2
注意: cuDNN 版本必须和 CUDA 版本严格匹配。我曾经因为 cuDNN 8.9 配 CUDA 12.0,结果训练时 loss 直接 NaN。查了两天才发现是 cuDNN 不兼容。所以,下载前一定看清楚版本对应关系。

3.5 环境验证与常见问题

装完别急着跑模型。先做一轮快速验证,确保所有组件都正常工作。

验证清单:

组件 验证命令 预期输出
NVIDIA 驱动 nvidia-smi 显示 GPU 型号、驱动版本、CUDA 版本
CUDA Toolkit nvcc --version 显示 CUDA 编译版本(如 11.8)
cuDNN cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR 显示 cuDNN 主版本号(如 8)
TensorRT(可选) trtexec --version 显示 TensorRT 版本

常见问题:

  • nvidia-smi 报错 "Failed to initialize NVML": 驱动没装好,或者内核模块没加载。试试 `sudo modprobe nvidia`。
  • nvcc 找不到: 环境变量没配好。检查 `~/.bashrc` 里的 PATH 和 LD_LIBRARY_PATH。
  • cuDNN 版本不匹配: 运行模型时提示 "libcudnn.so.8: cannot open shared object file"。说明 cuDNN 没装对,或者路径不对。
我的习惯: 每次装完环境,我都会写一个简单的 Python 脚本,用 PyTorch 或 TensorFlow 跑一个 mini 模型,确保 GPU 真的在工作。这一步能省掉后面很多排查时间。
工业缺陷检测模型落地环境配置(第3章) Ubuntu 20.04 LTS NVIDIA 驱动安装 CUDA 11.8 Toolkit cuDNN 8.9 环境验证(nvidia-smi / nvcc) 安装方式 • 方式一:Ubuntu 官方源 • 方式二:NVIDIA .run 文件 • 推荐:离线环境用 .run • 必须加 --no-opengl-files

这张图把整个流程串起来了。从操作系统到底层加速库,每一层都依赖上一层。驱动没装好,CUDA 就装不上;CUDA 版本不对,cuDNN 就白搭。工业场景下,这个链条必须完整且稳定。