gpu-computing

GPU 驱动完整介绍(NVIDIA 为主)

·10 分钟阅读·3993 字
📋 目录

GPU 驱动完整介绍(NVIDIA 为主)

1. 基础概念:GPU驱动是什么

GPU 驱动是介于操作系统内核GPU硬件显卡之间的中间程序,核心作用:

  1. 操作系统识别GPU硬件,分配硬件资源;
  2. 向上提供统一API(CUDA),让AI训练/推理程序调用显卡算力、显存;
  3. 管理显存分配、多卡通信(NVLink/NCCL)、硬件功耗、风扇、故障上报;
  4. 提供硬件监控接口(DCGM),采集显存利用率、温度、XID硬件报错。

没有驱动:系统只能把GPU当成普通PCI设备,无法跑任何AI计算,只能亮屏显示。

行业主流分两类:

  1. NVIDIA闭源驱动:AI训练/推理95%集群使用,生态最完善,配套CUDA、cuDNN;
  2. 国产驱动:昇腾CANN、寒武纪MLU驱动、壁仞,政企国产化场景。

下面重点讲NVIDIA驱动(AI运维核心)。

2. NVIDIA驱动分层架构(四层,运维必须懂层级关系)

2.1. 内核态:NVIDIA Kernel Module(内核驱动)

  • 文件名:nvidia.ko,编译加载到Linux内核;
  • 核心能力:PCI硬件初始化、显存物理内存管理、中断处理、硬件故障捕获;
  • 限制:内核版本必须和驱动版本兼容,内核升级会导致驱动失效,需要重新编译安装。

2.2. 用户态核心驱动库(驱动本体)

系统全局GPU管理库,提供底层硬件操作接口:

  • 显卡上电、功耗调节、显存隔离、多卡NVLink互联管理;
  • 暴露DCGM监控接口、nvidia-smi命令底层实现。

2.3. CUDA Toolkit(计算API层,和驱动强版本绑定)

上层AI程序调用的并行计算标准库,版本必须和驱动兼容
程序不会直接操作显卡,而是调用CUDA接口,由CUDA转发给GPU驱动执行计算。
包含:并行计算核心、矩阵运算、多卡通信NCCL、编译工具nvcc。

2.4. 应用层:AI框架(PyTorch/TensorFlow/vLLM)

深度学习框架依赖CUDA,间接调用GPU驱动使用算力。

3. 驱动版本兼容规则(运维高频踩坑点)

3.1. 驱动与CUDA兼容(关键红线)

NVIDIA驱动向下兼容CUDA:

  • 高版本驱动 → 可以运行低版本CUDA程序;
  • 低版本驱动 → 不能运行更高版本CUDA,直接报错CUDA error: insufficient driver version

举例:

  • 535驱动最高支持 CUDA12.2;
  • 545驱动最高支持 CUDA12.3;
    如果你的镜像CUDA12.3,宿主机驱动535,直接启动失败。

3.2. 驱动、内核、系统发行版匹配

每个驱动安装包仅支持特定Linux内核版本、RHEL/CentOS/Ubuntu系统,内核大版本升级后驱动模块失效,表现:
nvidia-smi: command not found / Failed to initialize NVML

3.3. 容器场景特殊:宿主机驱动统一管理

nvidia-container-toolkit 机制:

  • 宿主机安装完整GPU驱动
  • 容器内部不需要安装驱动,仅需要CUDA/cuDNN运行库;
  • 容器启动时挂载宿主机驱动设备文件 /dev/nvidia*、驱动库文件,共享宿主机驱动。

重点:集群所有GPU节点统一驱动版本,避免多镜像CUDA兼容混乱。

4. 驱动核心配套工具(日常运维必用)

4.1. nvidia-smi(驱动自带基础工具)

最常用,查看显卡基础信息

# 查看显卡、显存、CUDA最高支持版本、驱动版本
nvidia-smi
# 实时刷新监控
nvidia-smi -n 1
# 输出JSON,用于监控采集
nvidia-smi -q -x

关键输出字段:

  • Driver Version:宿主机驱动版本
  • CUDA Version:该驱动能支持的最高CUDA版本
  • GPU-Util:GPU算力利用率
  • Memory-Usage:显存占用
  • GPU Temp:显卡温度

4.2. DCGM(Data Center GPU Manager,数据中心运维专用)

驱动配套高级监控/诊断工具,AI集群监控标准:

  1. 采集细粒度指标:显存带宽、NVLink吞吐、功耗、报错XID、PCI错误;
  2. 支持批量管理多节点GPU、故障预检测;
  3. 提供exporter对接Prometheus做监控大盘;
  4. 可限制单卡功耗、隔离故障卡。

4.3. nvidia-modprobe

动态加载/卸载nvidia内核驱动模块,内核更新后重装驱动依赖。

5. 驱动安装三种方式(集群运维场景)

5.1. 方式1:run离线安装包(裸金属服务器最常用)

NVIDIA官方.run二进制安装包,兼容所有Linux发行版
优点:不依赖yum/apt源,离线机房首选;
缺点:内核升级后需要重新执行脚本重建内核模块。

# 安装示例
chmod +x NVIDIA-Linux-x86_64-545.29.shturl
./NVIDIA-Linux-x86_64-545.29.shturl

5.2. 方式2:系统包管理器(apt/yum)

Ubuntu/Debian:apt nvidia-driver-545
CentOS/RHEL:yum安装NVIDIA官方源驱动包
优点:统一系统管理,可自动随内核小幅更新适配;
缺点:内网离线集群需要自建本地源。

5.3. 方式3:云服务器预装驱动

阿里云/腾讯云GPU机器,镜像自带匹配驱动,开箱即用,无需手动安装。

6. 驱动关键核心能力(AI训练/推理依赖)

6.1. 显存隔离与分配

驱动负责物理显存虚拟化,多Pod共享单卡(HAMi、MIG)时,驱动提供显存硬隔离,避免进程互相抢占显存OOM。

6.1.1. MIG 细粒度切分(A100/H100特有,驱动提供能力)

一张A100通过驱动切分成多张小型GPU实例,分给多个推理Pod,驱动独立管理每个MIG实例的算力、显存、故障上报。

6.2. 多卡通信 NVLink/NCCL 底层支撑

多机多卡分布式训练(LLM大模型训练)依赖:

  1. NVLink:GPU之间高速互联硬件,驱动管理链路;
  2. NCCL通信库:底层调用驱动完成卡间数据传输;
    驱动异常会直接导致NCCL报错、训练梯度同步卡死、多机训练速度暴跌。

6.3. 硬件故障捕获 XID 报错

驱动实时检测GPU硬件异常,输出XID错误码(运维排障核心):

  • XID13:显存溢出OOM;
  • XID74:NVLink链路故障;
  • XID43:GPU硬件损坏;
    所有硬件报错全部由驱动上报,DCGM可采集告警。

6.4. 功耗、温控管理

驱动自动调节显卡风扇、功耗上限,防止过热降频,可通过DCGM统一设置功耗墙,降低算力成本。

7. 容器环境驱动透传原理(k8s GPU调度底层)

7.1. 组件依赖:nvidia-container-toolkit + nvidia-docker

  1. 宿主机预装完整NVIDIA驱动,生成设备文件:
    /dev/nvidia0 /dev/nvidiactl /dev/nvidia-uvm
  2. 容器运行时创建容器时,自动挂载上述设备+宿主机驱动so库;
  3. 容器内程序调用CUDA,转发到宿主机驱动硬件层;
  4. Device Plugin读取驱动信息,向k8s上报每张GPU资源,实现调度分配。

关键约束:
容器内不能安装独立驱动,全部复用宿主机驱动,集群驱动版本统一是运维规范。

8. 常见驱动故障 & 排障思路

8.1. 故障1:nvidia-smi 命令不存在

原因:驱动未安装 / 内核升级后内核模块丢失;
修复:重新执行驱动run包安装,重建nvidia内核模块。

8.2. 故障2:容器内报 CUDA version mismatch

原因:宿主机驱动版本过低,低于镜像内CUDA版本;
解决:升级宿主机GPU驱动,或更换更低CUDA版本镜像。

8.3. 故障3:多机训练NCCL通信超时、速度慢

排查驱动:

  1. 确认所有节点驱动版本完全一致;
  2. 检查驱动NVLink状态,nvidia-smi topo -m查看互联拓扑;
  3. DCGM查看是否存在XID链路报错。

8.4. 故障4:GPU随机OOM、程序崩溃,无日志

执行dcgm dmon实时监控,捕获XID13显存报错,多为驱动显存管理异常或程序显存泄漏。

8.5. 故障5:k8s pod申请GPU失败,device plugin报错

宿主机驱动异常,Device Plugin无法读取显卡设备,重启驱动模块或重装驱动。

9. 国产昇腾NPU驱动简单补充(国产化场景)

昇腾驱动名为 CANN(Compute Architecture for Neural Networks)

  1. 一体化驱动栈:驱动+计算库一体发布;
  2. 无独立CUDA,配套AscendCL计算API;
  3. 容器同样采用宿主机透传CANN驱动,不能容器内置驱动;
  4. 配套工具:npu-smi,对标nvidia-smi。

10. 运维落地规范总结

  1. 集群所有GPU节点统一驱动大版本,杜绝多版本混用;
  2. 优先选择长期稳定驱动分支(535/545 LTS),避免高频新版踩坑;
  3. 内核升级前做好驱动重装预案,避免集群大面积GPU失效;
  4. 部署DCGM-exporter采集驱动硬件指标,监控XID报错、温度、显存;
  5. 容器化场景统一依靠宿主机驱动透传,镜像仅保留CUDA运行库;
  6. 分布式训练集群必须校验NVLink拓扑与驱动兼容性,保障NCCL通信性能。

关联文档