看了三篇主题不一样的文章:

  • Proxy Attn: 对 attn head 进行分组的方法做 sparse attn
  • SGL:用小模型指导大模型 prune visual token
  • Q-VLM:用后训练的方式做网络的 quantization

Proxy Attn (ICLR 2026)

https://arxiv.org/pdf/2509.24745

核心观察:以往的 sparse attention 的逻辑一般都是先给 token 序列分块,每一个块 pooling 然后去计算一个块与块的 importance weight. 这样做的问题是它是比较 course-grained 的,可能如果一个块里面只有一个重要的 token 的话这个块也容易被忽略掉.

Proxy Attn 提出将这个分块不要按照序列分块,而是按照 attention head 分块. 每个 attention head 去 pool 然后计算 importance weight. 依据是观察到每个 head 之间各个 token 的 importance 大差不差,head 之间的差异主要在于 sparsity.

据此,methodology 主要分为两部分:

  • 由于每个 head 之间 token attention importance 大差不差,所以给 head 分成若干个 Group,每个 Group \(g\) 计算出 avg query \(Q^g\) 和 avg key \(K^g\),然后乘起来再 soft-max 得到 attention importance map \(A^g\). 然后 \(A^g\leftarrow softmax(A^g)\). 这里为了节省时间可以设置一个 stride.

    然后由于最后还是要落回块上,所以再用 max-pool 算得每一个块的 importance map.

  • 然后由于各个 head 之间 sparsity 不同,所以要分配不同的 \(k\) 来取 top-K. 我们要给每个块分配一个 budget \(b_g\).

    计算一个 head 的 sparsity:所有块的 query attend to 最后一个块的 key,以此计算出一个每个块的注意力分数 \(\hat a_i\). 归一化后做 Top-CDF,计算 \(b_g\) 表示取最大的 \(b_g\) 个块可以让取出的 \(\sum \hat a_i>\gamma\).

    然后 \(b_g\) 就代表了 sparsity,按 \(b_g\) 为比例,每个 head 取 top-k 即可.

实验:

  • 在注意力计算方面,256k 达到 10x 加速.
  • Time to First Token 2.4x 加速.
  • XAttention 在 Qwen 上有 accuracy degration,但是 proxy attn 比较通用地在不怎么做更改的情况下 migrate 到 Qwen,应该是得益于后面的动态的 online budget estimation

Small Guide Large (CVPR 2025)

https://arxiv.org/pdf/2412.03324

Observation: 像 FastV 这样的 visual token pruning,prune 到 9% 的时候就会表现断崖下降. 他们做了一个实验,先完整 inference,然后用这个作为一个、 oracle 去 prune visual token,表现会显著好很多。于是文章的主要做法是,用一个小模型来充当这样的 oracle 指导大模型如何 prune token.

Methodology:

  • 首先用一个小模型直接跑.
  • 然后对于 prefilling stage,提取 visual token 和 language token 的 cross attention,然后每个 visual token 统计所有 language token & 所有 layer&head 的求和.
  • 对于 decoding stage,则就是对于每个 generated token & layer & head 求和.
  • 然后这两个加起来得到每个 visual token 的权重.
  • 然后取 top p pruning

Early exit:

  • 注意到我们既然已经用小模型跑出来一个结果了。如果这个结果已经足够好了那就不用麻烦大模型重新跑了.
  • 首先计算一个 confidence score,也就是生成的 log-likelihood.
  • 然后计算 consistency score. 这个是通过将 pruned tokens 喂给小模型然后生成的 log-likelihood.
  • Decision score 为这两个 score 取平均. 如果高于一个阈值就直接用小模型的输出. 实验证明这个方法相比于只用其中一个会有所提升.

Experiment:

  • 在裁掉91% token 的时候仍然能保持 95~96 的 score ratio; 相比之下 FastV / ToMe 在裁更多 token 的时候就几乎不能正常工作.

Q-VLM (NIPS2024)

https://arxiv.org/pdf/2410.08119

Post-training 可以只拉来一小部分数据,然后去优化 quantization 的 rounding function (clipping threshold).

训练目标是给每个 layer 决定一个 percentile \(p\),但是如果直接枚举每个 layer 的 \(p\) 就爆炸了;conventional method 是对于每一层分别贪心 quantization,但是这显然是 sub-optimal 的.

Cross-layer dependency:

  • 这篇工作提出可以分块,对于一个块内的 layer 一起优化. 我们需要找到哪些 layer 比较 sensitive.

  • 如何计算 cross-layer dependency? 直接 forward 太慢了,文章提出用条件信息熵的办法,对于相邻两层,

    \(D(k,k+1)=-\sum_{i,j} p(x^q_{k,i,j},x^q_{k+1,i,j})\log p\).

    对于一个给定的 quantization level \(q_1,\dots,q_m\),怎么计算 \(x^q\)? 我们考虑对于 \(x^r\),我们可以计算 \(p(x^q_{k,i,j})=\exp(-(x^r_{k,i,j}-q_m)^2/\Delta)/(\sum_m \exp) [x^q=q_m]\).

    那么一整个块的 D 就是相邻的 D 相加. 如果区间的 D 平均值超过 threshold 就需要划成一块.

Visual-encoder optimization:

  • 文章注意到 visual-encoder 对上面这件事情影响比较大,可以 optimize visual encoder 让上面的事情更快更好.
  • 设置了一些损失项:
    • encoder 对 \(\sum_k D(k,k+1)\) 的 jacobian
    • 量化的 discretization error
  • 然后优化 encoder 参数.

Experiment:

  • 对比了 conventional method 的 AWQ 和 QLora,相比于这两者在 accuracy 上有所提升;另一方面,和 AWQ 一样减少了 inference 耗时,QLora 耗时是增加的.