MUSA Graphs
图是由一系列操作(如内核启动、数据传输等)通过依赖关系连接形成的工作流程,其定义阶段与执行阶段相互分离。
概述
什么是 MUSA Graphs
MUSA Graphs 是 MUSA 的一种工作提交模式。图是由一系列操作(如内核启动、数据传输等)通过依赖关系连接形成的工作流程,其定义阶段与执行阶段相互分离。使用该机制,图只需定义一次,之后可重复启动执行。
将图的定义与执行解耦,可实现以下优化:
- 降低 CPU 启动开销:相比于流(stream)方式,大部分设置工作已提前完成
- 支持全局优化:将完整工作流程一次性提交给 MUSA,使一些在流的逐段提交模式下难以实现的优化成为可能
优化原理
当将内核放入流中时,主机驱动程序会执行一系列操作,为 GPU 上的内核执行做准备。这些内核设置和启动所需的操作,构成了每次内核启动的固定开销。对于执行时间较短的内核而言,这部分开销可能占总执行时间的很大比例。
通过创建包含多次重复执行的工作流程的 MUSA Graph,这些开销仅在图实例化时产生一次,之后图便可反复启动,且每次启动的开 销极低。
使用场景
| 场景 | 传统流方式 | 使用 Graph |
|---|---|---|
| 神经网络推理 | 多次内核启动,CPU 开销大 | 单次图执行,降低启动开销 |
| 图像处理管道 | 串行操作,依赖管理复杂 | 流水线图,自动依赖管理 |
| 迭代算法 | 迭代间同步开销大 | 图重复启动,开销极低 |
| 多租户环境 | 资源竞争,性能不稳定 | 固定图结构,性能可预测 |
| 低延迟服务 | CPU 提交延迟占比高 | 一次实例化,多次低开销启动 |
核心优势
| 特性 | 传统模式 | Graph 模式 |
|---|---|---|
| CPU 开销 | 每次启动都有开销 | 捕获后重复执行,开销极低 |
| 执行确定性 | 依赖驱动调度 | 图结构固定,执行顺序确定 |
| 多流协调 | 需手动同步 | 图内依赖自动管理 |
| 全局优化 | 局部优化 | 完整工作流一次提交,支持全局优化 |