已实现

v06_static_buffers

本版本引入什么

本版本准备静态解码缓冲区。各解码步骤的模型输入保持稳定形状和存储地址。

预填充仍然是动态的,只有解码路径为图捕获调整了形态。

为什么引入

CUDA Graph 重放不仅要求张量形状固定,捕获的操作还会引用具体内存地址。如果引擎每一步都分配新的解码输入张量,就无法安全复用已捕获工作。

核心原则

只分配一次解码输入张量,之后原地更新内容:

  • 词元 ID。
  • 位置索引。
  • 槽位 ID。
  • 活跃掩码。

模型在每个解码步骤看到相同的张量对象,但张量值描述当前请求。

建议对比的文件

  • scheduler.py:静态解码模型输入。
  • engine.py:复用解码缓冲区。
  • forward_params.py:解码元数据。
  • kvcache.py:静态解码使用的缓存位置。

保留的权衡

本版本接受较繁琐的缓冲区传递,让 CUDA Graph 版本可以专注于捕获和重放,而不用同时引入静态内存约束。