SAS:端到端优化上下文排名的稀疏注意力机制 · 干货攻略

  • 链接: https://x.com/_akhaliq/status/2099511334987522298
  • 分类: x-tips
  • 来源: X @_akhaliq
  • 作者: Jay
  • 更新: 2026-10-01
  • 仓库: Tencent-Hunyuan/Simple-Attention-Sparsification

这是什么

SAS(Simple Attention Sparsification via End-to-End Optimization of Context Ranking) 是腾讯混元(Hunyuan)团队提出的一种后训练稀疏注意力机制,核心贡献是让选择器(selector)能够直接被语言建模损失端到端反向更新,从而在固定注意力预算下学会最有效地排列和选择上下文块。

解决的问题: 长上下文 LLM 的自回归生成在每个新 token 生成时都要对全部历史 token 做密集注意力,累积成本随上下文长度平方增长。现有可训练的稀疏化方法(如 SeerAttention-R)在 Top-K 硬选择处梯度被阻断,只能靠蒸馏原始模型的逐层密集注意力分布来训练选择器——这造成"排名不对齐":选择器学到的是"原始模型关注哪里",而不是"在固定预算下对最终预测最有价值的上下文是哪些"。

SAS 的核心思路: 在训练时将选择器的连续分数以对数形式注入注意力 logits,保留离散 Top-K 用于高效推理,同时附加连续软门控让梯度从语言建模损失流回选择器,实现端到端优化。

⚠️ 雷达笔记中原帖链接指向 arXiv ID 2609.13942,经核验应为 2609.13141(2026 年 9 月 11 日提交)。


为什么值得关注

@_akhaliq 在 X 上指出这条论文解决了一个长期痛点:稀疏注意力方法之前只能模仿 dense attention 的行为,无法在预算约束下自主学习有效选择。SAS 的端到端训练路线让稀疏选择真正对齐下游任务,是稀疏注意力领域的重要进展。

适用场景: - 长上下文推理(>8K token)需要控制注意力成本的场景 - 已有 Qwen3 系列模型(4B/8B/14B),想在推理阶段减少 KV-cache 计算量 - Agent 场景中需要在大量历史上下文里快速定位关键块

不适用的边界: - 需要从零预训练的新架构——SAS 是后训练方法,需要先有密集预训练模型 - 非 Qwen3 基础模型需自行适配


核验过程

官方来源

  1. arXiv abstract(https://arxiv.org/abs/2609.13141):确认论文标题、作者(Zhiwei Li 等 9 人)、隶属 Tencent Hunyuan + HKUST,摘要关键说法与 GitHub README 完全一致。

  2. GitHub README(Tencent-Hunyuan/Simple-Attention-Sparsification,release 分支):确认训练配方基于 Qwen3 系列,资源需求 8×NVIDIA H20,训练数据集 OpenR1-Math-220k,推理基于 SGLang-blocksparse fork。

  3. HuggingFace 模型页(tencent/Simple-Attention-Sparsification):确认发布 3 个 gate 检查点(Qwen3-4B/8B 各 33.0M 参数/64 MiB,Qwen3-14B 42.0M/81 MiB),SGLang 兼容格式。

  4. arXiv 正文(https://arxiv.org/html/2609.13141v1):确认全部关键数字。

交叉验证结论

说法(原帖/摘要) 官方来源 核验结果
训练资源 8×NVIDIA H20 GitHub README ✅ 确认
Qwen3-4B/8B gate 33M,14B gate 42M HuggingFace ✅ 确认
MATH500 @budget 1024 提升 +6.0–7.7 arXiv 正文 ✅ 确认
GPQA-Diamond @budget 1024 提升 +10.6–15.5 arXiv 正文 ✅ 确认
LongBench 8K+ Qwen3-14B @2048 达 53.9 vs 51.5 arXiv 正文 ✅ 确认
@budget 4096 几乎追上全注意力(56.2 vs 56.6) arXiv 正文 ✅ 确认
BFCL 提升最高 +3.5 arXiv 正文 ✅ 确认
Triton kernel + FlashAttention 集成 arXiv 正文 ✅ 确认

上手步骤

环境准备

SAS 用 pixi(Rust 版 conda 替代品)管理环境,已有的可以跳过安装:

# 安装 pixi(已有则跳过)
curl -fsSL https://pixi.sh/install.sh | bash

# 克隆仓库
git clone https://github.com/Tencent-Hunyuan/Simple-Attention-Sparsification.git
cd Simple-Attention-Sparsification
git checkout release

# 安装依赖 + 子模块
pixi install && git submodule update --init --recursive

下载模型与数据集

# 下载 Qwen3 基础模型(以 4B 为例,可选 8B 或 14B)
# pip install huggingface_hub && huggingface-cli download Qwen/Qwen3-4B --local-dir /path/to/Qwen3-4B

# 下载训练数据集
# huggingface-cli download open-r1/OpenR1-Math-220k --local-dir /path/to/OpenR1-Math-220k

训练选择器门控

export MODEL_PATH=/path/to/Qwen3-4B
export DATA_PATH=/path/to/OpenR1-Math-220k/data

# 选择对应模型大小的脚本
bash scripts/train/simple_sparse_attention_Qwen3-4B.sh

训练在数学数据上进行,选择器学会为每个 query 排列和选择最重要的上下文块。训练完成后产出 AttnGates 目录。

资源:至少 8×NVIDIA H20。GitHub README 明确标注了此资源需求。

推理评测(SGLang 后端)

推理不需要重新训练,只需用 gate 检查点引导稀疏注意力:

# 先构建 sglang-blocksparse 环境(推理用)
cd third_party/sglang-blocksparse && pixi install && cd -

# 数学推理 benchmark
export GATES=/path/to/AttnGates
export BUDGET=2048        # 注意力预算(token 数)
export TP=1 DP=8          # TP=1 横向并行,DP=8 数据并行
export TASK=math,gpqa,aime24,aime25
bash scripts/eval/run_reasoning.sh

# LongBench 长上下文 benchmark
export GATES=/path/to/AttnGates
export BUDGET=2048
export TP=1 DP=8
bash scripts/eval/run_longbench.sh

# BFCL 函数调用 benchmark(需先初始化 submodule 和 venv)
git submodule update --init third_party/gorilla
BFCL=third_party/gorilla/berkeley-function-call-leaderboard
python -m venv $BFCL/.venv && $BFCL/.venv/bin/pip install -e $BFCL soundfile
git -C third_party/gorilla apply "$PWD/scripts/eval/patches/bfcl.patch"

export GATES=/path/to/AttnGates
export BUDGET=2048
export TP=1 DP=8
export CATEGORIES=multi_turn
bash scripts/eval/run_bfcl.sh

使用已发布的 Gate 检查点

不想从零训练?直接用 HuggingFace 上已发布的 gate:

from huggingface_hub import snapshot_download

# 下载 gate 检查点(以 Qwen3-8B 为例)
gate_path = snapshot_download("tencent/Simple-Attention-Sparsification", allow_patterns=["Qwen3-8B-AttnGates/*"])
print(f"Gate checkpoints at: {gate_path}")
# 使用 SGLang 加载方式见仓库文档

坑与适用边界

1. 资源门槛 训练至少需要 8×H20 GPU。评测脚本默认 DP=8,如果 GPU 数量不够需要调整 DP 参数或参考脚本内的单卡模式。

2. 模型范围 当前开源配方仅支持 Qwen3-4B/8B/14B。迁移到其他架构需要自行适配 gate 结构和训练数据。

3. 注意力预算不是 KV-cache 限制 BUDGET 控制的是每个 query 参与计算的 token 数上限,而非 KV-cache 的总量。理解这个区别对调参很重要。

4. 训练数据分布 选择器在 OpenR1-Math-220k(数学)上训练,在 LongBench(长上下文)和 BFCL(函数调用)上评测存在分布迁移。论文结果显示 SAS 在跨分布上泛化良好,但特定领域可能需要领域适配训练。

5. SeerAttention-R 的门控架构 SAS 保留了 SeerAttention-R 的门控架构和评分逻辑(README 致谢部分),区别在于训练目标:不再蒸馏密集注意力,而是端到端语言建模损失。


一句话结论

SAS 通过在对数空间将选择器分数注入注意力 logits,让稀疏选择器能直接被 LM 损失端到端训练,在 Qwen3 系列上以仅 33–42M gate 参数实现比 SeerAttention-R 更高的注意力效率,尤其在低预算场景下提升显著——是长上下文推理压缩的实用后训练方案。