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 方式安装,灵活,不污染系统包管理器。
安装步骤:
- 去 NVIDIA 官网下载 CUDA 11.8(对应你的驱动版本,用 `nvidia-smi` 看支持的 CUDA 版本上限)。
- 选择 runfile (local) 版本。
- 执行安装,注意:安装时不要勾选 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 倍。工业场景下,推理延迟差几毫秒可能就是良品率的问题。
安装步骤:
- 去 NVIDIA 官网下载 cuDNN(需要注册账号)。选择对应 CUDA 11.x 的版本。
- 下载 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 真的在工作。这一步能省掉后面很多排查时间。
这张图把整个流程串起来了。从操作系统到底层加速库,每一层都依赖上一层。驱动没装好,CUDA 就装不上;CUDA 版本不对,cuDNN 就白搭。工业场景下,这个链条必须完整且稳定。