5. 核心模块:NVIDIA 软件栈全景
写 CUDA kernel 只是最底层。实际 AI 工程中,绝大多数代码不会直接调用 CUDA Runtime,而是通过一层层库和框架间接使用 GPU。
理解 NVIDIA 软件栈的全景,能帮你定位问题、选择工具、与上下游团队沟通。
5.1 CUDA Driver 与 CUDA Runtime
CUDA 有两套 API:
- Driver API(
cu*函数):更底层,需要手动管理 context、module、kernel; - Runtime API(
cuda*函数):更高级,自动管理 context,是大多数应用使用的接口。
PyTorch、TensorFlow 等框架通常调用 Runtime API。Driver API 主要用于需要更细粒度控制的场景,比如动态加载 PTX、多 context 管理。
5.2 cuBLAS
cuBLAS 是 NVIDIA 针对 GPU 优化的高性能线性代数库,提供 BLAS(Basic Linear Algebra Subprograms)接口。
cublasSgemm:单精度矩阵乘;cublasHgemm:FP16 矩阵乘;cublasGemmEx:支持混合精度(FP32/FP16/BF16/INT8)。
PyTorch 的 torch.matmul、TensorFlow 的 tf.matmul,底层很多都是 cuBLAS。
CUDA 13.x 时代,cuBLAS 还新增了两个面向大模型的能力:grouped GEMM API(把 MoE 中多个专家的矩阵乘合批提交,实验性)和 FP64 模拟(用 Ozaki 方案以低精度单元模拟双精度,B200 上 DGEMM 可达 175 TFLOPS;cuBLAS 13.4 起 Rubin 上进一步到 212 TFLOPS)。
为什么 cuBLAS 比手写 kernel 快
cuBLAS 团队针对每一代 GPU 架构做了大量手工优化:
- 选择最优的 tiling 尺寸;
- 利用 Tensor Core;
- 针对不同矩阵形状(如 tall-skinny)切换算法;
- 处理边界条件、bank conflict、occupancy。
所以,除非你是 CUDA 专家,否则不要自己写通用矩阵乘 kernel。
5.3 cuDNN
cuDNN(CUDA Deep Neural Network library) 是面向深度学习的原语库,提供:
- 卷积(Convolution)
- 池化(Pooling)
- RNN / LSTM
- 归一化(BatchNorm、LayerNorm)
- 激活函数
- Attention 融合算子
在 Transformer 时代,cuDNN 的 Flash Attention / Fused Attention 实现尤其重要。
5.4 NCCL:集合通信库
NCCL(NVIDIA Collective Communications Library) 是多 GPU 训练的核心。它实现了标准的集合通信原语:
AllReduce:所有 GPU 求和并广播结果(数据并行核心);AllGather:收集所有 GPU 的分片数据;ReduceScatter:规约后分散;Broadcast、Reduce、AllToAll。
NCCL 会针对 NVLink、PCIe、InfiniBand 等拓扑自动选择最优通信路径和算法(Ring、Tree、NVLink-SHARP)。
NCCL 与 MPI 的区别
| 特性 | MPI | NCCL |
|---|---|---|
| 定位 | 通用并行计算 | GPU 深度学习专用 |
| 通信原语 | 完整 | 聚焦集合通信 |
| GPU 感知 | 弱 | 强,支持 CUDA buffer 直接通信 |
| 拓扑优化 | 一般 | 针对 NVLink/IB 深度优化 |
PyTorch Distributed、DeepSpeed、Megatron-LM 底层都依赖 NCCL。
5.5 CUTLASS
CUTLASS(CUDA Templates for Linear Algebra Subroutines and Solvers) 是 NVIDIA 开源的 C++ 模板库,用于编写接近 cuBLAS 性能的手工 kernel。
它把矩阵乘拆成多层抽象:
Gemm <- GemmKernel <- MmaCore <- Warp-level MMA <- Tensor Core instruction什么时候用 CUTLASS?
- 你需要一个 cuBLAS 不支持的自定义矩阵乘变体;
- 你要写 Flash Attention 这类融合算子;
- 你要针对特定精度或稀疏模式极致优化。
普通 AI Infra 工程师更可能“读 CUTLASS”而不是“写 CUTLASS”,但知道它存在很重要。
5.6 Thrust、cuFFT、cuRAND
- Thrust:类似 C++ STL 的并行算法库(sort、reduce、scan 等);
- cuFFT:快速傅里叶变换;
- cuRAND:随机数生成。
这些库在信号处理、科学计算、数据增强等场景有用。
5.7 NVIDIA 驱动与容器化
nvidia-container-toolkit
在 Docker/Kubernetes 中使用 GPU,需要 nvidia-container-toolkit。它把宿主机的 NVIDIA 驱动和 GPU 设备挂载到容器里,让容器内的 CUDA 程序能直接访问 GPU。
Kubernetes 中配合 NVIDIA Device Plugin,实现 GPU 资源的分配和调度。
NVIDIA Driver
驱动是 Host 与 GPU 之间的桥梁。它负责:
- 初始化 GPU;
- 管理显存分配;
- 提交 kernel 到硬件;
- 处理中断和错误(如 Xid 错误码)。
驱动版本需要与 CUDA Toolkit 版本匹配。通常建议用 NVIDIA 官方推荐的组合。
5.8 DCGM:数据中心 GPU 监控
DCGM(Data Center GPU Manager) 是 NVIDIA 针对数据中心的 GPU 监控和诊断工具。
它能采集:
- GPU 利用率、SM 利用率、显存利用率;
- 温度、功耗、时钟频率;
- PCIe 重传、Xid 错误;
- NVLink 错误、 retired page 数量。
DCGM Exporter 可以把指标暴露给 Prometheus,在 Grafana 中展示。这是 Kubernetes GPU 集群可观测性的关键组件。
5.9 GPU Feature Discovery 与 MIG Manager
- GPU Feature Discovery:自动给节点打上 GPU 能力标签(如
nvidia.com/gpu.product=H100-SXM5-80GB),帮助调度器做决策; - MIG Manager:在 Kubernetes 中动态管理 MIG(Multi-Instance GPU)切分,把一张物理 GPU 切成多个独立实例。
这两个组件属于 Kubernetes GPU Operator 生态,详细调度逻辑在 Kubernetes 主题 中讨论。
5.10 CUDA 13 与异构生态:ROCm、昇腾、寒武纪
CUDA 13.x:工具链的 2025-2026 演进
CUDA 13.0 于 2025 年 8 月发布,到 2026 年的 13.4(13.4 Update 2 为当前最新)已支持 Rubin 架构(compute capability 10.7)。对 AI Infra 工程师最重要的变化:
- 统一工具链:服务器(Arm/x86)与 Jetson 嵌入式共用同一套 toolkit,不再分叉;
- 架构断代:正式放弃 Maxwell/Pascal/Volta(sm_75 以下的老卡不再受支持),最低要求 Turing;
- Green Context 持续完善(cuBLAS 13.3 起原生支持,13.3 还加入了 MPS 错误隔离与 Green Context 默认流)、cuTile 逐步转正(见上一节);
- 最低驱动要求 R580(13.4 对应 R615 分支,且 13.4 起 Linux 版 toolkit 不再捆绑驱动),PTX ISA 已演进至 9.4(来源:What's New in CUDA 13.0、CUDA 13.x Release Notes、CUDA 13.3 发布博客)。
老集群升级时这是一个现实约束:H100 之前的卡(V100 等)将无法使用 CUDA 13 工具链,要么留在 12.x,要么借机换代。
AMD ROCm:最接近 CUDA 的挑战者
- ROCm 7.x(2025 年 10 月起)持续收敛,安装体验和算子覆盖大幅改善;
- PyTorch 官方原生支持 ROCm,
torch在很多 AMD 卡上可以“开箱即用”; - HIP 提供接近 CUDA 的编程接口,大量 CUDA 代码可以较低成本移植;
- 硬件上 MI325X(256 GB HBM3E)与 MI355X(CDNA 4,288 GB HBM3E,8 TB/s)主打大显存推理与“买得到”。
国产芯片:软件栈是主战场
- 华为昇腾:CANN 软件栈 +
torch_npu(PyTorch 适配层)+ MindSpore;系统层面用 CloudMatrix 384 超节点(384 颗昇腾 910C 通过统一总线互联)对标 NVL72,走“以系统补单芯片”的路线; - 寒武纪:Neuware 软件栈 + 思元 590 系列,互联网大厂推理份额增长明显;
- 摩尔线程、壁仞等:MUSA / BIRENSUPA 等自有软件栈,通过 CUDA 兼容层降低迁移成本。
共同规律:这些竞争的本质不是硬件参数,而是软件生态。CUDA 三十年的积累(库、工具、人才、框架适配)才是真正的护城河;上层的 PyTorch/Triton 抽象层越统一,后进者的迁移成本越低——这也是 NVIDIA 如此警惕 Triton 中立性的原因。
5.11 软件栈选择建议
| 场景 | 推荐栈 | 说明 |
|---|---|---|
| 训练大模型 | PyTorch + cuBLAS + cuDNN + NCCL | 生态最成熟 |
| 推理优化 | TensorRT-LLM / vLLM / SGLang + cuBLAS + NCCL | 引擎层已高度优化 |
| 自定义算子 | CUDA C++ / Triton / cuTile / CUTLASS | 根据复杂度选择;Triton/cuTile 适合快速迭代 |
| AMD/国产 GPU 环境 | ROCm / CANN + torch_npu | 迁移成本主要在算子覆盖与调优工具链 |
| 集群调度 | Kubernetes + GPU Operator + Device Plugin + DCGM | 生产标准 |
| 性能分析 | Nsight Compute + Nsight Systems + DCGM | 见下一节 |
5.12 本节小结
NVIDIA 软件栈的核心层次:
- CUDA Runtime/Driver:管理 GPU、内存、kernel 启动(CUDA 13 起进入新工具链时代);
- cuBLAS/cuDNN:高性能线性代数和深度学习原语;
- NCCL:多 GPU 集合通信;
- CUTLASS / Triton / cuTile:三层可定制 kernel 手段,门槛从高到低;
- DCGM / Nsight:监控与性能分析;
- nvidia-container-toolkit / GPU Operator:容器化与编排;
- 生态面:ROCm 与国产软件栈在追赶,PyTorch/Triton 抽象层是共同的迁移桥梁。
AI Infra 工程师不一定要精通每一层,但要能在问题发生时判断:是硬件、驱动、通信、框架,还是应用代码。
下一节,我们看 CUDA 程序的源码与编译链路。