首页/AI/大模型部署与运维速查/CUDA Graphs:降低解码步启动开销
推理参数与优化50 条

CUDA Graphs:降低解码步启动开销

把解码阶段的多步小算子序列捕获成 CUDA Graph 一次提交,减少内核启动开销:vLLM 默认对解码启用,可用 enforce-eager 关闭做对照排查。

为什么解码阶段要捕获图

解码阶段由大量小算子组成,逐个提交时的内核启动开销会摊薄吞吐。图捕获把这些序列录成一个整体一次提交,减少启动开销。多数引擎默认在解码阶段启用,排查兼容性问题时可以临时切到逐步执行做对照。

基本信息

适用平台支持图捕获的推理引擎与对应的加速环境
默认状态解码阶段通常默认启用
关闭方式启动参数切到逐步执行模式
代价捕获需要额外显存与固定的批形状

开关对照(示意)

开关对照(示意)
# 默认启用图捕获;排查兼容性问题时:
vllm serve <模型路径> --enforce-eager

典型使用场景

  • 性能排查:怀疑启动开销占比高时做开关对照
  • 兼容性问题:某些算子组合与图捕获冲突,先关掉定位
  • 升级验证:引擎升级后复测解码性能是否回归
  • 显存紧张:捕获占用额外显存,容量边界上要权衡

两种模式对照

模式优点代价
默认捕获启动开销低,解码吞吐更好额外显存占用与固定形状限制
逐步执行兼容性好,便于定位问题内核启动开销上升
图捕获需要额外显存与固定形状的批次:对照实验能快速判断性能差异是否来自图捕获。
版本差异:捕获的批量档位与模式仍在演进,升级后用相同的压测脚本复测,确认解码性能没有回归。
关掉只是排查手段:定位完成后要评估能否恢复启用,长期关闭会让解码吞吐白白下降。
捕获的批量档位决定收益范围:档位覆盖不到的批次会退回逐步执行,压测要覆盖实际流量分布。
改了批参数要重新评估:档位与批大小绑定,参数变化会影响捕获是否还能命中。

易错点

  • 遇到兼容性报错直接放弃优化:先用逐步执行模式定位问题来源,再决定是否保留图捕获
  • 不看显存余量就开捕获:捕获本身占显存,容量边界上可能直接启动失败
  • 升级后不做复测:批量档位与实现会随版本变化,性能可能悄悄退化
  • 只测小批次:捕获的收益随批次变化,覆盖面太窄会得出错误结论

数据来源与参考

  • vLLM 官方文档:CUDA Graphs 与性能(docs.vllm.ai)
  • NVIDIA CUDA Graphs 文档(docs.nvidia.com/cuda)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌