CUDA Graph编译优化
CUDA Graph & Compilation
通过CUDA Graph捕获和torch.compile编译消除kernel启动开销
子问题
1.Graph捕获与padding策略
2.Piecewise vs Full模式选择
3.编译缓存管理
4.动态shape处理
5.Guard丢弃与重编译防护
6.Piecewise子图间GC与内存池协调
7.AOT编译产物的持久化与增量加载
8.LoRA等条件特化的Graph key设计
各项目的解法1 solutions
Signals
横向对比
| 维度 | vLLM |
|---|---|
| Graph捕获模式 | Piecewise(按splitting_ops拆分子图)+ Full(整图)双模式,CudagraphDispatcher运行时动态选择 |
| Padding策略 | 预计算查找表,batch size向上对齐到capture_sizes列表值,支持LoRA count特化 |
| 编译集成 | torch.compile + VllmBackend自定义后端,guard-free单次编译,Inductor/Eager双适配器 |
| 缓存管理 | CompilerManager三级缓存(内存→磁盘→AOT),SHA-256 hash key,支持增量加载 |
| 内存优化 | 全局graph_pool共享,weak_ref_tensors释放中间输出,GC禁用减少捕获延迟 |
| 平台抽象 | AbstractStaticGraphWrapper Protocol + 平台解析,支持CUDA/HPU等多加速器 |
最佳实践
1.使用O2优化级别获得最佳性能
2.监控CUDAGraph padding率避免浪费
3.用frozen dataclass作为Graph dispatch key确保可哈希
4.Piecewise模式下禁用中间子图的GC加速捕获
5.通过CompilationCounter全局计数器实现编译流程可观测
6.用bytecode hook拦截编译产物避免Dynamo重入