v00_full_recompute
本版本引入什么
这是最小但可用的基线:一个 Qwen2.5 风格的纯解码器模型,一次处理一个请求,并在每个生成步骤重新计算完整序列。
它包含后续版本持续复用的核心组件:词元嵌入、RoPE、RMSNorm、分组查询注意力、SwiGLU、Transformer Block、权重加载和贪心生成。
为什么引入
清晰的基线让后续每项优化都有具体对象。没有这个版本,KV 缓存、批处理、槽位、分页存储和 CUDA Graph 就会像彼此孤立的技巧,而不是对真实瓶颈的回应。
核心原则
自回归生成每次追加一个词元,然后在提示词和当前全部生成词元上运行模型。因果注意力阻止位置看到未来,但实现仍会在每一步重新计算旧词元的 K 和 V。
这种实现简单直接,但代价会随序列长度快速增长。
建议对比的文件
llm.py:单请求生成循环。layer/gqa.py:第一份完整 GQA 实现。model/qwen2_5.py:后续版本保留的模型骨架。
保留的权衡
本版本优先保证清晰,而不是效率。它有意不适合高效服务,因此自然引出下一个问题:怎样避免重复计算历史注意力状态?