模型架构(Model Architecture)
本分类包含两类内容:
- 横向对比:从
config.json+ 官方实现源码推导结构,把几个"只有模型卡、 没有论文"的模型放在一起比(Spark-X2.5 / Qwen3.5 / Gemma4);
为什么以 config + 源码为准
Spark-X2.5、Qwen3.5、Gemma4 都没有公开发表技术报告(截至 2026-10), 能核实的架构事实只有两类来源:
- Hugging Face 模型卡里的
config.json——超参、layer_types、RoPE 参数; - 随权重发布(或框架内)的
modeling_*.py/configuration_*.py——前向逻辑。
所以本分类的写法是:由配置字段 + 源码行号推导结构,而不是转述论文口径。 凡是只出现在模型卡 / 官方博客里的数字(参数量、benchmark),都单独标注来源, 并注明是官方自测而非第三方复现。
收录条目
| 模型 | 规模 | 上下文 | 模态 | 页面 |
|---|---|---|---|---|
| Spark-X2.5 | 4B / 1.7B | 1M | 纯文本 | 架构详解 |
| Qwen3.5 | 4B(2B / 9B 同构) | 256K | 文本 + 图像 + 视频 | 架构详解 |
| Gemma4 | 12B(E4B / E2B 为 MoE) | 256K | 文本 + 图像 + 音频 | 架构详解 |
每个模型页都有一张逐层架构图(色块区分 attention 类型,实线框表示模块, 嵌套虚线框与 ×n 表示层组的重复范围和次数),三张图取同一套画法,便于对照:
| 模型页 | 逐层架构图 |
|---|---|
| Spark-X2.5-4B | assets/spark-x2.5-4b-architecture.svg |
| Qwen3.5-4B | assets/qwen3.5-4b-architecture.svg |
| Gemma4-12B | assets/gemma4-12b-architecture.svg |
横向对比:Spark-X2.5 / Qwen3.5 / Gemma4
三者共用同一个骨架——少数全注意力层 + 多数廉价层的混合(hybrid)结构—— 差别在三点:廉价层用什么、按什么比例混、全注意力层本身再怎么省。 下表以 Spark-X2.5-4B [1] 的配置为主(1.7B [2] 与它同构,只是层数与 hidden 更小)。
| 维度 | Spark-X2.5-4B [1] | Qwen3.5-4B [3] | Gemma4-12B [4] |
|---|---|---|---|
| 层数 / hidden | 36 / 2560 | 32 / 2560 | 48 / 3840 |
| 廉价层机制 | SWA,窗口 512 | GDN 线性注意力(卷积核 4) | SWA,窗口 1024 |
| 层型配比(廉价 : 全) | 3 : 1 | 3 : 1 | 5 : 1 |
| 全注意力层数 | 9 / 36 | 8 / 32 | 8 / 48 |
| 全注意力 KV 头 / head_dim | 4 / 256 | 4 / 256 | 1(K≡V 共用投影)/ 512 |
| MLP 激活 | GELU(门控,即 GeGLU) | SiLU(门控,即 SwiGLU) | gelu_pytorch_tanh |
| 注意力输出门控 | 逐头 sigmoid 门控 | 逐头门控(q_proj 双倍输出) | 无 |
| QK-Norm | 无 | 有(q / k,作用在 head_dim) | 有(q / k,另加无参数 v_norm) |
| 位置编码 | 分层:全层 θ=5e6 + 部分旋转 0.25;滑窗层 θ=1e4 + 全旋转 | mRoPE,θ=1e7 + 部分旋转 0.25 | 分层:全层 θ=1e6(proportional)+ 部分旋转 0.25;滑窗层 θ=1e4 |
| 词表 | 131072 | 248320 | 262144 |
| 权重共享 | tied(embedding ≡ LM head) | tied(4B) | tied |
| 上下文 | 1,048,576 | 262,144 | 262,144 |
| 模态 | 纯文本 | 文本 + 图像 + 视频 | 文本 + 图像 + 音频 |
| 附带模块 | 融合 QKV 单投影 | 1 层 MTP(推理时忽略) | 输出 logit softcap 30 |
1. 廉价层:滑窗注意力 vs 线性递归
两种"便宜"的路线本质不同:
- SWA(Spark-X2.5 / Gemma4) 仍然是注意力,只是把每个 token 的可见范围截到 固定窗口(512 / 1024)。因此它的 KV cache 有上界但不为零,且每步仍要做 一次窗口内 attention。它省的是"看得少"。
- GDN(Qwen3.5) 是带门控的 Delta 规则线性注意力:每层维护一个
[num_v_heads, k_head_dim, v_head_dim]的递归状态矩阵,逐 token 递推更新 (Qwen3_5GatedDeltaNet[5])。它的"cache"大小与序列长度完全无关, 代价是容量受状态维度限制(多条 key-value 会相互碰撞,见 Gated Delta Network)。它省的是 "记在固定矩阵里"。
一句话:SWA 买的是局部保真,GDN 买的是常数显存。
2. 混合比例:3 : 1 与 5 : 1
Spark-X2.5 与 Qwen3.5 都是每 4 层放 1 层全注意力(全注意力占 25%);
Gemma4 是每 6 层放 1 层(约占 17%)。Gemma4 的比例沿用 Gemma3 的
sliding_window_pattern = 6 默认值 [6]——这是 Gemma 系列的一贯选择,
比前两者更"敢"把长程依赖压给少量全注意力层。
3. 全注意力层本身的三种省法
比例之外,三者对剩下的全注意力层还做了不同程度的削:
- Spark-X2.5:减层数。全注意力层只占 1/4,但层内是完整 GQA (4 个 KV 头 × 256 维),不做额外压缩。
- Qwen3.5:减层数 + 线性化。全注意力层同样只占 1/4,长程开销主要靠 占 3/4 的线性层摊薄;全注意力层自身带 q/k RMSNorm 与逐头输出门控 [5]。
- Gemma4:减层数 + 减头数。全注意力层只占 1/6,且层内把 KV 头压到 1 个
(
num_global_key_value_heads = 1[8]),并让 K 与 V 共用同一个投影 (attention_k_eq_v触发use_alternative_attention,全注意力层干脆不建v_proj[7]),head_dim 反而放大到 512。
三条路线的 KV 削减方向可以概括为:减层数 / 减层数 + 线性化 / 减层数 + 减头数。
4. 模态与上下文
- 模态:只有 Spark-X2.5 是纯文本模型(4B [1] 与 1.7B [2] 同构,只是层数与
hidden 不同)。Qwen3.5 带一个 ViT
(depth 24、patch 16),通过
image_token_id/video_token_id接入; Gemma4 是 text + vision + audio 的 unified 模型(audio 嵌入 640 维、 每 token 640 采样点)。这也意味着 Qwen3.5 / Gemma4 的"4B / 12B"里 含视觉/音频塔的参数,而 Spark-X2.5 的参数全是语言部分。 - 上下文:Spark-X2.5 原生 1M,另两者 256K。但 1M 的 KV 依然很大——
bf16 下 Spark-X2.5-4B 全注意力层在 1M token 就约 37 GB
(估算过程见 Spark-X2.5 详情页),
官方 SGLang 启动示例也把
--context-length 1048576标注为"需要充足显存"。
本页只比较结构,不比较能力。另外 Gemma4-12B 是稠密模型
(enable_moe_block = false),Gemma4 家族里的 E4B / E2B 才是 MoE 变体。
参考文献
[1] XHToken. Spark-X2.5-4B model card[EB/OL]. (2026-09-01)[2026-10-11]. https://huggingface.co/XHToken/Spark-X2.5-4B/tree/0bcb35678590218655dff3765b9e61c83b35e9c4.
[2] XHToken. Spark-X2.5-1.7B model card[EB/OL]. (2026-09-01)[2026-10-11]. https://huggingface.co/XHToken/Spark-X2.5-1.7B/tree/14d6e83c13c7add2b62a7c39b2131f4ed1cddcf8.
[3] Alibaba Qwen Team. Qwen3.5-4B model card[EB/OL]. (2026)[2026-10-11]. https://huggingface.co/Qwen/Qwen3.5-4B/tree/851bf6e806efd8d0a36b00ddf55e13ccb7b8cd0a.
[4] Google DeepMind. Gemma 4 12B IT model card[EB/OL]. (2026)[2026-10-11]. https://huggingface.co/google/gemma-4-12B-it/tree/707f0a3b8a3c7ad586ed01e27eafbad8a27dd0f7.
[5] Hugging Face. transformers: modeling_qwen3_5.py[EB/OL]. (2026)[2026-10-11]. https://github.com/huggingface/transformers/blob/536ecc007387a50e77603bb5d92100e9b07514cc/src/transformers/models/qwen3_5/modeling_qwen3_5.py#L490.
[6] 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#L106-L111.
[7] 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#L1151-L1244.
[8] 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#L210-L223.
© 2026 Yang Huan · yanghuan9812@qq.com