共计 1946 个字符,预计需要花费 5 分钟才能阅读完成。
背景痛点
最近在给公司的 AI 训练集群部署 NVIDIA A100 显卡时,遇到了 CentOS8 与 NVIDIA 官方驱动包的兼容性问题。这里记录下完整的解决过程,希望能帮到遇到类似问题的朋友。

- 内核版本冲突:CentOS8 默认的 4.18 内核与 NVIDIA 最新驱动存在兼容性问题,特别是 kernel-header 版本不匹配时,编译阶段就会报错
- SecureBoot 阻挡:企业环境开启 SecureBoot 会导致驱动模块无法加载,出现 ”Required key not available” 错误
- 驱动签名失效:NVIDIA 官方驱动包的签名有时不被 RHEL8 系列发行版信任
技术选型
对比了两种主流的驱动安装方式:
- 直接运行.run 文件
- 优点:版本选择灵活,支持最新显卡
-
缺点:需要手动处理依赖,系统升级后需要重新安装
-
RPM 包管理
- 优点:与系统包管理器集成,便于维护
- 缺点:仓库版本往往滞后,对新显卡支持不足
最终选择了 DKMS 动态内核模块 方案,理由如下:
- 自动重建驱动模块应对内核升级
- 保持 RPM 包管理的优势
- 支持企业环境下的批量部署
实施步骤
准备工作
-
确认显卡型号和所需驱动版本
lspci | grep -i nvidia -
下载官方驱动包(以 470.82 版本为例)
wget https://us.download.nvidia.com/XFree86/Linux-x86_64/470.82.01/NVIDIA-Linux-x86_64-470.82.01.run
关键操作流程
-
禁用 nouveau 驱动
echo "blacklist nouveau" >> /etc/modprobe.d/blacklist.conf echo "options nouveau modeset=0" >> /etc/modprobe.d/blacklist.conf dracut -f -
修改 grub 参数
grubby --update-kernel=ALL --args="nouveau.modeset=0" reboot -
安装依赖项
dnf install -y kernel-devel-$(uname -r) kernel-headers-$(uname -r) gcc make dkms -
安装驱动(带签名验证)
openssl dgst -sha256 NVIDIA-Linux-x86_64-470.82.01.run chmod +x NVIDIA-Linux-x86_64-470.82.01.run ./NVIDIA-Linux-x86_64-470.82.01.run --dkms -s
生产验证
基础状态检查
nvidia-smi
预期看到类似输出:
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.82.01 Driver Version: 470.82.01 CUDA Version: 11.4 |
|-------------------------------+----------------------+----------------------+
持久化模式配置
对于计算卡建议启用持久化模式(Persistence Mode):
nvidia-smi -pm 1
性能影响说明:
– 减少驱动加载时间(约 0.5- 1 秒)
– 增加约 30MB 内存占用
– 对计算任务无负面影响
避坑指南
常见错误处理
Error 255:通常是内核模块编译失败
解决方案:
1. 确认 kernel-devel 版本与当前内核完全一致
2. 检查 gcc 版本兼容性
Error 137:OOM Killer 终止了安装进程
解决方案:
1. 临时增加 swap 空间
2. 在内存充足的机器上安装
多 GPU 配置建议
对于 8 卡服务器,建议在 BIOS 中设置:
– PCIe 带宽分配:x16/x16/x16/x16
– Above 4G Decoding:Enabled
– SR-IOV:Disabled(除非使用 vGPU)
延伸思考
下一步可以考虑:
1. 通过 Kubernetes Device Plugin 实现 GPU 资源调度
2. 启用 MIG(Multi-Instance GPU)技术分割物理显卡
3. 对计算卡启用 TCC 模式(需 Tesla 系列)
完整的 Ansible 部署脚本已放在 GitHub:
https://github.com/example/nvidia-driver-ansible
经验总结
这次部署过程中最大的收获是理解了驱动签名验证的重要性。在企业环境中,所有驱动包都必须经过完整性校验后才能安装。另外发现 DKMS 方案确实能显著降低维护成本,特别是在需要频繁升级内核的安全环境中。
建议大家在生产环境部署前,先在测试机完成完整的验证流程,特别是多 GPU 场景下的 PCIe 资源分配,可能需要根据主板型号进行针对性调整。
