focus-llama:一个实现声明式注意力的 llama.cpp 分支(arXiv:2609.02737)
摘要
这篇文章介绍了一个名为 focus-llama 的 llama.cpp 分支,它实现了最近一篇论文中的声明式注意力(Declarative Attention),允许模型在推理过程中声明所需的上下文块,以优化 KV 缓存使用并减少解码时间。
我 fork 了 llama.cpp 以实现声明式注意力(Declarative Attention)(arXiv:2609.02737,Google DeepMind 和 KAIST AI)。模型在其自身输出中声明所需的上下文块 <focus magic\_chunks="N">,引擎监听并限制后续令牌可关注的内容。无需评分器,无需训练:仅通过提示加上一个响应标签的引擎。根据他们的论文,与原版相比,响应的整体解码时间可降低至 0.71×(Gemma)和 0.77×(Qwen)。这些是论文中使用 vLLM 的数据;我尚未对该 fork 进行基准测试(也未进行精度基准测试)。= 有效功能 = - llama-server 可以为请求丢弃 KV 令牌范围(da_rm / da_rm_at),无论是在预填充期间还是之后。- 标签驱动模式:给定客户端提供的块布局,服务器在生成过程中解析模型的第一个 <focus magic\_chunks="N"> 标签,并在该点丢弃其他块(一次性、单向)。- 第二序列模式(da_b,需要 --kv-unified)保持原始序列不变。- 已通过小规模冒烟测试检查首令牌对数概率(一个 Qwen 混合/GDN 模型和一个小型密集模型)。= 为什么需要 fork = - 标准 llama-server 无法在生成过程中调整 KV 范围,因此需要服务器更改。- llama.cpp 没有分页块表(论文的 vLLM 版本重写了它),因此仅靠掩码无法减少实际读取的 KV。- 真正的跳过需要内核支持或压缩。根据源代码阅读,目前在 CUDA 上的单令牌解码不会跳过掩码块。- 在混合模型中,仅限制注意力层(与论文相同);循环状态不受影响。仓库:https://github.com/edwardyoon/focus-llama 欢迎反馈,特别是来自任何曾从事 llama.cpp KV/循环内存工作的人。
相似文章
@ethantsliu: LLMs能够为长上下文自主控制注意力!在文本生成过程中,LLMs通常读取完整的KV缓存……
该论文介绍了声明式注意力技术,LLMs明确声明需要关注哪些上下文段,从而将令牌使用量最多减少52%,同时准确率下降极小。
语言模型能够控制自身的注意力
本文介绍了一种名为Declarative Attention的方法,该方法使语言模型能够在推理时声明相关上下文区域,从而显著减少键值缓存的读取次数,在长上下文任务中仅带来轻微的精度损失。
Lighthouse Attention(11分钟阅读)
Lighthouse Attention是一种基于选择的分层注意力机制,通过在前向+反向传播中实现约17倍的速度提升(在512K上下文下),并在98K上下文中实现1.4–1.7倍的端到端加速,从而加速长上下文预训练。该机制使用Llama-3 530M模型在50B token上进行了验证。
llama.cpp
本文介绍了 llama.cpp 的官方主页,这是一个开源的本地 LLM 推理引擎,重点介绍了通过 pi-llama 插件与 Pi 编码代理的集成以及广泛的硬件优化。
Dynamic Linear Attention
DLA引入了自适应状态合并和容量受限的内存建模,用于多状态线性注意力,提升了长上下文LLM的性能。