4、GPU驱动与CUDA工具包安装:NVIDIA驱动版本选择、CUDA 12.x 安装(runfile vs deb)、cuDNN库安装、环境变量配置与验证
说到GPU驱动和CUDA的安装,我估计不少同学都在这上面栽过跟头。我自己刚入行那会儿,也曾经因为驱动版本选错,折腾了一整天。说白了,这一步要是没走对,后面跑模型、做推理,全都会出幺蛾子。
今天咱们就把这块彻底捋清楚。我会把我在项目中踩过的坑、总结的经验,全都倒出来给你。
4.1 NVIDIA驱动版本选择:别盲目追新
很多人一上来就装最新版驱动,觉得越新越好。其实不是这样的。你想想看,驱动是给硬件和软件搭桥的,桥搭得稳不稳,比桥新不新更重要。
我个人的习惯是:先确定你要用的CUDA版本,再反过来选驱动。因为NVIDIA驱动是向下兼容的,但CUDA工具包对驱动版本有最低要求。
| CUDA 版本 | 最低驱动版本(Linux) | 推荐驱动版本 |
|---|---|---|
| CUDA 12.0 | 525.60.13 | 535.x 或 545.x |
| CUDA 12.1 | 530.30.02 | 535.x 或 545.x |
| CUDA 12.2 | 535.54.03 | 545.x 或 550.x |
| CUDA 12.3 | 545.23.08 | 550.x |
4.2 CUDA 12.x 安装:runfile vs deb,到底选哪个?
这个问题我经常被问到。其实两种方式都能用,但适用场景不一样。
4.2.1 deb 安装(推荐新手用)
deb安装说白了就是apt-get那一套。优点是省心,依赖自动解决,卸载也干净。缺点是版本更新慢,有时候你想装个特定小版本,deb源里没有。
# 添加NVIDIA官方源
wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2204/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
# 安装CUDA 12.2
sudo apt-get install cuda-12-2
嗯,这里要注意:deb安装会同时装驱动。如果你已经手动装了驱动,可能会冲突。我建议先卸载旧驱动,或者用 --no-install-recommends 参数。
4.2.2 runfile 安装(推荐老手用)
runfile是NVIDIA官方提供的.run脚本。优点是你想装什么就装什么,完全可控。缺点嘛,卸载比较麻烦,得手动删文件。
# 下载runfile
wget https://developer.download.nvidia.com/compute/cuda/12.2.0/local_installers/cuda_12.2.0_535.54.03_linux.run
# 执行安装
sudo sh cuda_12.2.0_535.54.03_linux.run
执行之后会弹出一个文本界面,记得把驱动勾选去掉(如果你已经装过驱动了)。我只装CUDA Toolkit和CUDA Samples。
4.3 cuDNN库安装:深度学习加速的关键
cuDNN是NVIDIA专门为深度学习优化的库。没有它,你的卷积、池化、LSTM这些操作,性能会差很多。我做过测试,同样的模型,有cuDNN和没有cuDNN,推理速度能差3-5倍。
安装cuDNN其实不复杂,但要注意版本匹配。cuDNN的版本号是跟着CUDA走的。
# 下载cuDNN(需要NVIDIA开发者账号)
# 假设你下载的是 cudnn-linux-x86_64-8.9.4.25_cuda12-archive.tar.xz
# 解压
tar -xvf cudnn-linux-x86_64-8.9.4.25_cuda12-archive.tar.xz
# 复制文件到CUDA目录
sudo cp cudnn-*-archive/include/cudnn*.h /usr/local/cuda/include
sudo cp -P cudnn-*-archive/lib/libcudnn* /usr/local/cuda/lib64
# 设置权限
sudo chmod a+r /usr/local/cuda/include/cudnn*.h
sudo chmod a+r /usr/local/cuda/lib64/libcudnn*
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR 来确认版本号。我每次装完都会跑一遍这个命令,确保没装错。
4.4 环境变量配置与验证
装完CUDA和cuDNN,最后一步就是配环境变量。这一步要是漏了,系统根本找不到CUDA命令和库文件。
我个人习惯把环境变量写在 ~/.bashrc 里,这样每次登录都会自动加载。
# 编辑 ~/.bashrc
echo 'export PATH=/usr/local/cuda-12.2/bin:$PATH' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda-12.2/lib64:$LD_LIBRARY_PATH' >> ~/.bashrc
echo 'export CUDA_HOME=/usr/local/cuda-12.2' >> ~/.bashrc
# 使配置生效
source ~/.bashrc
验证环节:我一般会跑三个命令来确认一切正常。
# 1. 检查驱动
nvidia-smi
# 2. 检查CUDA版本
nvcc --version
# 3. 检查cuDNN版本
cat /usr/local/cuda/include/cudnn_version.h | grep CUDNN_MAJOR
如果三个命令都正常输出,那恭喜你,环境配好了。如果 nvcc --version 报错,多半是PATH没配对。如果 nvidia-smi 报错,那就是驱动有问题。
好了,GPU环境这块就说到这儿。你按照这个流程走,基本不会出大问题。如果真遇到什么奇怪的报错,多半是版本不匹配,或者环境变量没配好。回头检查一下这两点,90%的问题都能解决。
公众号:蓝海资料掘金营,微信deep3321