v06_static_buffers
本版本引入什么
本版本准备静态解码缓冲区。各解码步骤的模型输入保持稳定形状和存储地址。
预填充仍然是动态的,只有解码路径为图捕获调整了形态。
为什么引入
CUDA Graph 重放不仅要求张量形状固定,捕获的操作还会引用具体内存地址。如果引擎每一步都分配新的解码输入张量,就无法安全复用已捕获工作。
核心原则
只分配一次解码输入张量,之后原地更新内容:
- 词元 ID。
- 位置索引。
- 槽位 ID。
- 活跃掩码。
模型在每个解码步骤看到相同的张量对象,但张量值描述当前请求。
建议对比的文件
scheduler.py:静态解码模型输入。engine.py:复用解码缓冲区。forward_params.py:解码元数据。kvcache.py:静态解码使用的缓存位置。
保留的权衡
本版本接受较繁琐的缓冲区传递,让 CUDA Graph 版本可以专注于捕获和重放,而不用同时引入静态内存约束。