架构拆解:配置文件里的答案
权重公开后补写的一章——92 层、3:1 的 Gated DeltaNet 与门控注意力混排、512 个专家选 10 加 1 个共享专家。逐项读 config.json,用算术核对 2.4T 与 95B,并对照上一章的推断:哪些对了、哪些错了。
架构拆解:配置文件里的答案
本章写于 2026 年 9 月,是专栏的补写。 官方权重 8 月 9 日上传、8 月 12 日在 Hugging Face 公开(仓库 Qwen/Qwen3.8-2.4T-A95B),附带模型卡与 config.json;9 月 19 日又按仓库的修改记录与官方博客做了补充。上一章《MoE 与混合注意力》写于权重发布之前,本章保留它的原貌,并在末尾逐条对照。
先说清楚这份权重是什么
模型卡开门见山地交代了三件事:
- 这是后训练之后的模型,Transformers 格式,vLLM、SGLang、TokenSpeed 等推理框架可以直接加载;
- 它只支持文本、必须开启思考,不接受多模态输入;
- API 上的 Qwen3.8-Max 是基于它的官方版本,多了视觉输入、非思考模式、默认 1M 上下文和官方内置工具。
所以严格地说,开放的是 Qwen3.8-Max 的文本主干,不是 API 产品的全部。9 月 2 日之后还要再加一句:API 换成了继续后训练的 0902 快照,这份权重对应的是 8 月的原版。开源那一章会回到这一点。
公开前的三处修改
Hugging Face 的提交记录还留下了一个细节:权重 8 月 9 日上传后、12 日公开前,仓库改过三处配套文件,权重文件本身没有重传。
| 日期 | 改动 |
|---|---|
| 8 月 10 日 | 对话模板删掉了图像、视频占位符的处理,并改成“关闭思考就直接报错”——首日上传的模板原本支持看图,也支持非思考模式 |
| 8 月 11 日 | 补上模型卡 |
| 8 月 12 日 | config.json 删掉 mrope_interleaved 与 mrope_section 两个字段(多模态旋转位置编码的设置,同系列能看图的 27B 与 Flash-Next 的配置里都有);随后补上许可 |
改完之后,配套文件与模型卡的说法一致了:开放权重只收文本、必须思考。至于首日的文件为什么带着多模态和非思考的设置,官方没有解释;一个自然的猜测是它们沿用了 API 版的配置,但这只是猜测。
总体布局
| 项目 | 数值 | 来源 |
|---|---|---|
| 架构类 | Qwen3_5MoeForCausalLM(model_type: qwen3_5_moe_text) | config |
| 层数 | 92 | config / 模型卡 |
| 隐藏维度 | 8192 | config |
| 词表 | 248,320(含填充),输入与输出不共享权重 | config |
| 层排布 | 23 ×(3 × Gated DeltaNet → 1 × 门控注意力),每层之后接 MoE | 模型卡 / layer_types |
| 原生上下文 | 262,144,可外推到 1,010,000 | 模型卡 |
| 权重精度与总量 | BF16,共 2,446,182,725,504 个参数 | Hugging Face 元数据 |
model_type 里的 qwen3_5 印证了模型卡里的那句话:它建立在 Qwen3.5 的架构基础之上。第一章记录过这条第三方说法,当时“未见官方确认”,现在确认了。
混合注意力:线性与全注意力 3:1
config.json 的 layer_types 是一个 92 项的列表,规律一眼可见:三个 linear_attention 接一个 full_attention,重复 23 次(full_attention_interval: 4)。也就是 69 层线性注意力、23 层全注意力。
线性注意力层用的是 Gated DeltaNet:
| 参数 | 数值 |
|---|---|
| 值头数 | 128 |
| 键 / 查询头数 | 16 |
| 头维度 | 128(键、值相同) |
| 短卷积核 | 4 |
| 递推状态精度 | FP32(mamba_ssm_dtype) |
全注意力层是带输出门的标准注意力:
| 参数 | 数值 |
|---|---|
| 查询头 / 键值头 | 64 / 4(GQA,16 个查询头共用一组键值) |
| 头维度 | 256 |
| 旋转位置编码 | 只作用于 64 维(partial_rotary_factor: 0.25),rope_theta 为 1000 万 |
| 输出门 | 开启(attn_output_gate: true,swish 门) |
Gated DeltaNet 加门控注意力、3:1 混排、部分维度旋转位置编码——这和 Qwen3-Next 公开过的设计是同一路数。这一点现在有官方的说法:8 月底的 Flash-Next 博客写道,Qwen3-Next 引入的这套混合结构,此后用在了 Qwen3.5、3.6、3.7 与 3.8 系列上。用意很直接:让大部分层的“记忆”不随上下文变长而增长。
算一笔账就明白。KV 缓存只在 23 层全注意力里随长度增长,每个 token 占:
(23 层 × 4 个键值头 × 256 维 × 键和值两份 × BF16 两字节。)
| 上下文 | 全注意力层的 KV 缓存 | 假如 92 层全是全注意力 |
|---|---|---|
| 262,144(原生) | 约 23 GiB | 约 92 GiB |
| 1,010,000(外推上限) | 约 89 GiB | 约 354 GiB |
线性注意力层维持的是固定大小的递推状态。按 Gated DeltaNet 的标准形状估算,每层每条序列是 128 个值头 × 128 × 128 个 FP32 数,约 8 MiB,69 层合计约 0.54 GiB——不管上下文是一千还是一百万个 token,都是这么大。
这就是“混合”的全部意义:四分之三的层把长上下文的代价压成常数,剩下四分之一保留精确回看的能力。 纯线性注意力在“从很远的地方精确取回一个细节”这类任务上吃亏,全注意力层就是为此保留的。
MoE:512 个小专家
| 参数 | 数值 |
|---|---|
| 路由专家数 | 512 |
| 每 token 激活 | 10 个路由专家 + 1 个共享专家 |
| 专家中间维度 | 2048(只有隐藏维度的四分之一) |
| 共享专家中间维度 | 2048 |
| 负载均衡辅助损失系数 | 0.001 |
| MTP(多 token 预测) | 1 个额外的 MTP 层;模型卡称训练时预测了多步 |
两点值得注意。
一、专家很“细”。 每个专家的中间维度只有 2048,是隐藏维度的四分之一。512 个小专家里挑 10 个,走的是细粒度路线。
二、共享专家回来了。 Qwen3 那一代曾主动去掉共享专家,理由是收益不明显;到了 3.8,每层又带上了一个。技术报告没有发布,这个取舍背后的实验我们看不到——只能记录“它回来了”这个事实。
用算术核对 2.4T 与 95B
有了配置,就能验算官方的两个数字。按 SwiGLU 专家(gate、up、down 三个矩阵)计算:
- 每个专家:3 × 8192 × 2048 ≈ 5033 万参数;
- 主干 92 层的路由专家:512 × 5033 万 × 92 ≈ 2.371T;
- MTP 层自带一套 512 个专家:约 258 亿;
- 剩下约 496 亿:注意力(线性与全注意力)、共享专家、输入输出词表、路由器等。
三项加起来,正好是 Hugging Face 记录的 2,446,182,725,504。主干的路由专家就占了总参数的 97%,连同 MTP 层的专家约 98%。
激活参数这边:每个 token 经过 10 + 1 个专家,92 层合计约 509 亿;注意力层每个 token 都要走,按配置推算约 400 亿;再加输出层与路由器,约 933 亿。若按惯例把输入词表也计入,约 954 亿——与官方的 95B 对上了。
这组数字揭示了一件官方材料没提的事:95B 激活参数里,专家只占一半多一点,另外四成左右在注意力层。 原因是它的注意力很“宽”:线性注意力 128 个值头 × 128 维、全注意力 64 个查询头 × 256 维,内部宽度都是 16,384,是隐藏维度的两倍。
注意力部分的拆分依赖对投影矩阵形状的推算,本章把它标为估算;不过它与 Hugging Face 记录的总参数量能对上,可信度不低。
回头看上一章:推断对了多少
上一章在只有“2.4T、95B、稀疏 MoE、混合注意力”四条信息时,分层做了推断。现在可以逐条对答案:
| 上一章的判断 | 层次 | 结果 |
|---|---|---|
| 激活率约 4.0% | 算术推论 | 对(95 / 2446 ≈ 3.9%) |
| 在同代同规模里,稀疏度偏保守 | 横向定位 | 对,比 K3 的 1.8% 高一倍多 |
| 所以专家可能更少或更大 | 机制推断 | 错:512 个中间维度仅 2048 的小专家,是细粒度设计 |
| “混合注意力”几乎是 1M 上下文的必然选择 | 横向定位 | 对 |
| 混的是哪两种:拒绝猜,只注明 Qwen3-Next 的门控线性注意力是个弱先验 | 不做具体猜测 | 答案正是线性 + 全注意力。但当时不猜是对的——先验很弱,碰巧说中不算方法 |
错的那一条,恰好落在上一章方法论表里标为“低可信度”的那一层。 “稀疏度偏保守”本来有两种实现方式:专家少而大,或者专家细而多、每次激活得也多。上一章只想到了前一种。
这正是分层推断的价值:它不保证不犯错,而是让错误落在事先标明“不可靠”的地方。
仍然空白的部分
配置文件能回答“长什么样”,回答不了“怎么练的”。截至 9 月 19 日,下面几项仍然没有一手来源:
| 项目 | 状态 |
|---|---|
| 技术报告 / 论文 | Max 本身仍无(模型卡只引了发布博客);同系列 Flash-Next 的技术报告只讲 Flash-Next |
| 预训练 token 数、数据构成 | 未公开 |
| 训练精度、优化器、学习率策略 | 未公开 |
| MTP 训练时预测几步 | 只说“多步”,没有具体数字 |
| 后训练与强化学习细节 | 博客只讲了三件事:组合式扩展环境、统一奖励、在线数据均衡,外加一张环境数与分数的曲线(见 RL 那一章) |
| 0902 快照 | 只说“继续后训练”,没有说明改了什么,也没有开放权重 |
下一代的方向倒是已经公布了:官方称 Flash-Next 是 Qwen4 模型结构的先导预览,全注意力层换成块级稀疏的 QSA,残差流加宽并加门控,外加 N-gram 嵌入——详见同系列那一章。
下一章讲思考档位。👉 思考档位与思考模式
参考文献
- [1] Qwen Team. Qwen3.8-2.4T-A95B 模型卡,Hugging Face,2026-08。
- [2] 同仓库 config.json 与对话模板。
- [3] Hugging Face 模型元数据与提交记录(safetensors 参数统计;8 月 10 日、12 日对模板与配置的修改)。
- [4] Qwen Team. “Qwen3.8-Flash-Next:全新架构,迈向极致性价比.” 2026-08-26 —— 混合结构的来历与 Qwen4 结构预览。
- [5] 本站《AI 大模型解构》MoE 的三个旋钮。