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
我的小建议:如果你用的是数据中心卡(比如A100、H100),直接去NVIDIA官网的「数据中心驱动」页面下载。游戏卡(RTX系列)用普通驱动就行。千万别混用,我曾经见过有人把游戏卡驱动装到A100上,结果性能直接砍半。

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。

我曾经踩过的坑:有一次我在一台已经装了535驱动的机器上,用runfile装CUDA 12.2,忘了取消驱动选项。结果装完以后,nvidia-smi直接报错,两个驱动打架了。最后只能进安全模式手动删驱动,折腾了俩小时。所以,千万记住:驱动只能装一次

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*
一个小技巧:装完cuDNN后,可以用 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 报错,那就是驱动有问题。

我总结一下:驱动是地基,CUDA是框架,cuDNN是加速器。这三样东西,版本一定要匹配。我的经验是,先定CUDA版本,再选驱动,最后配cuDNN。顺序别搞反了。

好了,GPU环境这块就说到这儿。你按照这个流程走,基本不会出大问题。如果真遇到什么奇怪的报错,多半是版本不匹配,或者环境变量没配好。回头检查一下这两点,90%的问题都能解决。


公众号:蓝海资料掘金营,微信deep3321