Gemma 4 全变体解析:五个尺寸的性能、效率与选型
Gemma 4 全变体解析:五个尺寸的性能、效率与选型
站内搜索
直接问 AI

Gemma 4 全变体解析:五个尺寸的性能、效率与选型

Gemma 4 一口气放出了五个尺寸:E2B、E4B、12B Unified、26B A4B 和 31B。名字里的字母不是版本号,是三种不同的架构手段,直接决定了哪个变体适合你的机器。这篇把五个变体的架构差异、官方 benchmark、真实体积和显存占用摊开讲,最后给一份按显存分档的选型建议。

体积数字全部是从 HuggingFace API 查到的真实文件字节数,benchmark 全部来自官方模型卡。显存占用那部分是我在一台 8G 显卡的笔记本上实测的,会标注清楚哪些是实测、哪些是外推。

名字里的字母各是什么意思

E = effective,有效参数

E2B 和 E4B 里的 E 指「有效参数」。这两个模型用了 PLE(Per-Layer Embeddings):不是给模型加层或加宽,而是给每个解码层配一张自己的小 embedding 表,每个 token 在每层都能查到一份专属向量。

关键在于这些表只用于查表,不参与矩阵运算。所以官方给出两个参数量:E2B 是 2.3B 有效 / 5.1B 含 embedding,E4B 是 4.5B 有效 / 8B 含 embedding。计算量按有效参数走,存储按含 embedding 走。

这个设计的实际后果,会在后面「体积陷阱」一节变得非常具体——它既是 E 系列能在手机上跑的原因,也是它的量化版本大得离谱的原因。

Unified = 没有独立编码器

其他 Gemma 4 模型处理图片和音频时,要先过一个专门的编码器,再把结果送进语言模型。12B Unified 把这些编码器整个去掉了:图像 patch 和音频波形通过轻量线性层直接投影进 LLM 的 embedding 空间,所有模态汇进同一个 decoder-only transformer。

好处有两个:多模态延迟更低,以及整个模型可以一次性微调,不用分阶段处理编码器。代价是它没有独立编码器带来的那部分专用能力——不过从 benchmark 看,视觉指标并没有掉队。

顺带一提,这也解释了 12B 的多模态投影文件为什么特别小:其他变体的 mmproj 有 0.9 到 1.1 GiB,12B 只有 0.17 GiB,因为它本来就没有要单独加载的编码器。

A4B = 激活参数只有 4B

26B A4B 是这一代唯一的 MoE 模型:总参数 25.2B,但推理时只激活 3.8B。128 个专家里每次选 8 个,外加 1 个共享专家。

意思是它的速度接近一个 4B 模型,质量接近一个 26B 模型。官方的说法是「比稠密的 31B 快得多,跑起来几乎和 4B 一样」。代价是显存要按 25.2B 准备——专家权重全都得在显存里待命,你没法预测下一个 token 会路由到哪几个专家。

27B 和 32B 去哪了

从 Gemma 3 过来的人经常会找 27B——那是上一代的旗舰。Gemma 4 没有 27B,也没有 32B。官方仓库里能查到的 Gemma 4 尺寸标识只有五个:e2be4b12b26b-a4b31b

大致的对应关系是:上一代 27B 那个位置,这一代拆成了两个方向。想要吞吐就用 26B A4B(MoE,激活只有 3.8B,跑起来像 4B 模型);想要最强质量就用 31B(稠密,60 层)。1B 和 4B 这两个小尺寸则被 E2B / E4B 取代,用 PLE 换来了更好的参数效率。

所以如果你在找「Gemma 4 27B」,要么是记成了上一代,要么你想要的其实是 26B A4B 或 31B 中的一个。

架构参数对照

属性 E2B E4B 12B Unified 26B A4B 31B
总参数 2.3B 有效
5.1B 含 embedding
4.5B 有效
8B 含 embedding
11.95B 25.2B 总
3.8B 激活
30.7B
层数 35 42 48 30 60
滑动窗口 512 512 1024 1024 1024
上下文 128K 128K 256K 256K 256K
词表 262K 262K 262K 262K 262K
模态 文本 / 图像 / 音频 文本 / 图像 / 音频 文本 / 图像 / 音频 文本 / 图像 文本 / 图像
视觉编码器 约 150M 约 150M 无(Unified) 约 550M 约 550M
音频编码器 约 300M 约 300M 无(Unified) 不支持 不支持

有两行值得单独拎出来。

音频只有 E2B、E4B、12B 支持。这条经常被忽略:如果你的场景涉及语音转写或语音翻译,26B 和 31B 直接出局,哪怕你显存够。也就是说,「想要音频 + 想要最强性能」这个组合的上限是 12B Unified,往上没有选项。

滑动窗口 512 vs 1024。E 系列的窗口只有一半,加上部分层直接共享上层的 KV,这两点合起来让 E 系列的 KV cache 增长极慢。实测 E4B 从 8K 开到 128K 上下文,KV 只涨了约 1.1 GB。同尺寸没有这些设计的模型,涨幅是好几倍。长上下文场景下这是个被低估的优势。

官方 benchmark

以下数字来自官方模型卡,均为指令微调版本。最后一列是上一代 Gemma 3 27B(关闭思考)作为参照。

基准 31B 26B A4B 12B Unified E4B E2B Gemma 3 27B
MMLU Pro 85.2% 82.6% 77.2% 69.4% 60.0% 67.6%
AIME 2026(无工具) 89.2% 88.3% 77.5% 42.5% 37.5% 20.8%
LiveCodeBench v6 80.0% 77.1% 72.0% 52.0% 44.0% 29.1%
Codeforces ELO 2150 1718 1659 940 633 110
GPQA Diamond 84.3% 82.3% 78.8% 58.6% 43.4% 42.4%
Tau2(三次平均) 76.9% 68.2% 69.0% 42.2% 24.5% 16.2%
BigBench Extra Hard 74.4% 64.8% 53.0% 33.1% 21.9% 19.3%
MMMLU(多语言) 88.4% 86.3% 83.4% 76.6% 67.4% 70.7%
MMMU Pro(视觉) 76.9% 73.8% 69.1% 52.6% 44.2% 49.7%
MATH-Vision 85.6% 82.4% 79.7% 59.5% 52.4% 46.0%
MRCR v2 128K 长上下文 66.4% 44.1% 43.4% 25.4% 19.1% 13.5%

断层在哪

把这张表按「哪一档掉得最狠」重读一遍,比看绝对分数有用。

推理类任务在 12B 和 E4B 之间有一道悬崖。AIME 从 77.5% 掉到 42.5%,Codeforces ELO 从 1659 掉到 940,BigBench Extra Hard 从 53.0% 掉到 33.1%。这不是渐变,是断崖。多步推理需要模型在长链条上保持一致,这个能力对规模的依赖远比知识检索强。所以如果你的任务是解数学题、写有一定复杂度的代码、或者跑多步 agent,E 系列基本不在候选范围内——不管你多想省显存。

知识和多语言类任务的坡度平缓得多。MMLU Pro 从 77.2% 到 69.4%,MMMLU 从 83.4% 到 76.6%。翻译、摘要、分类、问答改写这类任务,E4B 的表现是可用的。我自己把 E4B 接进沉浸式翻译做网页翻译,日常读英文资料完全够。

E4B 全面超过上一代 27B,但不是每一项。AIME 42.5% vs 20.8%、Codeforces 940 vs 110,进步巨大。但 MMLU Pro 是 69.4% vs 67.6%,MMMLU 甚至是 76.6% vs 70.7%——知识面上的领先没有推理上那么夸张。一个 4.5B 有效参数的模型在推理上碾压上一代 27B,主要归功于训练方法而不是架构。

26B A4B 是性价比最高的一档。MMLU Pro 82.6%、AIME 88.3%,离 31B 只差一点,但推理速度接近 4B 模型。它明显掉队的只有两处:长上下文(MRCR 44.1% vs 66.4%)和 HLE(8.7% vs 19.5%)。前者说明 MoE 在超长上下文上的检索一致性还是弱于稠密模型,后者是极难题的天花板差距。日常任务里这两项都不常触及。

体积陷阱:参数量算不出显存

这是选型时最容易翻车的地方。我第一次做选型表就是按「参数量 × 位宽」估的,结果整张表都是错的。

下面是从 HuggingFace API 查到的真实权重文件总字节数,换算成 GiB:

变体 bf16 QAT W4A16 q4_0 GGUF mmproj
E2B 9.54 7.75 3.12 0.92
E4B 14.89 10.72 4.80 0.92
12B Unified 22.28 9.56 6.50 0.17
26B A4B 48.07 13.45 1.11
31B 58.25 21.67 16.44 1.12

盯着 QAT 那一列看。E4B 的 W4A16 是 10.72 GiB,而参数量是它三倍的 12B Unified 只有 9.56 GiB。如果你按「参数少的一定更小」去选,会挑到一个又大又弱的模型。

原因在 QAT 检查点的配置里写得很清楚:

{
  "quantization_config": {
    "config_groups": {
      "group_0": {
        "targets": ["Linear"]
      }
    }
  }
}

targets: ["Linear"]——只量化线性层,embedding 层原封不动保持 bf16。对普通模型这没什么,embedding 占比不高。但 E 系列的 PLE 表本身就有 2.8B 参数(E4B),这一大块完全没被压缩,直接把量化后的体积撑了上去。

GGUF 的 q4_0 就没这个问题,它连 embedding 一起量化,E4B 降到 4.80 GiB。这也是为什么小显存机器上应该走 GGUF + llama.cpp,而不是 QAT 权重 + vLLM。

顺带说清楚一件事:vLLM 不是「更好的引擎」,它是给显存充裕的机器准备的。它的优势在批处理吞吐和并发调度,不在体积。单人自用、显存紧张的场景,llama.cpp 是更合适的选择。

GGUF 的文件体积也不等于显存占用

还有一层。E4B 的 q4_0 文件是 4.80 GiB,但实际进显存的只有 2.2 GiB 左右。

因为 llama.cpp 把 PLE 表和 token embedding 留在了系统内存里。这两块加起来是:

PLE 表      = 词表 262144 × 层数 42 × PLE 维度 256 = 2.82B 参数
token embd  = 词表 262144 × hidden 2560           = 0.67B 参数
合计 3.49B 参数,在 GGUF 里约占 2.6 GiB

PLE 表本来就只用于查表,放在内存里按需读取完全合理——GPU 不需要拿它做矩阵乘法。但结果是:如果你按 GGUF 文件大小去估显存,会凭空多算 2.6 GB。在一张 8G 卡上,这足以让 E4B 被误判成跑不了,而实际上它跑得很轻松。

我在一台 8G 显存的笔记本上实测过 E4B q4_0(llama.cpp Vulkan 后端,KV cache 量化到 q8_0):

上下文 实测显存 说明
8K 2.90 GiB 纯文本,未加载 mmproj
32K 4.25 GiB 含 mmproj
64K 4.54 GiB 含 mmproj
128K 5.14 GiB 含 mmproj,满上下文

128K 满上下文加图片输入,一张 8G 卡还剩接近 3 GB 余量。吞吐是 63 到 66 tok/s。这个结果和「E4B 的量化版本有 10.72 GiB」形成的直觉落差,正是这一节想说明的问题。

按显存怎么选

把上面的数字合起来,得到这样一份分档建议。假设用 q4_0 GGUF + llama.cpp,KV 量化到 q8_0,留出显示输出占用:

显存 建议 理由
4 GB E4B(上下文压到 64K) 扣掉 PLE 后上卡权重只有 2.16 GiB,比想象中能塞。想要更多余量再退回 E2B。
6 GB E4B 能开满 128K。翻译、摘要、日常问答够用,别指望它解数学题。
8 GB E4B + 图片输入 实测 128K 满上下文加 mmproj 共 5.14 GiB,还剩近 3 GB。吞吐 63–66 tok/s。
12 GB 12B Unified q4_0 权重 6.50 GiB,能开到 32K。这是推理能力断崖的上沿,也是支持音频的最强变体。
16 GB 12B Unified(可上 W4A16) 能开到 64K。26B A4B 在这一档只是勉强装下,上下文要压到 8K,不划算。
24 GB 26B A4B q4_0 权重 13.45 GiB,能开满 128K。MoE 的吞吐优势从这一档开始真正发挥。
32 GB 31B q4_0 权重 16.44 GiB,能开到 64K。追求最强推理和长上下文一致性时选它。
48 GB+ 31B W4A16 不必再靠 4bit 压体积,上下文能开到 128K 以上。

这些是粗略分档。具体到你的卡、你想要的上下文长度和并发数,可以直接用显存计算器算——它把上面所有的体积数字、PLE 扣减和 KV cache 结构都编了进去,公式拿这四个实测点校准过。

三个不在 benchmark 里的实用细节

E2B 和 E4B 关不掉思考模式。官方模型卡写得很直白:除 E2B 和 E4B 外的所有模型,关闭思考后仍会生成标签但思考块为空。E 系列不吃这一套。如果你要接沉浸式翻译这类对延迟敏感、且不需要推理过程的场景,得在 API 层做处理,靠 chat_template_kwargsenable_thinking: false,而不是指望模型自己收敛。

滑动窗口模型必须开 flash attention。不开的话 prompt 处理速度会掉到个位数——我实测过一次 39.6 tok/s 的 prompt processing,加上 --flash-attn on 之后才恢复正常。这不是可选优化,是必需项。

llama.cpp 的 --ctx-size 是总量,要除以 --parallel默认 parallel 是 4,所以写 --ctx-size 16384 实际每路只有 4096。想要每路 16K 就得写 65536,KV cache 也会按 65536 分配。这个默认值坑过不少人。

小结

五个变体的定位其实相当清晰:E2B/E4B 是边缘设备和小显存的选项,能做语言任务但推理能力有硬上限;12B Unified 是推理能力的起跳点,也是支持音频的天花板;26B A4B 用 MoE 换来了接近 31B 的质量和接近 4B 的速度,是消费级显卡上性价比最高的一档;31B 在长上下文一致性和极难推理上仍有不可替代的领先。

选型时真正容易出错的不是性能判断,而是体积判断。参数量算不出显存,量化格式的体积经常和直觉相反,GGUF 的文件大小也不等于显存占用。这三层认知差每一层都能让人选错模型——第一层让你以为小模型一定省显存,第二层让你在 E4B 和 12B 之间选反,第三层让你以为 8G 卡跑不了 E4B。

所以查真实字节数,然后实测。

延伸阅读

发表回复

向下探索