3、GPU驱动与CUDA安装:NVIDIA驱动安装、CUDA Toolkit安装、cuDNN安装、环境变量配置、验证安装
好,咱们进入实战环节。GPU驱动和CUDA的安装,说白了就是给AI训练搭好“地基”。我见过太多同学在这步翻车,后面排查问题排查到怀疑人生。今天我把踩过的坑、总结的经验,一次性给你讲透。
3.1 NVIDIA驱动安装:选对版本是第一步
我个人习惯,装驱动前先搞清楚两件事:显卡型号和操作系统内核版本。你想想看,驱动版本选错了,后面CUDA装得再漂亮也是白搭。
安装方式我推荐两种:
- 官方runfile安装:最干净,适合有洁癖的运维。下载NVIDIA官网的.run文件,直接执行。
- 包管理器安装:Ubuntu用
apt,CentOS用yum。省事,但版本可能不是最新的。
我个人更倾向runfile方式。为什么?因为你可以加--no-opengl-files参数,避免和桌面系统的OpenGL库冲突。这个坑我踩过——有次在带图形界面的服务器上装驱动,装完直接黑屏,吓得我一身冷汗。
# 先卸载旧驱动(如果有)
sudo apt purge nvidia-* # Ubuntu
sudo yum remove nvidia-* # CentOS
# 禁用nouveau开源驱动
echo "blacklist nouveau" | sudo tee /etc/modprobe.d/blacklist-nvidia-nouveau.conf
sudo update-initramfs -u
# 重启后安装
chmod +x NVIDIA-Linux-x86_64-*.run
sudo ./NVIDIA-Linux-x86_64-*.run --no-opengl-files
# 验证
nvidia-smi
nvidia-smi。如果能看到GPU列表和驱动版本,说明驱动装好了。如果报错,八成是内核模块没加载,试试modprobe nvidia。
3.2 CUDA Toolkit安装:runfile vs deb包
CUDA Toolkit说白了就是NVIDIA给开发者准备的“工具箱”。里面包含了编译器(nvcc)、运行时库、数学库等等。我建议你装完驱动后,立刻装CUDA Toolkit。
安装方式同样有两种:
| 安装方式 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| runfile | 可自定义安装路径,不污染系统 | 需要手动配置环境变量 | 多版本CUDA共存 |
| deb/rpm包 | 自动配置环境变量,方便管理 | 版本固定,卸载麻烦 | 单版本、新手 |
我个人习惯用runfile。举个例子,我经常需要在同一台机器上测试不同框架的兼容性,PyTorch要CUDA 11.8,TensorFlow要CUDA 12.1。用runfile安装,切换版本只需要改环境变量,多爽。
# 下载CUDA Toolkit runfile(以CUDA 11.8为例)
wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
# 执行安装(注意不要安装驱动,只装Toolkit)
sudo sh cuda_11.8.0_520.61.05_linux.run --toolkit --silent --override
# 安装完成后,默认路径在 /usr/local/cuda-11.8/
3.3 cuDNN安装:深度学习加速的秘密武器
cuDNN是NVIDIA专门为深度学习优化的底层库。说白了,没有cuDNN,你的神经网络训练速度会慢好几倍。我刚开始做AI基础设施时,有次发现同样的模型在GPU上跑得比CPU还慢,查了半天才发现cuDNN没装。
安装cuDNN需要先注册NVIDIA开发者账号,下载对应CUDA版本的cuDNN包。注意,cuDNN版本必须和CUDA版本匹配。
# 下载cuDNN(以cuDNN 8.6.0 for CUDA 11.x为例)
# 解压
tar -xzvf cudnn-linux-x86_64-8.6.0.163_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*
cp -P保留符号链接,或者手动创建软链接。
3.4 环境变量配置:让系统找到CUDA
装完CUDA和cuDNN,如果不配环境变量,系统根本不知道它们在哪。我习惯把环境变量写在~/.bashrc或/etc/profile.d/cuda.sh里。
# 编辑 ~/.bashrc 或 /etc/profile.d/cuda.sh
export CUDA_HOME=/usr/local/cuda-11.8
export PATH=$CUDA_HOME/bin:$PATH
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH
# 使配置生效
source ~/.bashrc
这里有个细节:LD_LIBRARY_PATH一定要把CUDA的lib64目录放在前面。为什么?因为系统里可能有其他版本的CUDA库,顺序错了会加载错版本。嗯,这个坑我帮别人排查过很多次。
3.5 验证安装:别急着跑模型
装完所有东西,别急着跑训练脚本。先做几个简单的验证,确保每个组件都正常工作。
- 验证驱动:
nvidia-smi,看GPU列表和驱动版本。 - 验证CUDA Toolkit:
nvcc --version,看CUDA版本。 - 验证cuDNN:编译并运行cuDNN示例程序。
- 综合验证:写一个简单的CUDA程序,编译运行。
# 验证CUDA编译器
nvcc --version
# 编译并运行CUDA示例
cd /usr/local/cuda-11.8/samples/1_Utilities/deviceQuery
sudo make
./deviceQuery
# 验证cuDNN(需要编译cuDNN示例)
# 输出类似 "cuDNN version: 8.6.0" 即表示成功
nvidia-smi显示GPU信息,无报错nvcc --version显示正确的CUDA版本deviceQuery程序输出"PASS"- cuDNN示例程序输出版本号
我记得有一次帮客户排查问题,他们装完CUDA后nvcc命令找不到,结果发现是环境变量没配。还有一次,nvidia-smi能跑但deviceQuery报错,最后发现是驱动版本太老,不支持CUDA 12。这些坑,你提前知道就能避开。
好了,GPU驱动和CUDA安装就这些内容。每一步都不难,但每一步都可能出问题。按我说的顺序来,稳扎稳打,基本不会翻车。