Graph Mode
xLLM 支持 Graph Mode,通过预捕获计算图并在后续执行中重放,减少 CPU 开销并提高推理性能。Graph Mode 在不同硬件平台上均有对应实现。
为了优化 Host 侧调度性能,图模式通过在 CPU 一次提交大任务后,设备内部流式执行小 kernel,显著降低启动时间和设备气泡。
在 xLLM 引擎中,Graph Mode 实现了以下特性:
动态维度参数化
Section titled “动态维度参数化”- 将除 num_tokens 以外的关键动态维度作为整图输入参数,包括 batch_size、kv_seq_lens、q_seq_lens、block_table_size 等,从而提高灵活性。在进行图的内存分配和内核配置时,利用这些动态参数计算实际所需值。在图启动阶段,将上述实际参数传入,以确保 kernel 能够使用正确的 stride 访问数据。
Piecewise Graph
Section titled “Piecewise Graph”- 当部分算子不支持 graph 导致整图无法捕获(break graph)时,对 break 之后的各段(piece)分别捕获 graph。这样在无法整图捕获的情况下,仍能尽可能获得 graph mode 的收益,常用于 prefill、chunked_prefill 等场景。
多 shape 复用的显存池
Section titled “多 shape 复用的显存池”- 为了避免不同 shape 的 graph capture 分别占用独立显存,我们让不同 capture 使用不同虚拟地址空间,并共享同一组底层物理内存;同时,输入 tensor 通过持久化 buffer 与 slice 方式复用。
上述功能已在 xLLM 引擎内部实现,通常通过 gflags 参数控制。
最小配置只需要开启 enable_graph,用于打开 decode 阶段的 Graph Mode:
--enable_graph=true常见的配套开关包括:
enable_graph:开启 decode 阶段的 Graph Mode 基础能力enable_prefill_piecewise_graph:开启 prefill 阶段的 Piecewise Graphenable_graph_mode_decode_no_padding:decode 阶段按实际num_tokens建图,而不是按 padding 后的 shape 建图max_tokens_for_graph_mode:限制 Graph Mode 覆盖的最大 token 数;0表示不限制
如果希望同时开启 decode Graph 和 prefill Piecewise Graph,示例如下:
--enable_graph=true \--enable_prefill_piecewise_graph=true \--max_tokens_for_graph_mode=2048如果需要在 decode 阶段启用无 padding 建图,可额外开启:
--enable_graph=true \--enable_graph_mode_decode_no_padding=true更完整的参数说明可参考 CLI 参数说明。
- 开启 Graph Mode 后,在 Qwen3-0.6B 和 Qwen3-1.7B 等模型上,decode 阶段吞吐 提升约 8%–10%。
下表列出目前各模型在 ACLGraph、CudaGraph、MLUGraph 上的支持情况。
| 模型 | ACLGraph | CudaGraph | MLUGraph |
|---|---|---|---|
| Qwen3/Qwen3-MoE | ✅ | ✅ | ✅ |
| DeepseekV3.2 | ✅ | ✅ | |
| GLM4.5/4.6/4.7 | ✅ | ||
| Qwen2.5-VL | ✅ | ||
| Qwen3-VL/Qwen3-VL-MoE | ✅ | ||
| GLM4V | ✅ | ||
| GLM4V-MoE | ✅ |
- 更详细的 Graph Mode 设计与实现说明(含 ACL Graph / CUDA Graph 基本原理、动态维度参数化、Piecewise Graph 与多 shape 复用内存方案)见:Graph Mode 设计文档