AI服务器GPU驱动升级前先做这三项检查
AI服务器GPU驱动升级不是直接下载新包覆盖安装就完事。
升级前先确认当前驱动版本、GPU型号和内核版本是否匹配,再决定用runfile还是系统包管理器安装。
本文按“检查环境→停业务→安装→验证”的顺序讲,适合已经能登录服务器、会用基础Linux命令的读者。
先确认当前驱动和GPU状态
登录服务器后先跑一条命令,记录型号、驱动版本和CUDA版本:
nvidia-smi
输出里重点看三处:Driver Version、CUDA Version和GPU列表。
如果nvidia-smi已经报错,说明当前驱动本身有问题,先不要升级,先按掉卡流程排查硬件和内核日志。
接着记录内核版本,驱动模块要跟内核匹配:
uname -r
再把当前驱动版本存一份,方便回滚:
cat /proc/driver/nvidia/version
升级前必须停掉所有占用GPU的训练和推理任务,用nvidia-smi确认没有进程占用,否则安装过程中可能卡住或导致显存异常。
准备内核头文件和编译工具
NVIDIA驱动安装时需要编译内核模块,缺头文件会直接失败。
按系统类型安装:
# Ubuntu/Debian
apt update
apt install -y build-essential dkms linux-headers-$(uname -r)
# CentOS/RHEL
yum install -y gcc make kernel-devel-$(uname -r) kernel-headers-$(uname -r) dkms
如果服务器启用了Secure Boot,安装第三方内核模块会被拦截,需要先在BIOS或mokutil里处理签名,否则驱动装完也加载不了。
检查命令:
mokutil --sb-state
输出SecureBoot enabled时,要么关闭Secure Boot,要么给模块签名,这一步不能跳过。
用官方runfile执行安装
从NVIDIA官网下载对应GPU架构的驱动runfile包,上传到服务器后赋执行权限:
chmod +x NVIDIA-Linux-x86_64-*.run
安装前先卸载旧模块,避免版本冲突:
systemctl stop nvidia-persistenced 2>/dev/null
./NVIDIA-Linux-x86_64-*.run --uninstall
然后执行安装,加--dkms让驱动在后续内核更新时自动重建:
./NVIDIA-Linux-x86_64-*.run --dkms --silent
安装完成后加载模块并复查:
modprobe nvidia
nvidia-smi
能正常列出GPU和新的Driver Version,说明驱动层升级成功。
如果nvidia-smi报“Failed to initialize NVML”,先看dmesg | grep -i nvidia里有没有模块加载失败或签名错误。
容易踩的三个坑
- 不停业务直接装:训练进程占用GPU时安装驱动,容易导致进程挂死或显存泄漏,装完重启也未必恢复。
- 只升驱动不核对CUDA:驱动版本决定支持的CUDA上限,但框架侧还要看PyTorch/TensorFlow编译时对应的CUDA版本,升级后跑一个最小推理脚本验证。
- 忽略内核自动更新:用runfile装但没加
--dkms,内核一升级驱动就掉,表现为重启后nvidia-smi找不到设备。
升级后的验证清单
按顺序确认四项:
nvidia-smi
nvidia-smi -q | grep "Driver Version"
dkms status
python -c "import torch; print(torch.cuda.is_available())"
dkms status里驱动模块状态应为installed;
PyTorch输出True说明框架层能识别CUDA。
如果业务用Docker,还要确认容器内GPU可见:
docker run --rm --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi
镜像tag按实际环境替换,能输出GPU信息即容器运行时配置正常。
常见疑问
升级驱动要不要先卸CUDA Toolkit? 不需要。
驱动和CUDA Toolkit是两层,驱动升级不要求卸载Toolkit,但升级后建议用nvcc --version确认Toolkit版本没被意外改动。
生产服务器能不能直接在线升级? 有备用节点时优先在单台测试机验证,确认业务框架和监控组件正常后再批量操作。
没有回滚方案时不要直接在生产机覆盖安装。
升级后GPU数量变少怎么办? 先看lspci | grep -i nvidia是否还能识别全部卡,再查dmesg里是否有Xid报错。
硬件层正常但驱动层识别不全时,优先回滚到旧驱动版本排查。
驱动升级完成后,建议把新版本号、内核版本和验证结果记进运维台账,后续排查掉卡或CUDA异常时能快速对照。