CUDA Graphs 是 CUDA 官方的图执行特性:把一串 kernel 及其依赖关系录成一张图,之后整图一次发射、反复重放。它治的病是发射开销——CPU 逐个发射 kernel,每次都有微秒级固定开销,kernel 越小越密,GPU 空等 CPU 的时间越多;官方编程指南的表述是以图的单次发射代替一串单算子发射(CUDA 官方编程指南)。
该特性随 CUDA 10 于 2018 年登场(PyTorch 官方博客:CUDA Graphs 于 CUDA 10 首次亮相,「用一次 CPU 操作发射多个 GPU 操作,从而降低发射开销」)。训练的每步迭代、推理的逐步解码都在重复同一串 kernel,一次建图的成本摊到无数次重放里;PyTorch(1.10 版起内置 API)与 TensorRT-LLM 等均已把图捕获/重放做成标配优化。
| 项目 | 数值 / 口径 |
|---|---|
| 引入 | CUDA 10 · 2018 年(PyTorch 官方博客,引 CUDA 10 特性) |
| 机制 | 整图一次 cudaGraphLaunch 发射 · 按需重放(CUDA 运行时 API) |
| 收益实例 | MLPerf v1.0 Mask R-CNN:图化段 31ms→6ms(5 倍)· 整体 1.7 倍(PyTorch 官方博客) |
| 规模化 | BERT 4096 卡提速 1.12 倍 · 助力 MLPerf 训练扩到 4000+ 卡(PyTorch 官方博客) |
卡越快,等 CPU 喂数越亏:B300 的 kernel 跑得更快更短,发射开销的占比被进一步放大——这代推理栈(TensorRT-LLM 等)与训练脚本普遍开图执行。对比两台同款八卡机的推理吞吐,差的常常不是卡,是谁把软件栈(含图执行)用好,压测报告要连同栈配置一起看。
买家视角:验货推理压测建议带上 GPU 利用率或时间线曲线——CPU 发射开销大时 GPU 大片空转,峰值算力再高也白搭(PyTorch 官方博客的判例曲线即此形);同款机器「会调栈」与「不会调」的实测差,是议价的正当依据。