← 全部论文2606.04511v1 / r1
版本与下载

SparDA:稀疏解耦注意力与长上下文推理

原题:SparDA: Sparse Decoupled Attention for Efficient Long-Context LLM Inference
作者:Yaosheng Fu、Guangxuan Xiao、Xin Dong、Song Han、Oreste Villa
版本:arXiv:2606.04511v1,提交于 2026-06-03;研读与获取日期:2026-10-20。
材料:arXiv · 原文 PDF · 英文汇报 PDF · 可编辑 Beamer。以下页码均为从 1 开始的 PDF 页码。

论文总览

SparDA 的核心,是让模型提前给系统提供下一层的访存需求。普通块稀疏注意力要等本层 Query 产生,才能选块、搬运 KV、计算注意力。SparDA 增加轻量的预测投影 Forecast,在第 $l$ 层生成 $\mathbf F_l$,预测第 $l+1$ 层要读取的历史 KV 块。于是系统可以在当前层计算注意力和 FFN 时,预取下一层的数据。

这次解耦还允许索引器采用更小的头结构:每个分组查询注意力(Grouped-Query Attention,GQA)组只用一个 Forecast 头,而实际注意力继续使用原来的全部 Query 头。它同时降低选块成本、创造传输与计算的重叠窗口。新增参数为 33.5M,约占 8B 模型的 0.41%,只训练 Forecast,冻结骨干。(Sec. 4,pp. 4–6)

在两个已经进行过稀疏训练的 8B 模型上,四类基准的平均分相对 Sparse 提高 0.3 和 2.3 分。H100 上,128K 上下文的 MiniCPM4.1-8B 预填充吞吐为 Sparse 的 1.25 倍;同批量解码最高约 1.69 倍。相对不卸载的 Sparse,扩大可运行批量后吞吐达到 5.28 倍,后一个数字包含显存容量带来的批量收益。(Tables 1、3、4,pp. 7–9)

结构地图

原文章节主要作用PDF 定位
1. Introduction稀疏注意力的选块与 KV 容量瓶颈pp. 1–2,Fig. 1
2. Related Work与稀疏选择、压缩及卸载方法的关系pp. 2–3
3. Preliminary / 3.1. InfLLM-V2固定块、局部块、动态块及三级评分p. 3,Eqs. (1)–(2)
4.1. SparDA ArchitectureForecast、跨层选块、首尾层处理pp. 4–5,Fig. 2,Eqs. (3)–(5)
4.2. Indexer TrainingKL 监督、rest bucket、细粒度目标pp. 5–6,Eqs. (6)–(7)
4.3. Efficient Implementation常驻 UVA 内核与 CTA 配额p. 6
5.1. Experimental Setup模型、基准和对照定义pp. 6–7
5.2. Accuracy Results聚合分数与长度外推p. 7,Tables 1–2
5.3. Efficiency Results选块耗时、预填充和解码吞吐pp. 7–9,Fig. 3,Tables 3–4
6. Limitations / 7. Conclusion依赖骨干与扩展方向pp. 9–10
A. Algorithm Pseudocode预填充与解码调度p. 13,Algorithms 1–2
B. Training Details数据、优化和训练预算p. 13,Table 5
C. Evaluation Details注意力预算、位置扩展、评测及硬件pp. 13–15
D. Additional Results消融、A100、各任务细分pp. 15–18,Tables 6–14

一:动机——少读 KV,还要足够早地知道读哪里

长上下文推理有三种不同成本:预填充时注意力计算量大;解码时 KV 读取占用带宽;保存整个历史又占用大量显存。块稀疏注意力减少每次真正参加注意力的 token,但未选中的历史仍可能在未来被需要,因此 KV 存储容量仍随上下文增长。

把完整 KV 缓存卸载(offload)到 CPU 可以腾出显存,但随后出现另一条串行依赖:

$$ \text{本层 Query} \longrightarrow \text{选块} \longrightarrow \text{CPU→GPU 传输} \longrightarrow \text{本层注意力}. $$

只减少传输量,不能消除等待。另一方面,选择器仍要扫描历史压缩键:若每个查询都扫描约 $T/s_{C_1}$ 个位置,预填充整体仍有关于长度 $T$ 的二次项。真正稀疏的注意力变便宜后,选择器本身便可能成为主要成本。(Secs. 1、3,pp. 1–3)

作者将已有两类思路结合起来:像 InfiniGen 一样提前一层发起预取,同时像 DSA 的独立索引器一样,让“选哪些位置”和“怎样计算注意力”使用不同表示。SparDA 的区别在于训练跨层 Forecast,并与块稀疏骨干和常驻传输内核配合。其与 InfiniGen 的比较采用了适配到块选择的版本,具体协议见实验部分。(Sec. 2,pp. 2–3)

SparDA 概念与吞吐示意

原文 Fig. 1,p. 1。先看左侧:传统 Query 同时驱动选块与注意力;中间的绿色 Forecast 跨到下一层。右侧横轴是 batch size,纵轴是解码吞吐;约 1.7 倍对应同批量卸载比较,约 5.3 倍对应不同可行批量之间的比较。

二:方法——把选块变成可以提前调度的预测

2.1 InfLLM-V2 如何产生稀疏访问集合

对第 $l$ 层、第 $i$ 个查询 token,原文 Eq. (1) 定义:

$$ \mathcal B_l(i)= \mathcal B_{\mathrm{init}} \cup\mathcal B_{\mathrm{local}}(i) \cup\mathcal B_{\mathrm{topk}}(i). $$

三项分别保留初始块、附近的滑动窗口、按内容动态选出的远处块。若每块有 $B$ 个 token,则实际注意力每个查询访问约 $|\mathcal B_l(i)|B$ 个 token。(p. 3)

符号含义
$T$、$L$上下文长度、层数
$B$KV 块大小;实验采用 64 tokens,不是 batch size
$H_{\mathrm{kv}}$、$G$KV 头数 / GQA 组数;每组包含的 Query 头数
$d_h$为说明维度引入的每头维数
$\widetilde{\mathbf K}_l$从原始 Key 池化得到的压缩键
$l_{C_1},s_{C_1}$压缩窗口大小和步长
$N_b$压缩键网格的位置数,约为 $T/s_{C_1}$
$f_{\mathrm{top}}(\cdot,k)$把压缩网格分数最大池化到块级,再选择 top-$k$ 块
$\tau$原文定义的标准注意力温度

原选择器分三步:

  1. 压缩键。按重叠窗口做均值池化:

    $$ \widetilde{\mathbf K}_{l,j} =\mathrm{Mean}\!\left( \mathbf K_{l,j s_{C_1}:j s_{C_1}+l_{C_1}} \right). $$
  2. 组内汇总。每个 GQA 组的 $G$ 个 Query 头分别对压缩键打分、做 softmax,再将分数相加。

  3. 块级选择。将压缩网格上的共享分数做最大池化,形成最终块分数,选出动态块。

因此,压缩网格位置与最终 KV 块是两级对象。标准压缩窗口为 $(32,16)$,实际搬运的块为 64 tokens;不能把每个压缩键直接当作一个 64-token 块。(Sec. 3.1,p. 3;App. C,pp. 13–14)

2.2 Forecast:用当前层表示预测下一层的访问集合

原文 Eqs. (3)–(5) 给出核心数据流:

$$ (\mathbf Q_l,\mathbf K_l,\mathbf V_l,\mathbf F_l)=\phi_l(\mathbf X_l), $$
$$ \mathcal B_{l+1} =\mathcal B_{\mathrm{init}}\cup\mathcal B_{\mathrm{local}} \cup f_{\mathrm{top}}\!\left( \mathbf F_l\widetilde{\mathbf K}_{l+1}^{\top},k \right), $$
$$ \mathbf O_{l+1} =\mathrm{Attn}\!\left( \mathbf Q_{l+1}, \mathbf K_{l+1}[\mathcal B_{l+1}], \mathbf V_{l+1}[\mathcal B_{l+1}] \right). $$

$\mathbf F_l$ 决定的是下一层读哪些块,实际注意力的相关性权重仍由 $\mathbf Q_{l+1}$ 计算。略去 batch 维,每个 token 的 Forecast 可理解为 $H_{\mathrm{kv}}\times d_h$,Query 则为 $H_{\mathrm{kv}}G\times d_h$;Forecast 与下一层对应 KV 头的压缩键点积。(Sec. 4.1,pp. 4–5)

基线、预填充和解码的架构

原文 Fig. 2,p. 4。左图是同层依赖;中图在预填充时用上一层的 Forecast 选当前层的块;右图在解码时用当前层 Forecast 选择下一层历史 KV,并将传输安排到独立路径。

提前选块依赖已经缓存的历史 Key。 在自回归解码时,历史 token 在每一层的 KV 都已经缓存。GPU 上保留各层历史 Key 的压缩表示,Forecast 访问的是这个历史索引。初始块和局部块不参与动态候选选择,最新 token 的 KV 位于当前局部区域,因此远处动态块的决策不依赖下一层尚未生成的新 Key。(Sec. 4.1,p. 5)

预填充与解码的获益不同。 预填充仍需先生成当前层整段 Key,随后用保存的上一层 Forecast 评分;这时 KV 已在 GPU,主要收益是简化选择器。解码则能直接利用下一层已有的历史压缩键,真正提前启动 CPU→GPU 预取。

首层没有上一层 Forecast,使用独立的 $\mathbf F_0^{\mathrm{cur}}$ 做同层选择,仍然每个 GQA 组只用一个头。首层 KV 留在 GPU,因此首层不需要等待前一层预取。末层产生的下一层 Forecast 无用途。(Sec. 4.1,p. 5;App. A,p. 13)

2.3 少头、跳过 softmax,改变的是选块成本

多头选择器需要汇总多个头各自归一化后的分数;一个头则可以直接按 logits 排名。对同一个向量,softmax 是保序的;对不相交或重叠候选集合取最大值后,这一单调关系仍保持。因此推理选择路径可以省去 softmax,训练时仍使用它来定义分布,实际注意力内部的归一化也照常进行。(Sec. 4.1,p. 5)

下面是根据机制给出的复杂度解释,忽略池化、top-$k$ 和投影的细节:

$$ \begin{aligned} \text{原选择器的预填充评分}&:\quad O(H_{\mathrm{kv}}G\,T N_b d_h),\\ \text{Forecast 的预填充评分}&:\quad O(H_{\mathrm{kv}}\,T N_b d_h). \end{aligned} $$

$N_b$ 随 $T$ 增长,所以 SparDA 降低了头数等常数开销,未将完整预填充选择变为关于 $T$ 的线性算法。解码只有一个新查询,其评分工作量随历史长度增长;实验中延迟接近水平,是小内核尚未充分占满 GPU 的测量现象。

2.4 用教师选择分布训练 Forecast

目标层 $l$、组 $m$ 的教师与预测分数为原文 Eq. (6):

$$ \mathbf S_{l,m}^{\mathrm{tgt}} =\sum_{h=1}^{G} \mathrm{softmax}\!\left( \frac{\mathbf Q_{l,m,h} (\widetilde{\mathbf K}_{l,m}^{\mathrm{tgt}})^\top}{\tau} \right), $$
$$ \mathbf S_{l,m}^{\mathrm{pred}} =\mathrm{softmax}\!\left( \frac{\mathbf F_{l-1,m} (\widetilde{\mathbf K}_{l,m}^{\mathrm{pred}})^\top}{\tau} \right). $$

教师利用目标层真正的多个 Query 头,学生利用上一层 Forecast 的单个头。首层约定 $\mathbf F_{-1,m}=\mathbf F_{0,m}^{\mathrm{cur}}$。因果屏蔽和初始/局部块排除之后,教师确定监督集合 $\mathcal S_l$,两侧最终形成可比较的 $H_{\mathrm{kv}}\times T\times N_b$ 分数。(p. 5)

Eq. (7) 的目标为:

$$ \mathcal L_{\mathrm{KL}} =\sum_l \mathrm{KL}\!\left( \bar{\mathbf S}^{\mathrm{tgt}}_{l,\mathcal S} \;\middle\|\; \bar{\mathbf S}^{\mathrm{pred}}_{l,\mathcal S} \right). $$

这里横线不是“只留下 top-$k$ 再丢掉其余位置”。它表示 $k+1$ 维分区:教师选中的 $k$ 个位置分别保留,所有其他位置合并为一个 rest bucket,然后重新归一化。教师原始分数是 $G$ 个 softmax 的和,不能直接视作和为 1 的分布;归一化也处理了这一差异。(pp. 5–6)

教学例子:教师分布为 $(0.40,0.30,0.20,0.10)$,选前两个位置;若学生为 $(0.35,0.25,0.15,0.25)$,用于比较的分区分别是 $(0.40,0.30,0.30)$ 与 $(0.35,0.25,0.40)$。学生把过多概率放到集合外,仍会受到惩罚。仅保留前两项再归一化,会丢掉这条约束。

2.5 细粒度教师,粗粒度推理

学生始终用标准 $(l_{C_1},s_{C_1})=(32,16)$ 压缩键;教师改用 $(2,1)$,先在更细的 Key 网格上生成监督分数,再通过最大池化对齐到学生的 $(32,16)$ 网格,之后计算分区 KL。(Sec. 4.2,p. 6)

直觉上,先把 32 个 Key 平均,可能将一个很强的局部匹配稀释。先细粒度评分,再池化分数,更容易保留局部峰值。训练端承担更高分辨率的成本,推理端保留较小的索引。这也解释了为何 Forecast 有机会超过原始参数无关选择器:它接受的监督分辨率更高。

训练用分数网格对齐,与推理中将网格分数池化成最终 KV 块,是不同步骤。文中对监督集合也使用了“blocks”的称呼;实现时需要分别处理压缩位置与实际搬运块,不能仅凭复用的 $k$ 符号将两者混同。

2.6 调度:常驻 UVA 内核与主计算争用资源

按 Algorithm 2,普通中间层的解码顺序可概括为:

  1. 从 $\mathbf X_l$ 得到 $\mathbf Q_l,\mathbf K_l,\mathbf V_l,\mathbf F_l$,追加当前 KV 并增量更新压缩键。
  2. 用 $\mathbf F_l$ 读取 GPU 上的下一层历史压缩键,得到 $\mathcal B_{l+1}$。
  3. 在预取 CUDA stream 发起下一层缺失 KV 块的传输。
  4. 如有必要,等待上一层已发起的当前层 KV 预取完成。
  5. 用当前 Query 计算当前层稀疏注意力和 FFN,同时下一层预取继续执行。

GPU 通过统一虚拟寻址(Unified Virtual Addressing,UVA)从 pinned CPU memory 读取 KV。少量常驻线程块(Cooperative Thread Arrays,CTAs)在一次启动中持续处理搬运任务,减少小块拷贝的启动与同步开销。(Sec. 4.3,p. 6;App. A,p. 13)

更多 CTA 有利于传输,却会占用原本用于注意力和 FFN 的 GPU 流多处理器(SM)。随着 batch 增大,传输量近似线性增长,主计算则可能因占用率改善而次线性增长,最佳资源分配随之改变。H100 的启发式为 batch < 32 用 16 CTAs,其余用 32;A100 的阈值为 64。(Table 7,p. 15)

用一个教学近似可以理解重叠窗口:

$$ t_{\text{串行}}\approx t_{\mathrm{sel}}+t_{\mathrm{transfer}}+t_{\mathrm{compute}}, \qquad t_{\text{重叠}}\approx t_{\mathrm{forecast+sel}} +\max(t_{\mathrm{transfer}},t_{\mathrm{compute}}) +t_{\mathrm{sync}}. $$

该式用于解释流水化收益,未计入所有首尾层和资源争用细节,也不是论文给出的性能定理。若传输远长于计算,重叠后仍有等待;若 batch 很小,额外调度成本又可能超过收益。

三:实验——哪些条件决定比较的含义

3.1 模型、预算与对照

配置在实验中的角色
Dense同一模型的密集注意力配置;效率表中的 Dense$^\dagger$ 全部 KV 常驻 GPU
Sparse原始块稀疏选择器;效率表中无 $\dagger$ 表示 CPU 卸载
Sparse$^\dagger$原始稀疏选择器,KV 全部留在 GPU,用于分离容量收益
InfiniGen无训练的跨层预测对照;适配到块选择,并通过 CPU gather 后传输
SparDA训练 Forecast,加上紧凑索引器和异步预取

MiniCPM4.1-8B 的骨干为 InfLLM-V2;NOSA-8B 在其上增加与 Query 无关的驱逐头,先减少需要保留/访问的 KV,再使用 Query 相关选择。因此 NOSA 预取流量较少,但也有额外计算成本。(Sec. 5.1,pp. 6–7)

两个模型均采用 64-token 块、1 个初始块和 $(32,16)$ 压缩窗口。App. C 将整体块预算写为 96;MiniCPM 的局部窗口为 2048 tokens(32 块),剩余预算用于 Query 相关选择;NOSA 的局部窗口为 1024 tokens(16 块),Query 相关 top-$k$ 明确分配 24 块。这里应保留各分支配额,不能把“整体 96 块”理解成两个模型都另外选择 96 个远处块。附录没有逐项展开初始块是否计入这个总数。(pp. 13–14)

InfiniGen 原本按 token 选择,本文将其近似分数沿 Key 方向按块大小做 max-pooling,再接相同块选择及稀疏注意力内核。其预填充使用 InfLLM-V2,并额外构造部分 Key 缓存。这一对照同时反映了预测方式和当前系统实现的差异。(App. C,p. 14)

3.2 训练条件

Forecast 训练数据为 ProLong-64K;使用 AdamW,学习率固定 $5\times10^{-4}$,weight decay 0.01,$\beta_1=0.9,\beta_2=0.95,\epsilon=10^{-6}$;有效 batch 为 32,训练 2000 个 optimizer steps,BF16 混合精度,梯度最大范数 0.5。只更新 Forecast 投影,新增 33.5M 参数。(Sec. 4.2,p. 5;Table 5,p. 13)

作者使用 32 张 H100:正文称 MiniCPM 在 64K 下 48 小时以内完成,NOSA 在 32K 下 24 小时以内完成。训练长度有一处原文不一致:同页 Table 5 统一列出 65,536 tokens,而表前文字分别写 64K/32K。复现 NOSA 时需要进一步确认实际训练配置。参数增量很小,但长序列教师分布的计算仍需显著训练资源。

3.3 准确率协议

基准检验内容及样本生成与统计
HELMET7 类:recall、RAG、ICL、rerank、citation、long QA、summarization;每类 100 样本原生最大上下文,贪心生成 50–200 tokens;需要模型裁判的任务用 GPT-5.2
LongBench14 个英文任务,涵盖问答、摘要、检索、分类和代码等原生最大上下文,贪心生成,任务上限 32–512 tokens
RULER13 个合成任务,每任务 50 样本,检查不同形式的检索与聚合贪心生成 30–128 tokens;默认原生长度,另测 32K–128K
ReasoningMATH-500:500 题;AIME 2024/2025:各 30 题采样生成,最终答案由 GPT-5.2 判断;报告三套题的平均准确率

原生最大长度分别为 MiniCPM 64K、NOSA 32K。外推时,MiniCPM 使用官方提供的 128K LongRoPE 因子;NOSA 将 rope_theta 从 10,000 改为 40,000,同一模型的所有注意力配置使用相同扩展。(App. C,p. 14)

MiniCPM 仅在 reasoning 打开 thinking,采样 temperature 0.9、top-p 0.95,最多生成 64K tokens;NOSA 不支持 thinking,使用 two-shot 推理示例,temperature 1.0、top-p 1.0,最多 8K tokens。因此应在各自模型内部比较方法,不能把模型间的 reasoning 差值全归因于选择器。

Table 1 的 Avg 是四个基准家族分数的算术平均,并非把所有测试样本合并后算准确率;HELMET、LongBench 包含不同任务评分,宜称“平均分提高多少分”。明确是准确率的 RULER/reasoning 差值,则可用百分点表述。

3.4 效率协议与缓存语义

H100 配置为 80 GB HBM3、CPU–GPU PCIe Gen5×16;A100 为 80 GB HBM2e、PCIe Gen4×16;两套系统均有 2 TB CPU 内存。每个吞吐设置丢弃 1 次 warmup,再平均 2 次测量。预填充固定 batch 4,解码扫描 batch 4–128;吞吐单位是 tokens/s,越高越好。(App. C,pp. 14–15)

所有方法基于 NOSI 推理引擎。引擎默认缓存前一个解码步访问过的块,所以每步主要搬运本次新选中且尚未驻留的块,不能把传输量简单估算为“每层每步把全部选中块重搬一遍”。SparDA 还在 GPU 保存压缩键、首层 KV 和计算所需的缓存/缓冲区;压缩键约为完整 Key 大小的 $1/s_{C_1}$。CPU 承担大部分历史 KV 容量。(pp. 14–15)

四:结果——准确率、选块成本与系统吞吐分别看

4.1 聚合准确率:保持或改善均值,但单任务有取舍

下表取自 Table 1,p. 7;所有分数越高越好。

模型 / 方法HELMETLongBenchRULERReasoningAvg
MiniCPM / Dense41.744.885.382.363.5
MiniCPM / Sparse38.945.078.283.661.4
MiniCPM / InfiniGen33.545.168.483.757.7
MiniCPM / SparDA38.345.178.784.761.7
NOSA / Dense39.342.586.241.652.4
NOSA / Sparse32.242.472.250.749.4
NOSA / InfiniGen28.141.665.247.645.6
NOSA / SparDA33.442.373.957.251.7

MiniCPM 的 Avg 为 61.4→61.7,主要由 RULER +0.5、reasoning +1.1 抵消 HELMET −0.6;NOSA 的 Avg 为 49.4→51.7,主要来自 reasoning +6.5、RULER +1.7、HELMET +1.2。LongBench 两者基本持平。

Dense 在两个模型的 HELMET/RULER 上仍明显更好。作者推测这与评测长度长于稀疏预训练长度有关:MiniCPM 的稀疏预训练为 32K、评测为 64K;NOSA 对应 16K/32K。这是作者对差距的解释,表格本身未单独隔离“训练长度”因素。(Sec. 5.2,p. 7)

细分结果说明“总体接近”包含具体能力上的增减:

  • HELMET:MiniCPM 的 Recall 67.8→61.5,Rerank 14.7→17.0;NOSA 的 Recall 40.9→45.6,但 LongQA 26.9→26.0。(Table 11,p. 17)
  • LongBench:MiniCPM 的 narrativeqa 20.2→22.6,2wikimqa 35.2→34.2;NOSA 的 musique 23.4→24.9,passage retrieval 92.0→90.5。相近均值掩盖了不同任务的方向差异。(Table 12,p. 17)
  • RULER:MiniCPM 的 qa_1 64.0→70.0,但 niah_multikey_3 62.0→56.0;NOSA 对应多键任务 20.0→28.0。难多键检索并未因换索引器而全面解决。(Table 13,p. 17)

Reasoning 的来源更清楚地体现在三个子集:

模型 / 数据集SparseSparDA差值,百分点
MiniCPM / MATH-50097.697.4−0.2
MiniCPM / AIME 202490.086.7−3.3
MiniCPM / AIME 202563.370.0+6.7
NOSA / MATH-50072.271.6−0.6
NOSA / AIME 202440.046.7+6.7
NOSA / AIME 202540.053.3+13.3

来源:Table 14,p. 18。NOSA 的提升主要来自 AIME;每套仅 30 题,+13.3 个百分点约对应多答对 4 题,且这里使用采样生成。三子集等权平均也使 30 题的 AIME 与 500 题的 MATH-500 各占相同权重。

4.2 长度外推:相对优势扩大时,绝对分数仍可能下降

模型 / 方法32K64K96K128K
MiniCPM / Sparse86.178.268.767.7
MiniCPM / SparDA87.678.770.868.8
差值+1.5+0.5+2.1+1.1
NOSA / Sparse72.256.648.840.7
NOSA / SparDA73.960.552.945.0
差值+1.7+3.9+4.1+4.3

来源:Table 2,p. 7;RULER 平均准确率,差值单位为百分点。

Forecast 在所有测试长度均高于 Sparse,NOSA 的优势从 1.7 扩大到 4.3 个百分点。不过 SparDA 的 NOSA 自身仍从 73.9 降到 45.0。结果支持“替换选择器后外推表现较好”,同时显示更长上下文的能力损失仍然明显。

4.3 注意力拆分:更便宜的是绿色选块部分

预填充与解码注意力耗时拆分

原文 Fig. 3,p. 8;MiniCPM4.1-8B、batch 4。横轴为序列长度;左图纵轴为预填充单层耗时(ms),右图为解码单层耗时(μs)。灰色为 Dense;绿色为选块,蓝色为稀疏注意力;斜线纹理表示 SparDA。

128K 时,作者报告预填充选块部分加速最高 2.50 倍;解码选块成本下降超过 2 倍。相同长度下蓝色部分接近,吻合“主要优化选择路径”的设计。

原文 p. 7 将预填充的稀疏注意力耗时描述为随长度大致不变,但 Fig. 3(a) 的蓝色柱段实际随长度增长。这里按图解释为相同长度下两方法的稀疏注意力成本相近,不将其理解为整段预填充注意力成本与长度无关。右图近乎平坦的 Forecast 选择延迟,则由作者解释为 GPU 尚未充分利用。

4.4 预填充:长上下文的收益来自索引器

H100、batch 4 的关键结果如下,单位 tokens/s。(Table 3,p. 8)

模型 / 方法32K64K128K
MiniCPM / Dense$^\dagger$20388.313673.78085.8
MiniCPM / Sparse18548.416254.413661.8
MiniCPM / SparDA19845.618379.517087.6
NOSA / Dense$^\dagger$20438.913701.08118.0
NOSA / Sparse12778.311359.29805.2
NOSA / SparDA13456.012386.111332.7

MiniCPM 从 64K 起吞吐领先所有对照,128K 时相对 Sparse 为 $17087.6/13661.8=1.25$ 倍,相对 Dense 为 2.11 倍。NOSA 从 96K 起领先,128K 相对 Sparse 为 1.16 倍。短上下文下 Dense 仍可能更快。

128K 的 MiniCPM 中,Sparse$^\dagger$ 为 13676.1,Sparse 为 13661.8,差别很小。预填充的 KV 使用后可异步回写 CPU,因此此阶段的主要收益是选择器变轻,而非下一层 CPU→GPU 预取。

4.5 解码:同批量加速与容量带来的吞吐增益

下面节选 H100、128K 的 Table 4(p. 9),单位 tokens/s。

模型 / 方法Batch 4Batch 8Batch 16Batch 64
MiniCPM / Dense$^\dagger$108.6OOMOOMOOM
MiniCPM / Sparse$^\dagger$189.5OOMOOMOOM
MiniCPM / Sparse167.8279.5447.9788.9
MiniCPM / InfiniGen51.866.585.6OOM
MiniCPM / SparDA240.2471.2705.31000.1
NOSA / Sparse$^\dagger$179.3OOMOOMOOM
NOSA / Sparse173.2285.4529.21298.3
NOSA / InfiniGen77.5105.2131.7OOM
NOSA / SparDA219.0399.3735.01463.3

同批量、同为卸载:MiniCPM batch 8 为 $471.2/279.5=1.69$ 倍;NOSA batch 8 为 $399.3/285.4=1.40$ 倍。这最接近“改换索引与调度,在同样并发量下能快多少”的问题。

各方法可行批量下的吞吐:MiniCPM 的 SparDA batch 64 与 Sparse$^\dagger$ batch 4 相比为 $1000.1/189.5=5.28$ 倍;对 Dense$^\dagger$ batch 4 为 9.21 倍。5.28 倍不代表单请求延迟缩短到约五分之一。

容量充足时的取舍:在 32K、MiniCPM batch 16,Sparse$^\dagger$ 为 1073.0,SparDA 为 918.5;无需卸载的 GPU 常驻路径仍有优势。NOSA 在 32K、batch 4 时,SparDA 214.7 也低于 Sparse 244.0,说明小批量的预取调度成本可能抵消收益。

显存仍有长度依赖:96K 时 Sparse 可运行 batch 128,而 SparDA 因首层完整 KV 留在 GPU,在该批量 OOM;SparDA batch 64 的峰值吞吐仍高于 Sparse batch 128。压缩键、首层缓存和工作缓冲意味着这种卸载并未把 GPU 内存需求变成与长度无关。(Sec. 5.3,pp. 8–9)

InfiniGen 的低吞吐,作者主要归因于 CPU gather 后再传输的瓶颈;其准确率下降则归因于相邻层隐藏状态代理不够准确。两种退化对应不同环节,不能只用其中一个解释所有结果。

4.6 消融:准确率改善来自哪里,异步预取何时必要

监督分辨率。 固定学生/推理窗口为 $(32,16)$,只改变教师压缩窗口:

模型 / 教师窗口RULERReasoning四家族 Avg
MiniCPM / $(32,16)$75.782.560.4
MiniCPM / $(2,1)$78.784.761.7
NOSA / $(32,16)$71.455.450.1
NOSA / $(2,1)$73.957.251.7

来源:Table 6,p. 15。MiniCPM 的 RULER +3.0、reasoning +2.2;NOSA 为 +2.5、+1.8 个百分点。尤其是 MiniCPM 粗粒度教师的 Avg 60.4 低于原始 Sparse 的 61.4;因此准确率结果不能只归功于“加一个跨层线性投影”,教师设计是完整方案的关键部分。

选块与预取拆开。 H100、128K 的解码消融如下;“不预取”仍保留 Forecast 选择器,但同步读取 KV。(Table 10,p. 16;tokens/s)

模型 / 方法Batch 4Batch 16Batch 64
MiniCPM / Sparse167.8447.9788.9
MiniCPM / SparDA 不预取247.3505.9696.9
MiniCPM / 完整 SparDA240.2705.31000.1
NOSA / Sparse173.2529.21298.3
NOSA / SparDA 不预取226.5653.01063.8
NOSA / 完整 SparDA219.0735.01463.3

batch 4 时,简化索引器已能带来明显收益,异步流水线反而有少量开销。batch 64 时,不预取版本在两个模型上均低于 Sparse;完整 SparDA 相对不预取分别快 43.5% 和 37.6%。这说明在高吞吐区间,仅有便宜索引还不够,必须把通信藏进计算窗口。

CTA 配额。 H100、MiniCPM、32K 的 Table 7 显示,batch 16 时 16 CTAs 为 918.5 tokens/s,64 CTAs 降至 737.3;batch 64 时则 64 CTAs 达到 1380.2,高于 16 CTAs 的 1255.9。启发式在 batch 64 采用 32 CTAs,得到 1328.0,距该列最佳低约 3.8%。它是简单的资源折中,并非每个配置下的精确最优。(p. 15)

4.7 A100:方向一致,通信重叠收益较小

A100、128K 条件SparseSparDA吞吐倍率
MiniCPM 预填充,batch 46299.27756.81.23×
NOSA 预填充,batch 44717.15477.51.16×
MiniCPM 解码,batch 8195.1303.31.55×
NOSA 解码,batch 16395.6526.31.33×

来源:Tables 8–9,pp. 15–16;吞吐单位 tokens/s。索引器的预填充收益在 A100 上仍存在;解码最高同批量收益低于 H100 对应的 1.69/1.40 倍。两个硬件配置同时改变 GPU 计算能力、HBM 与 PCIe 代际,因此这些表支持跨硬件有效,不能单独用来量化 PCIe 代际的因果贡献。

五:结论——让稀疏性尽早暴露访存计划

SparDA 最有启发的设计,是将选块结果视为可以提前生成、交给运行时调度的信号。Forecast 用较小的头结构生成这条信号,细粒度教师使其保持可用的选择质量,常驻 UVA 内核再把“早知道”转化成“早搬到”。消融显示这三个部分各有作用。

对于部署,关键判断是上下文长度、可容纳的 batch、实际缺失块流量与可重叠计算窗口是否匹配。当 KV 可以舒适地全部留在 GPU 时,原稀疏路径可能更快;当长上下文限制并发量时,CPU 卸载的容量收益与 Forecast 的调度收益可以叠加。论文最醒目的 5.28 倍,正是后一种设置。

方法仍依托已有的块稀疏骨干。其块结构与注意力计算规则得到保留,但具体选中的动态块会变化,因此任务分数既能提高也能下降。作者将其描述为受骨干稀疏质量限制的增强模块;实验中相对 Dense 的长检索差距仍然存在,这一限制很具体。(Sec. 6,p. 9)

论文也提出扩展到 DSA/CSA 的 token 级选择和更大模型。这是后续方向,本篇直接证据来自两种基于 InfLLM-V2 的 8B 模型。对研究而言,值得继续验证的是:不同骨干能否学到同样可靠的跨层访问预测,以及更多层的提前量能否在预测误差、缓存占用和可隐藏传输时间之间取得更好的折中。

组会讨论

  1. 固定同样的 GPU 驻留缓存预算,怎样分别量化“选得更好”“选得更早”和“上一步块复用”的贡献?
  2. 若下一层与当前层相差较大,Forecast 需要更强的非线性表达,还是细粒度教师已足够?
  3. 真实请求的长度与 batch 动态变化时,CTA 数量、预取深度和缓存保留策略能否共同自适应?

这些问题由本次分析提出,用于进一步理解机制,不是论文已完成的实验。