Gemma4-12B 架构

权重与配置:google/gemma-4-12B-it[1]。 实现见 transformers 的 modeling_gemma4.py[2] 与 configuration_gemma4.py[3]。 无技术报告;本页结论均出自 config.json 与框架源码(已 pin commit)。

Gemma4-12B 是 text + vision + audio 的 unified 模型 (Gemma4UnifiedForConditionalGeneration)。它的文本主干延续 Gemma 系列的 局部 : 全局 = 5 : 1 比例,但"全局"(全注意力)层被压得比同类都狠: 只有 1 个 KV 头,而且 K 与 V 共用同一个投影。

Gemma4-12B 逐层架构

图 1|Gemma4-12B 文本主干逐层架构(本图为根据 config.json 与 modeling_gemma4.py 自行绘制,非论文原图)。方向自下而上为前向;每 5 层 滑窗注意力(蓝)接 1 层全注意力(黄),重复 8 次;灰底卡片为 dense FFN。 右侧另列多模态输入分支。注意 12B 是稠密模型,Gemma4 家族的 E4B / E2B 才是 MoE 变体。

1. 配置总览(文本主干)

配置项 取值
hidden_size 3840
num_hidden_layers 48
layer_types 5 ×sliding_attention + 1 ×full_attention,重复 8 次
滑窗层 16 Q / 8 KV 头(GQA 2×),head_dim 256,窗口 1024
全局层 16 Q / 1 KV 头,global_head_dim 512,K ≡ V
hidden_activation / intermediate_size gelu_pytorch_tanh / 15360
归一化 q / k RMSNorm(head_dim 上)+ 无参 v_norm
位置编码 分层:全局 θ=1e6、rope_type proportional、partial 0.25;滑窗 θ=1e4
max_position_embeddings 262 144
vocab_size / tie_word_embeddings 262 144 / true
final_logit_softcapping 30
MoE enable_moe_block = false(12B 稠密)、num_kv_shared_layers = 0
视觉 / 音频 patch 16、280 soft token、3×3 pooling / 嵌入 640 维、每 token 640 采样

2. 5 : 1 的局部 : 全局比例

48 层里只有 8 层是全注意力(约 17%),其余 40 层是窗口 1024 的滑窗注意力。 这个 sliding_window_pattern = 6 的比例来自 Gemma3 的配置默认值 (configuration_gemma3.py 里 sliding_window_pattern 默认 6)[4], Gemma4 只是把窗口从 4096 缩到 1024 [1]。

比例更激进的好处是 KV cache 随序列增长的部分只有 8 / 48 层;代价是长程依赖 全部压在这 8 层上——所以它们的设计必须省得更狠,见下一节。

3. 全注意力层:减头数 + K≡V

Gemma4TextAttention 用 config.per_layer_config[layer_idx] 取本层的 head_dim 与 num_key_value_heads,于是两类层拿到不同的头配置 [2]:

滑窗层 全局(全注意力)层
head_dim 256 512(global_head_dim)
KV 头数 8 1(num_global_key_value_heads)
V 投影 独立 v_proj 不建,直接用 key 当 value

per_layer_config 的构造只对 full_attention 层做覆盖 (configuration_gemma4.py 里按 layer_type == "full_attention" 生成), 且 KV 头的覆盖由 attention_k_eq_v 开关控制 [3]。

代码层面 K ≡ V 是这样落地的:use_alternative_attention = attention_k_eq_v and not self.is_sliding,为真时 self.v_proj 干脆不创建;前向里 value_states = ... if self.v_proj is not None else key_states [2]。 所以全局层的 KV cache 每 token 每个这种层只有 1 个头 × 512 维, 比"16 头 × 512 维"的全注意力小一个数量级——这是 Gemma4 在 5 : 1 比例下 仍能撑住长上下文的关键。

另外 num_kv_shared_layers = 0 [1],即没有启用 Gemma4 里那套 "后续层复用前层 KV"的机制;代码里保留的 is_kv_shared_layer / store_full_length_kv 分支在当前 checkpoint 上不生效 [2]。

4. 归一化与位置编码

  • q / k RMSNorm 作用在 head_dim 上(不是 hidden 维),并且每个 KV 头也 有独立的 v_norm——后者是无参数的 RMSNorm(with_scale=False), 只做幅度归一化、不学习缩放 [2]。
  • RoPE 分层:全局层用 θ=1e6 且 rope_type = proportional、 partial_rotary_factor = 0.25(512 维里只旋转 128 维);滑窗层用默认 θ=1e4 的全旋转 [1]。这与 Spark-X2.5 的分层思路一致,只是具体数值不同。
  • 输出端 softcap:logits 先除以 30、取 tanh、再乘回 30 (final_logit_softcapping),限制 logit 幅度 [1][2]。

5. 多模态分支(unified)

视觉侧是 patch 16 的编码器,经 3×3 pooling 压成 280 个 soft token, mm_embed_dim 3840 与文本主干对齐;音频侧嵌入 640 维、每 token 对应 640 个采样点 [1]。 use_bidirectional_attention = "vision" 表示视觉 token 走双向注意力、 文本 token 保持因果 [1][3]——这一点在 Gemma4TextAttention 里体现为 is_causal = use_bidirectional_attention != "all" [2]。

6. 开源实现位置(pin 到 commit)

transformers commit 536ecc0:

组件 代码位置
Gemma4TextAttention 定义 modeling_gemma4.py#L1151
按层取 head_dim / KV 头 modeling_gemma4.py#L1162-L1163
use_alternative_attention(K≡V 开关) modeling_gemma4.py#L1164
q / k / v RMSNorm modeling_gemma4.py#L1181-L1186
全局层不建 v_proj modeling_gemma4.py#L1188-L1196
V 取 K(K ≡ V) modeling_gemma4.py#L1232
final_logit_softcapping modeling_gemma4.py#L1853-L1856
per_layer_config 构造 configuration_gemma4.py#L210-L223
sliding_window_pattern 默认 6(Gemma3) configuration_gemma3.py#L106-L111

参考文献

[1] Google DeepMind. Gemma 4 12B IT model card[EB/OL]. (2026)[2026-10-11]. https://huggingface.co/google/gemma-4-12B-it/tree/707f0a3b8a3c7ad586ed01e27eafbad8a27dd0f7.

[2] Hugging Face. transformers: modeling_gemma4.py[EB/OL]. (2026)[2026-10-11]. https://github.com/huggingface/transformers/blob/536ecc007387a50e77603bb5d92100e9b07514cc/src/transformers/models/gemma4/modeling_gemma4.py.

[3] Hugging Face. transformers: configuration_gemma4.py[EB/OL]. (2026)[2026-10-11]. https://github.com/huggingface/transformers/blob/536ecc007387a50e77603bb5d92100e9b07514cc/src/transformers/models/gemma4/configuration_gemma4.py.

[4] Hugging Face. transformers: configuration_gemma3.py[EB/OL]. (2026)[2026-10-11]. https://github.com/huggingface/transformers/blob/536ecc007387a50e77603bb5d92100e9b07514cc/src/transformers/models/gemma3/configuration_gemma3.py.


© 2026 Yang Huan · yanghuan9812@qq.com

results matching ""

    No results matching ""