SuperAPI AI 工具集

cuda-graphs

编程与开发

查看项目

更新于 10-15 09:45

技能介绍

cuda-graphs 是一个面向 CUDA Graph 捕获与优化的专家技能,核心目标是减少内核启动开销,并通过基于图的工作流优化执行模式。

用途

该技能用于将 CUDA 操作捕获为图、实例化并执行图实例,从而在重复执行场景中显著降低启动开销。它适合需要大量小内核、重复执行模式、机器学习推理和批处理的场景。

主要能力

  1. 流捕获基础:通过 cudaStreamBeginCapture 与 cudaStreamEndCapture 将流操作捕获为图,再通过 cudaGraphInstantiate 实例化并循环执行 cudaGraphLaunch。
  2. 显式图构建:使用 cudaGraphCreate、cudaGraphAddKernelNode 等 API 以编程方式构建图,并指定节点依赖关系。
  3. 图节点类型:支持内存拷贝节点、Memset 节点、主机函数节点、事件记录/等待节点(CUDA 11.1+)以及空节点。
  4. 图更新(CUDA 11+):通过 cudaGraphExecUpdate 在不重建图的情况下更新参数,并处理更新结果。
  5. 内核节点参数更新:通过 cudaGraphGetNodes 遍历节点,使用 cudaGraphExecKernelNodeSetParams 更新内核参数。
  6. 图性能基准测试:提供对比流式执行与图执行的基准测试代码,输出加速比。
  7. 推理流水线:展示如何将推理操作捕获为图,并在每次推理时以低开销执行。
  8. 条件图(CUDA 12+):使用 cudaGraphConditionalHandle 和条件节点实现条件执行。
  9. 图调试与可视化:通过 cudaGraphDebugDotPrint 导出 DOT 格式,并统计图中各类节点数量。

使用方式

该技能以代码示例形式提供各类 CUDA Graph 操作模式,包括流捕获、显式构建、节点类型、图更新、参数更新、性能基准测试、推理流水线、条件图和调试可视化。使用时需满足前置条件:NVIDIA CUDA Toolkit 10.0+(基础图)、CUDA 11.0+(图更新)、CUDA 12.0+(条件节点)、GPU 计算能力 7.0+,以及 Nsight Systems 用于图性能分析。

适用场景

  • 大量小内核:减少启动开销
  • 重复执行模式:摊销捕获成本
  • 机器学习推理:获得一致的低延迟
  • 批处理:高效重复执行

限制

  • 图捕获要求一致的执行路径
  • 某些操作无法被捕获(如内核中的 printf、malloc)
  • 图更新仅限于相同拓扑
  • 条件节点需要 CUDA 12.0+
  • 使用图进行性能分析需要 Nsight Systems 2021.4+

最佳实践

  • 捕获稳定的模式,不要捕获动态工作负载
  • 使用图更新以避免重新实例化的开销
  • 先进行性能分析,确认启动开销是瓶颈
  • 批处理操作,最大化每次图启动的工作量

该技能可与 cuda-stream-concurrency.js、ml-inference-optimization.js、dynamic-parallelism-implementation.js 等流程集成。执行操作时提供结构化输出,包含操作状态、图统计、性能数据和推荐建议。