版本:下一个
GPU 软件栈全景
当你在一台服务器上使用 GPU 时,你面对的并不是单一的软件或硬件,而是围绕 NVIDIA GPU 构建的一整套软件栈。从最底层的物理硬件到最上层的 Kubernetes 调度,大致可以分为 5 层:
硬件层 → Linux 内核驱动层 → 用户态库/工具层 → 容器运行时层 → Kubernetes / HAMi 调度层
理解这个分层结构,是排查 GPU 问题、理解 HAMi 工作原理的基础。
5 层架构总览
下图展示了 GPU 软件栈的完整分层结构:
各层详解
第 1 层:硬件层
物理硬件是一切的基础:
- GPU:NVIDIA GPU 芯片(如 A100、H100、L40 等),负责并行计算。
- PCIe Bus:GPU 通过 PCIe 插槽与 CPU 通信,是数据传输的主要通道。
- NVLink(可选):多 GPU 之间的高速互联通道,带宽远高于 PCIe。
第 2 层:Linux 内核驱动层
内核驱动是用户态程序访问 GPU 的桥梁:
- nvidia.ko:NVIDIA 核心内核模块,管理 GPU 硬件资源、显存分配和命令提交。
- nvidia-uvm.ko:统一虚拟内存(Unified Virtual Memory)模块,支持 CPU 和 GPU 之间透明地共享内存地址空间。
- nvidia-modeset.ko:显示模式设置模块,用于 GPU 的图形输出管理。
内核驱动向上暴露 /dev/nvidia* 设备节点,用户态程序通过这些设备节点与 GPU 交互。
第 3 层:用户态库/工具层
这一层包含了开发者和管理员最常接触的工具和库:
- CUDA:NVIDIA 的并行计算平台和编程模型,包括编译器(nvcc)、运行时库和开发工具。几乎所有 GPU 应用都通过 CUDA 调用 GPU。
- NVML(NVIDIA Management Library):GPU 管理库(
libnvidia-ml.so),提供查询 GPU 状态(温度、显存、利用率等)的 API。nvidia-smi、DCGM 等工具都依赖它。 - nvidia-smi:命令行管理工具,用于查看 GPU 状态、进程、显存使用情况等。它是 NVML 的 CLI 前端。
- DCGM(Data Center GPU Manager):数据中心 GPU 管理工具,提供健康状态监控、诊断、组管理等功能,适用于大规模 GPU 集群。
- MIG(Multi-Instance GPU):多实例 GPU 技术,将一块 A100/H100 物理上划分为多个隔离的 GPU 实例,每个实例拥有独立的显存和计算核心。