长文档放得进去,不代表生成时的显存和延迟也能接受。这篇先用 Gemma 3 的 local / global attention 把这笔账算清,再看 3n 和 4 改了哪些地方。想先懂原理,读到缓存算例就够;准备选模型,可以接着看版本区别与评估方法。
先分清 Gemma 3 的几个尺寸
Gemma 3 的一个关键选择是:多数层只读取附近的 token,少数层读取完整历史。它减少了长上下文的缓存需求,但不是让长上下文免费,也不是每个型号都支持图像。
先认准型号:官方型号列表中的 Gemma 3 270M / 1B 是文本模型;4B / 12B / 27B 支持图文输入。前两者的上下文为 32K,后三者为 128K;输入和生成内容共用这份长度预算。Gemma 3 model card
先看长上下文的账
flowchart TB
A["文本;支持视觉时可加图像"] --> B["输入表示"]
B --> C["局部层:附近的 token"]
C --> D["全局层:可见的完整历史"]
D --> E["后续 decoder 层<br/>预测下一个 token"]
这是推理路径;teacher 不在这条路径里。Gemma 3 报告采用每五个局部层接一个全局层的安排,局部窗口为 1024。下面缩小数字来理解它,不复刻某个 checkpoint。报告 §2
一层看不到,不代表多层都看不到
假设只有八个位置,编号 0–7,因果窗口宽度为 3,包含当前位置。位置 7 在一层里直接读取 5、6、7,读不到 4。但上一层的位置 5 已经能读取 3、4、5,所以再叠一层,位置 7 就有了接触 3、4 的间接通路。
| 位置 7 的计算 | 能影响它的原始位置 |
|---|---|
| 一层 local attention | 5、6、7 |
| 两层 local attention | 3、4、5、6、7 |
| 一层 causal global attention | 0–7 |
这说明的是计算图里“有路可走”,不是远处的信息一定被保留下来。信息经过多次混合,具体还记住多少要用任务检验。反过来,一个全局层也不是只给附近窗口贴标签:它可以直接读取完整的可见历史。
六层的缓存,差多少?
自拟一个六层模型:五层 local、一层 global;每层有 8 个 KV heads,每头 128 维,K/V 用 BF16。一个请求已经有 32768 个位置,local 层仅保留最近 1024 个。各层的每个缓存位置需要 2 × 8 × 128 × 2 = 4096 bytes。
- 全部 global六层各存 32768 个位置。768 MiB
- 五层 local + 一层 global五份短缓存,加一份完整缓存。148 MiB
- 长到 131072 个位置local 缓存不再增长,global 仍会增长。532 MiB
展开计算,自己改长度试试
对这个没有跨层共享、各头等宽的算例,记 $T$ 为历史长度、$W$ 为 local 窗口,$L_l,L_g$ 为两类层数:
$$ M_{\mathrm{KV}}=2B H_{\mathrm{KV}}d_h b\,[L_l\min(T,W)+L_gT]. $$
$B$ 是请求数,$b$ 是单个数的字节数;最前面的 2 对应 K、V。下面默认 $B=1$,其余数值与图一致。
def mixed_cache_mib(tokens, local_layers=5, global_layers=1, window=1024):
positions = local_layers * min(tokens, window) + global_layers * tokens
bytes_per_position = 2 * 8 * 128 * 2
return positions * bytes_per_position / (1024 ** 2)
assert mixed_cache_mib(32768) == 148
assert mixed_cache_mib(32768, local_layers=0, global_layers=6) == 768
assert mixed_cache_mib(131072) == 532
assert mixed_cache_mib(512) == 12
这个结果有实现前提:local 层需要真正回收或覆盖窗口之外的缓存。若程序只是加 attention mask,却仍为每层分配完整长度的 K/V,显存不会自动降到这个数。图中也没有权重、分块浪费、临时张量或图像编码器(encoder);它是存储量算例,不是 GPU benchmark。
还要分开看 prefill 与 decode。理想窗口实现中,local 层的 attention 工作量随 $T W$ 增长,而全局层仍可能随 $T^2$ 增长;decode 时则分别读取至多 $W$ 和 $T$ 个历史位置。投影、FFN 和实际 kernel 速度需要另算。
结构之外,还要看什么
- 窗口限制的是直接读取范围。 多层仍能传播信息,全局层提供更直接的远距离通路;不要把“少看一些历史”写成“和全局 attention 一样,只是更便宜”。
- 图像也要花预算。 Gemma 3 的视觉编码器把一个图像视图(view)压成 256 个视觉 token;Pan & Scan 可以增加裁剪视图。读整页小字时,缩图可能丢掉线索,多看裁剪又会增加工作量。报告 §2.1、§5.5
- 蒸馏(distillation)不是必须等预训练(pre-training)结束才做。 报告的预训练就使用 teacher 分布,后训练也使用蒸馏信号。teacher 的偏差可能被继承,但没有一般定理保证 student 每项能力都不超过 teacher。报告 §2.2、§3
再看 Gemma 3n 和 4:哪些不能照搬?
截至 2026-10-10,不能再把 Gemma 3 的配置当作这个家族的完整介绍。下面是阅读较新型号时最有用的区别,不是所有衍生版本的目录。
| 版本 / 分支 | 先看什么 | 为什么影响选型 |
|---|---|---|
| Gemma 3n | MatFormer、per-layer embeddings(PLE)、按需加载模态组件 | E2B / E4B 的 effective 参数不等于下载文件里的总参数 |
| Gemma 4 E2B / E4B | 较小的有效参数规模、文本 / 图像 / 音频输入 | 要核对运行时如何存放 PLE 和模态组件 |
| Gemma 4 12B Unified | 图像 patch 和音频块直接投影到 decoder 输入 | 不能沿用“外接一个 SigLIP encoder”的结构图 |
| Gemma 4 26B A4B | MoE:约 3.8B active,不是总权重只有 4B | active 参数有助于估算计算量,不能直接当权重显存 |
| Gemma 4 31B | Dense,文本 / 图像输入 | 不要因为同属 Gemma 4 就假定它也接收音频 |
版本依据:3n 官方说明、Gemma 4 型号与模态表。effective、active、total 是不同口径。例如一份教学假设里的 26B 权重,如果全部以 BF16 常驻,就约有 52 GB(十进制)的原始权重;每个 token 只激活约 4B,并不会把剩下的权重文件变没。
Gemma 4 的 E2B / E4B 还在层间共享 KV cache,报告给出的共享比例分别是 20/35 和 18/42;因此上面的“两份 K/V × 每层各存一份”只是独立缓存的基线(baseline),不能直接当 Gemma 4 的显存计算器。共享是模型结构的一部分,不是推理时随意删一半缓存。Gemma 4 报告 v2(2026-07-24)§2
同样,支持 thinking mode 不代表回答越长就越好。比较时固定任务和工具权限,分别记录输出预算、成功率和延迟;不能拿一个开 thinking 的版本与另一个关闭的版本,仅凭总分推断架构收益。怎样在相同计算下比较,见测试时计算:怎么比较、怎么读数字。
取舍表
| 选择 | 得到什么 | 付出什么 |
|---|---|---|
| 较多 local attention | 在窗口缓存 / kernel 正确实现时,减少长上下文开销 | 跨窗口信息传播更间接 |
| 周期性 global attention | 保留长距离交互 | 全局层仍然昂贵 |
| 视觉输入 | 图文任务与 grounded understanding | 更多 token、延迟和模态冲突 |
| 蒸馏 | 学到 teacher 对多个候选(candidate)的相对偏好 | teacher 覆盖不足或有偏差,仍需独立评估 |
拿一个实际任务试试
例如做一个“从设备说明书找出正确接线方法”的助手,先别只问它能否放进整份 PDF。可以按下面的顺序做一组小实验:
| 改什么 | 观察什么 | 不能急着得出的结论 |
|---|---|---|
| 把关键段落移到开头、中间、结尾 | 答案与引用是否仍然正确 | 一次找对,不代表所有长文任务都没问题 |
| 原图、遮住关键接线图、替换为另一型号的图 | 答案是否随视觉证据合理变化 | 遮图后下降只能说明依赖某些图像信息,不直接证明理解了全部细节 |
| 保持任务不变,增加无关页数 | 首 token 延迟、缓存与成功率 | 能接收更多页,不等于仍能准确整合 |
| 固定型号,比较部署精度或裁剪预算 | 峰值显存、吞吐与错例 | 权重变小,不等于所有推理成本同比下降 |
保留一组没参与调参的说明书。每次记录 checkpoint、processor / chat template、输入和输出长度、缓存实现与设备。这些是建议做的实验;本站只验证了上面的算术,没有运行 Gemma 模型或复现厂商性能。
自检
- local attention 为什么能降低成本,又为什么不会立刻切断全局信息?
- 视觉 token 对上下文和延迟有什么影响?
- 怎样验证模型真的看了图,而不是猜文本先验?
- 蒸馏提升小模型时,为什么仍需要独立评估?
- 为什么 A4B、E4B 和总共 4B 不能混着算显存?
继续读:KV cache · MoE 的系统代价 · 蒸馏。
原始资料
- Gemma 3 Technical Report
- Gemma: Open Models Based on Gemini Research and Technology
- Gemma 3n 官方说明
- Gemma 4 Technical Report
本页术语 6
- 编码器 encoder
- 把原始输入压成向量的那一半模型
- 视图 view
- 同一个对象的一种侧面表示;用户可以同时有画像视图和历史视图
- 蒸馏 distillation
- 用一个模型的输出训练另一个通常更小的模型
- 预训练 pre-training
- 先用大量数据学习通用表示和能力,再适配具体任务
- 基线 baseline
- 用来比较新方法的参考方法或配置
- 候选 candidate
- 召回阶段捞出来、等待精排挑选的内容