RedKnot如何给注意力头分门别类?70–90%算力节省背后的Head分类策略详解
RedKnot如何给注意力头分门别类70–90%算力节省背后的Head分类策略详解【免费下载链接】RedKnotEfficient Long-Context LLM Serving with Head-Aware KV Reuse and SegPagedAttention项目地址: https://gitcode.com/gh_mirrors/re/RedKnotRedKnot是一款面向长文本场景的 LLM 推理加速框架Head-aware KV Reuse SegPagedAttention构建于 SGLang 之上。它的核心思路非常直白把模型里成千上万个注意力头分门别类让不同性格的头走不同的注意力路径从而在质量回退不超过 1 个百分点的前提下实现 2–5× 的 TTFT 加速和70–90% 的算力账本节省。本文带你读懂这套 Head 分类策略的原理、信号来源和实际配置。为什么长上下文推理这么贵大模型处理长上下文比如 RAG 里一次塞入几十万个 token时Prefill 阶段的注意力计算量随序列长度平方级增长。传统优化多是一刀切要么整体重算要么整体复用。但 RedKnot 的观察是不同的注意力头对复用历史前缀的态度截然不同。有的头对前缀极其敏感前缀一变输出就变必须在线重算有的头天然只看最近的窗口 开头的注意力汇attention sink前缀怎么复用都几乎不受影响可以放心复用。把这个性格摸清就能只把算力的刀刃用在真正需要的头上。四类头型local / global / retrieval / denseRedKnot 中每个(层, KV头)组合都会被分配四种策略之一定义位于 head_config.py头型注意力范围复杂度角色定位global全量前缀 KVO(L²)前缀敏感头必须在线重算local开头 sink 最近滑窗O(L·W)可复用头离线预制 KVretrieval全量 KV 但只保留 top-p 重要 token稀疏PTR 式检索头️dense全量 KV RoPE 重对齐O(L²)首/尾若干层的安全网其中两个默认参数值得记住滑窗默认window512注意力汇默认sink4即每层每头都会保留开头 4 个 token防止注意力塌陷。dense类型是个保险丝RedKnot 会把前几层强制设为 densedense_prefix_layers保留早期的细粒度信号再让中间的层大胆省。分类的两大信号前缀敏感度 边缘质量那么性格怎么测离线分析器 head_profiler.py 用一个小规模校准语料给每个头打两个分数前缀敏感度prefix sensitivity把同一段文本放到不同前缀后面 vs. 放在开头头的注意力输出变化有多大变化大 → 全局头几乎不变 → 局部头。边缘质量edge-mass该头的注意力有多少比例落在最近窗口 sink之外落在远处 token 上的比例越高说明它是长程依赖的全局头。判定规则刻意保守两个信号任一超标就标为 global。因为把全局头误判成局部头会伤输出质量而把局部头误判成全局头只是少省一点算力——质量优先于速度这正是 RedKnot 敢把质量回退压在 1 个百分点以内的底气。分析结果会固化为一份Head Policy JSON存放在 test/srt/redknot/head_class/ 目录包含kv_head_classification每个头的类型矩阵kv_head_max_distance每个头的滑窗大小非 local 头为 -1kv_head_sink_size/global_head_ids/local_head_idsdense_prefix_layers等安全参数由于头型是模型固有属性论文 §3.2只需离线分析一次线上所有请求零开销复用。真实案例DeepSeek V4 Flash 的冻结头策略看一下 DeepSeek V4 Flash 发布版冻结的配置 deepseek_v4_flash_0731_redknot.jsonMLA 共 64 个头每层 8 个 global 头编号 0、8、16、24……56均匀分布在 64 个头中每层 56 个 local 头滑窗 128 tokensink 4 token第 0–2 层与第 40–42 层整层 dense前 3 层由dense_prefix_layers3强制保护也就是说42 层中的 37 个中间层里约 87.5% 的头走了 O(L·W) 的廉价路径这正是70–90% 算力账本节省的直接来源节省 ≈ 可复用局部头占比 × 上下文长度放大效应 56/64 的 head × 长上下文的 O(L²) → O(L·W) 降维⚠️ 注意该算力账本有意排除了访存、kernel 启动和 TP 通信开销衡量的是注意力计算本身的账目而非整机能耗。窗口还会自适应离线配置里写死的窗口只是起点。HeadClassConfig.set_local_window()支持按请求上下文长度动态缩放例如window ctx_len // 2长请求自动放大局部视野兼顾精度与速度。头分类如何落到执行SegPagedAttention分类只是图纸真正的执行靠SegPagedAttentionKV 页和可见性按头 段两个维度组织global、local、retrieval 头各自消费不同范围的上下文而不必挤在同一种统一的 cache 布局里。相关实现位于 segpaged.py 与 python/sglang/srt/layers/attention/redknot/。这套头级节省还会与另外两条机制叠加稀疏 FFNtoken 级重要性决定哪些行进入昂贵的 FFN 计算sweep_sparse_ffn.py自适应 Expert Top-KMoE 路由器分布需要时才多分配专家快速上手验证头分类策略想亲眼看看效果仓库内置了多个模型族的基准入口cd test/srt/redknot # DeepSeek V4 Flash 冻结套件64K/128K/256K/440K ./run_deepseek_v4_flash_reproduction.sh # 其它模型 python benchmark_RedKnot_Qwen3_RAG.py python benchmark_RedKnot_Mistral_RAG.py 不同模型族的基准不要直接互相比数字——输入、精度与测量协议不同。完整协议见 test/srt/redknot/README_DEEPSEEK_V4_FLASH.md共享 KV 后端说明见 head_kv README。关键文件导航 文件说明head_config.py四类头型定义与 HeadClassConfig 加载/校验head_profiler.py离线头分析前缀敏感度 边缘质量 → Head Class Maptest/srt/redknot/head_class/各模型冻结的头策略 JSON 发布物segpaged.py按头/段组织的 KV 分页注意力执行test/srt/redknot/基准入口、发布脚本与数据集总结RedKnot 的 Head 分类策略可以浓缩为一句话用离线一次性分析摸清每个注意力头的性格global / local / retrieval / dense让 85% 的局部头走廉价滑窗路径只把在线重算留给真正前缀敏感的少数全局头再用首尾 dense 层兜底质量。这就是它不靠投机、不靠近似精度就能在长上下文 RAG 场景中拿下 2–5× TTFT 加速与 70–90% 算力节省的完整逻辑。✨【免费下载链接】RedKnotEfficient Long-Context LLM Serving with Head-Aware KV Reuse and SegPagedAttention项目地址: https://gitcode.com/gh_mirrors/re/RedKnot创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考