经验观察:LLaVA 中, 第 2 层之后视觉 token 的 attention 权重急剧下降—— 它们已经把信息"喂"给开头几层。 FastV 在第 $k$ 层之后按 attention 分数选 top-$K$ 视觉 token 保留, 其余丢掉。 45% FLOPs 削减、几乎不掉点。
视觉 token 90% 是冗余
典型 VLM 一张 $336^2$ 图就 576 token;AnyRes 高分辨率下 1080p = 数千 token。 Prefill 几乎全花在视觉部分, decode 时它们也参与 attention——可它们 90%+ 是背景。 本部按 "视觉 token 专属招 → 通用加速机制 → 系统部署" 组织: §10.1-§10.4 是视觉 token 维度的招(剪枝 / 合并 / 动态分辨率); §10.5-§10.10 是 LLM 那边的 6 大机制在 VLM 上的体现; §10.11-§10.12 给 LLM-移植对照、未解决问题。
- §10.1视觉 token 的痛
- §10.2视觉 token 剪枝 · 浅层抛弃
- §10.3token 合并 / 摘要
- §10.4原生动态分辨率
- §10.5解码加速 · specdec / parallel / block-diff
- §10.6Attention 架构 + KV 压缩 · SSM / hybrid / KV-Capsule
- §10.7量化 · joint quant+prune / 低秩近似
- §10.8MoE · 模态/任务专家
- §10.9测试时算力 · 多模态 reasoning
- §10.10Serving · 多模态 disaggregation
- §10.11LLM 加速思想 → VLM 移植对照
- §10.12VLM 还没解决的
§10.1视觉 token 的痛 · 算力被一张图吃掉了
典型 VLM(LLaVA-1.5 / Qwen2-VL / InternVL2.5): 一张 $336^2$ 图 → ViT 分 14×14 patch → 576 视觉 token。 高分辨率("AnyRes",动态切 tile)下,一张 1080p 图 = 数千 token。 这些 token 90%+ 是冗余背景。 Prefill 几乎全花在视觉部分,decode 时它们也参与 attention。
| 模型 | 视觉 token 数 | 分辨率 |
|---|---|---|
| LLaVA-1.5 | 576 | 336×336 |
| LLaVA-NeXT (AnyRes) | 2880 | up to 1344×336 |
| InternVL 2.5 (dynamic tile) | up to 12800 | up to 4K |
| Qwen2-VL (NaViT) | ~3000 typical | natively any |
| Qwen2.5-VL · 视频 N=16 帧 | ~30000 | 任意 |
| NVIDIA Nemotron Nano V2 VL | 动态 + Mamba 压缩 | any |
| DeepSeek-OCR | ~256 / page (高密度) | document-optimized |
当文本 prompt 才几十 token、视觉 token 几千上万时, 整个 LLM 都在为图像服务。视觉 token 也要走 80 层 transformer、 也要写 KV cache——它们和文本 token 没区别,但承载的信息密度低 10×。
(1) 视觉 token 维度: 剪 / 合 / 缓存视觉 token, 让它"少而精"——这是 VLM 独有的招(§10.2-§10.4)。
(2) LLM 维度: VLM 仍然是个 LLM, 所有 LLM 加速(spec / 量化 / MoE / 测试时算力 / serving)都适用——
每条都有 VLM-specific 适配 (§10.5-§10.10)。
§10.2视觉 token 剪枝 · 浅层抛弃
最朴素的招:浅层之后丢掉冗余视觉 token, 让后续 LLM 层只算文本 + 关键视觉。 2024 年 FastV / VTW 开了头, 2026 H1 涌现了一波10+ 篇变种。
# FastV: 在第 k 层之后, 按累计 attention 分数选 top-R 视觉 token
def fastv_layer(x, layer, layer_idx, vision_token_mask, k=2, keep_ratio=0.5):
out, attn_w = layer(x, return_attn=True)
if layer_idx == k:
score = attn_w[:, :, ~vision_token_mask][:, :, :, vision_token_mask].sum(dim=(0,1,2))
n_keep = int(vision_token_mask.sum() * keep_ratio)
keep_idx = score.topk(n_keep).indices
out = drop_tokens(out, keep_idx, vision_token_mask)
return out
2026 H1 剪枝家族 · 一张大表
| 工作 | 关键想法 | arxiv |
|---|---|---|
| GRIP-VLM | Group-Relative Importance Pruning, 用组内相对重要性 | 2605.13375 |
| ERASE | Adaptive 两阶段 token pruning | 2605.09982 |
| F³A | Scaling laws for visual token pruning ("How many visual tokens?") | 2605.16359 |
| RTPrune | "Reading-Twice" inspired, 针对 DeepSeek-OCR 优化 | 2605.00392 |
| LearnPruner | Rethink attention-based pruning | 2604.23950 |
| DocPrune | 文档问答场景: 区分背景 / 问题 / 理解 | 2604.22281 |
| ST-Prune | Spatio-Temporal pruning for AD VLM | 2604.19145 |
| VisPCO | Budget-Aware Pareto-Frontier Learning 配置 token 预算 | 2604.15188 |
| SVD-Prune | Training-Free, 用 SVD 选 token | 2604.11530 |
| Decoupled Similarity | Task-Aware, 解耦 text-image 相似度 | 2604.11240 |
| ASAP | Attention-Shift-Aware Pruning | 2603.14549 |
| FastOCR | Dynamic Visual Fixation for Document Parsing | 2605.17447 |
路线分化清晰: (a) attention-score 派 (FastV, ASAP, FastOCR); (b) similarity / SVD 派 (Decoupled Similarity, SVD-Prune); (c) task-aware 派 (DocPrune, ST-Prune, RTPrune); (d) learning-based 派 (LearnPruner, VisPCO with Pareto); (e) scaling-law 研究 (F³A)。
§10.3token 合并 / 摘要 / 跨步缓存
剪枝是抛弃; 合并是压缩信息到更少 token; 缓存是跨 step 复用。 这一节是 §10.2 的补集。
两步: (1) dominant token — ViT 内 [CLS] 对 patch 的 attention 选 top-N; (2) contextual merge — 剩余聚成 N_ctx 个 cluster, 用簇心代表。 LLaVA-1.5 上 8× 加速, 零成本 (无需 LLM 重训)。
# VisionZip 的两步骤
def visionzip(vision_tokens, attn_weights, n_dominant=64, n_contextual=32):
score = attn_weights.mean(dim=(0,1,2)) # [n_patches]
dominant_idx = score.topk(n_dominant).indices
dominant = vision_tokens[:, dominant_idx]
remain = vision_tokens[:, ~one_hot(dominant_idx)]
contextual = kmeans_means(remain, n_contextual)
return torch.cat([dominant, contextual], dim=1)
SparseVLM: 让 text query 选哪些视觉 token "值得留"——比 FastV 更 task-aware。 FrameFusion: 视频 VLM 里跨帧合并相似 token——30k token 砍到 5k。
跨 step 的 KV 压缩——视觉 token 的 K 与 V 用不同压缩率(asymmetric), 类似 KIVI(§3.2)但针对 VLM 视觉 token 的 K/V 分布特性。 在多轮对话场景把 VLM KV 体积砍到 30%。
长上下文 VLM 的 KV eviction 与精细 layout 优化—— 把 §3.3 LLM 的 KV 驱逐思想本地化到 VLM 的视觉-文本混合 KV。
长视频 VLM 的跨帧 token reduction。 Stateful Token Reduction 维护一个 stateful summary; TimeViper 用 hybrid Mamba-Transformer。 跨 §10.3 与 §10.6。
§10.4原生动态分辨率 · 别再做 336×336 padding 了
传统 ViT 强制方形 + 单一分辨率。 NaViT (Google 2023) 提出"packed sequence": 多张图打包到一条 sequence 里,按各自原始分辨率 patch 化, 用 2D RoPE 编码位置。 Qwen2-VL 把这套 batch 化进 VLM—— 1080p 输入用 1080p token 数,缩略图用缩略图 token 数。 再叠 FastV / VisionZip 是上述"按需 token"工程的最终形态。
2D RoPE · 位置不再是 1D 索引
普通 RoPE 把位置编码成一个 1D 索引 $p \in \mathbb{Z}$,作旋转角度。 对图像 patch 这不够——上下和左右是不同的轴。 2D RoPE 把 head_dim 拆两半,一半承载 $p_h$ 维(高度),一半承载 $p_w$ 维(宽度)。
# 2D RoPE: head_dim 拆成 (d_h_pos, d_w_pos)
def apply_2d_rope(q, k, h_pos, w_pos):
d_half = q.shape[-1] // 2
q_h, q_w = q[..., :d_half], q[..., d_half:]
k_h, k_w = k[..., :d_half], k[..., d_half:]
q_h, k_h = rope_1d(q_h, k_h, h_pos)
q_w, k_w = rope_1d(q_w, k_w, w_pos)
return torch.cat([q_h, q_w], dim=-1), torch.cat([k_h, k_w], dim=-1)
§10.5解码加速 · specdec / parallel / block-diffusion
VLM 的 specdec 是 2026 H1 最热的小 sub-field—— 视觉 token 长 prompt 意味着 prefill 很贵, decode 阶段又是 memory-bound, 双重瓶颈天然适合 specdec。
第一个系统性 benchmark VLM specdec 的工作。 揭示视觉 token 的特殊性:drafter 容易在视觉 token 上"看错", 接受率比纯文本低 10-15%。 成为后续 VLM specdec 工作的基线。
关键洞察:visual tokens 让 drafter 难学准。 Sparrow 让 drafter "锚" 在 text token 上, 仅 "glimpse" 视觉 token—— 把 drafter 注意力锁定在文本侧, 接受率回到 LLM 水平。
用预测熵动态调整 drafter 步数: 高熵 (不确定) → 多 propose;低熵 → 少 propose, 避免浪费。 VLM 上比 fixed-K specdec 加速多 ~25%。
端云协同:drafter 在 edge device 跑 (低延迟), verifier 在 cloud 跑 (大模型质量)。 把 specdec 和 P/D 解耦合一起做, 是 VLM 部署的新思路。
SpecEyes: agentic 多模态 LLM 的 "speculative perception + planning"—— 让 agent 推测下一观察, 减少实际 vision encode 次数。 TABED: Test-Time Adaptive Ensemble Drafting, 动态切换 drafter。
把 AR VLM 转成 block-diffusion VLM——并行 NFE + KV cache 兼容。 本质和 BlockVLA (§11.5) 同一思路, 但聚焦 VLM 通用场景。
§10.6Attention 架构 + KV 压缩 · SSM / hybrid / capsule
VLM 的 attention 因为视觉 token 多, 平方代价更狠。 SSM / linear attention / KV 压缩都有 VLM 专属工作。
NVIDIA 的开源 hybrid Mamba-Transformer VLM。 把 SSM 用在视觉 token 序列上—— 视觉 token 数千个时, Mamba 的 $O(N)$ 比 attention $O(N^2)$ 优势明显。 第一个 production-ready hybrid VLM。
长视频 VLM 场景: Mamba 处理时间维, Transformer 处理空间维。 比 dense attention 30× 快, FVD-style 长视频任务 SoTA。
用 Mamba 替换 CLIP 的 Transformer encoder—— 证明 SSM 在 image-text 对齐预训练上也有效。 后续 VLM 可以"Mamba ViT + Transformer LM"或反过来。
Selective State Space Memory 把 Mamba 的 selective scan 用作 VLM 的 long-context memory。 Vision Inference Former 是 2026-05 的最新工作, 维持多模态视觉一致性。
VLM KV 压缩
观察 attention 模式在 prefill / decode 间的shift, 据此动态剪 KV。 VLM 跨 prefill-decode 边界的 KV 优化。
跨 §10.3 + §10.6——既是 token 合并的延伸, 又是 KV 压缩的实现。 Asymmetric K/V reduction 是 VLM-specific 设计。
§10.7量化 · joint quant + prune · 低秩近似
VLM 量化最有意思的方向是联合 quant + token pruning—— 视觉 token 既要压精度, 又要减数量。
第一个把 quant 和 token pruning 联合设计的 VLM 工作。 Trade-off frontier 上比"先 quant 后 prune" 或 "先 prune 后 quant" 都好。
类似 SVDQuant (Diff §9.6), 把权重拆"低秩 + 残差", 残差走 INT4。 在 VLM 上的 SVDQuant 等价物。
量化 + MoE 的杂交—— side experts 走不同精度, router 根据任务选 precision-budget。 跨 §10.7 + §10.8。
§10.8MoE · 模态 / 任务专家
VLM 的 MoE 自然按"模态/任务" 路由—— vision-heavy 任务 / text-heavy 任务 / 跨模态任务走不同 expert。
Modality-guided routing: vision tokens / text tokens 倾向不同 expert。 Soft routing (不是 hard top-K)—— 专门为 VLM 的 modality imbalance 设计。
Visual feature 与 expert affinity 决定哪些 expert 上 GPU、哪些 offload CPU。 把 MoE offloading 思想(LLM 那边 expert offload 已有)VLM 适配。
8B MoE-VLM 开源 tech report—— 展示 MoE-VLM 已经进入工业级开源规模。
DIMoE: Dynamic Expert Evolution for Continual Learning VLM——VLM lifelong learning 的 MoE 解。 Sparse Spectral LoRA: 把 LoRA 做成 MoE adapter, 用于医疗 VLM。
MoE-VLM 的负面研究: router 容易被视觉 token 分心, 导致选错 expert。提出 routing-aware loss 修正。 重要的"路由病"诊断。
§10.9测试时算力 · 多模态 reasoning
LLM 的 o1 已经把 test-time compute 推到主流; VLM 端版本是 "在视觉理解难时多想一会"。
把"多模态 reasoning" (类 o1) 蒸馏成可部署小模型。 数据 pipeline + 训练配方完整开放, 是 VLM 端 test-time compute 商业化的关键工作。
在推理时动态调 prompt + 路由 MoE expert—— 既增 robustness 又利用 test-time compute。
在长视频 VLM 上用 posterior probing 动态分配算力—— 简单帧少算, 难帧多算。跨 §10.9 与 WM §12.9。
黑盒 VLM (闭源 API) 上的 test-time compute—— 用 hint generation 在不能改模型的情况下提升性能。
§10.10Serving · 多模态 disaggregation
VLM 服务结构: image encode (ViT) → text+image prefill → text decode。 三个阶段算力 / 显存特性不同, 天然适合 P/D / EPD 解耦。
多模态生成 / 推理通用 serving 框架——VLM 是核心受益者。 Encoder / Prefill / Decode 三段独立 scale。
客户端 (浏览器 / 移动) VRAM-受限场景的 VLM 推理。 通过 model partitioning + memory swapping 让 7B VLM 在 4GB 显存跑。
任务特化 serving 路径—— FastOCR 针对 document parsing; "Starve to Perceive" 针对 visual bandwidth-constrained scenes。
§10.11LLM 加速思想 → VLM 移植对照
和 VLA (§11.12) / WM (§12.12) 同款 4 张分类表。 特别注意:VLM 是 VLA 的 backbone, WM 是 VLA 的世界知识来源—— 三章移植表互相 cross-reference。
① 视觉 token 维度 · VLM 独有
| 方向 | VLM 状态 |
|---|---|
| 剪枝 | ✓ FastV, VisionZip, SparseVLM; 2026 wave: GRIP-VLM, ERASE, F³A, RTPrune, ASAP, ST-Prune, VisPCO 等 ~10+ 篇 |
| 合并 / 摘要 | ✓ VisionZip dominant+contextual; FrameFusion 跨帧 |
| 跨 step KV 压缩 | ✓ ★ KVCapsule (2605.16439), Make Each Token Count (2605.09649) |
| 动态分辨率 | ✓ NaViT / Qwen2-VL 原生 |
| 联合 quant + prune | ✓ ★ (2604.17320) 第一个 joint |
② 解码加速类(对应 §10.5)
| LLM trick | 所在节 | VLM 状态 |
|---|---|---|
| Speculative decoding | §4.1-§4.4 | ✓ ★ MMSpec benchmark, Sparrow text-anchor, SAGE entropy-guided, CoVSpec edge-cloud, SpecEyes agentic, TABED ensemble |
| Block-diffusion VLM | — | ✓ ★ Fast-dVLM (2604.06832) |
| Early-exit / 跳层 | §4.4 | ○ 半空白 — VLA 端有 DeeR-VLA, VLM 端跨用相同思路 (FastV 浅层抛 token $\approx$ partial early-exit) |
| MTP (Multi-Token Prediction) | §4.4 | ○ 半空白 — 未见专门 VLM MTP head |
③ Attention / KV 类(对应 §10.6)
| LLM trick | 所在节 | VLM 状态 |
|---|---|---|
| SSM / Mamba / 线性 attention | §2.6 | ✓ ★ NVIDIA Nemotron Nano V2 VL (2511.03929), TimeViper hybrid, CLIMP, Selective SSM |
| NSA / sparse attention | §2.6 | ○ 半空白 — ASAP 是attention-shift 剪 KV 的近邻; 严格 NSA-VLM 还没 |
| Hybrid linear + softmax | §12.6 | ✓ TimeViper (Mamba 时间 + Transformer 空间) |
| MLA latent KV | §3.1 | ○ 萌芽 — KVCapsule asymmetric 是 VLM-style 的近邻 |
| KV eviction (StreamingLLM 类) | §3.3 | ✓ Make Each Token Count (2605.09649), Make LVLM KV Lightweight (2605.00789) |
④ 量化 · MoE · 测试时算力 · Serving(对应 §10.7-§10.10)
| LLM trick | 所在节 | VLM 状态 |
|---|---|---|
| PTQ (GPTQ / AWQ) | §5.2-§5.3 | ✓ 通用 LLM 量化直接适用; WSVD 是 VLM 适配 SVDQuant |
| Joint quant + token prune | — | ✓ ★ VLM 独有 (2604.17320) |
| FP4 / NVFP4 | §5.1 | ○ 半空白 — Blackwell 卡刚到, VLM 端适配中 |
| MoE per-modality experts | §6.3 | ✓ ★ SMoES soft modality routing, VisMMOE offloading, ZAYA1-VL-8B, DIMoE continual |
| Test-time compute (o1 类) | — | ✓ OmniThoughtVis (2605.11629) 可部署 reasoning 模型; TAME, Test-Time Hinting |
| Continuous batching | §7.1 | ○ 半空白 — Cornserve / vLLM-Omni 已部分支持 |
| P/D / EPD disaggregation | §7.5 | ✓ Cornserve / vLLM-Omni / EPD-Serve 三家 |
| Edge-cloud co-inference | — | ✓ CoVSpec (2605.02218) — 把 specdec 与 P/D 结合 |
| RadixAttention prefix 共享 | §3.4 | ○ 半空白 — 多对话共享 system prompt + image 完全可以做 |
| CUDA Graph + torch.compile | §13.1-§13.2 | ✓ 部署默认 |
VLM 解决了视觉 token, VLA 接手把它接到动作, WM 把它推到视频生成。 所以 VLM 的加速工作经常被 VLA / WM 直接 inherit: FastV / VisionZip → ETA-VLA (VLA 视觉 token 剪枝); KVCapsule → VLA-Cache; SMoES → MoE-ACT; MMSpec → HeiSD / KERV; Cornserve → 全多模态通用。
最值得做的 VLM 真空地带: ① NSA-VLM(视觉 token 长 sequence 上的可训练稀疏 attention); ② MLA-VLM(视觉 latent KV 压缩); ③ VLM-RadixAttention(多对话共享 system prompt + 同图像 prefix); ④ VLM MTP(专门的 VLM 多 token 预测 head)。
§10.12VLM 还没解决的
站到 2026-05,把 VLM 推理 / 训练栈仍空着的坑显式列出来:
- 视觉 token 数量的"原生"控制—— FastV / VisionZip 都是 post-hoc 剪枝; 把"视觉 token 数量"作为模型可控参数(input-budget aware)的 SoTA 还没出现。 F³A (2605.16359) 在 scaling laws 上起步, 但 actionable 设计还没。
- NSA-VLM—— 视觉 token 几千上万个, 是稀疏 attention 最直接的应用场景, 但目前只有 ASAP 这种 attention-shift 的近邻方案, 没有真正的 trainable sparse attention for VLM。
- MLA-VLM 视觉 latent KV—— 和 MLA-Video / MLA-VLA 一样空白。 KVCapsule asymmetric K/V 是萌芽。
- 多对话 VLM serving 的 prefix 共享—— 多用户问同一张图的不同问题, 视觉 prefill KV 完全可以 share, 但 RadixAttention-VLM 没人做。
- 跨模态评估指标—— VLM 的"reasoning" benchmark (MMMU / MMVet / OlympiadBench) 与 OmniThoughtVis 蒸馏出的 deployable 模型之间存在 gap, 缺更好的 metric。
- "Seeing but Not Thinking" 揭示的路由病—— MoE-VLM router 容易被视觉 token 分心, 现在只有事后修正, 需要更原生的解。
- 动态分辨率 + 量化 + 剪枝三联用—— 每个都有 SoTA, 但三者协同设计的 production-ready 解还没有。