Qwen MoE 架构怎么工作?从稀疏激活到部署的完整路径
【免费下载链接】Qwen1.5Qwen3 is the large language model series developed by Qwen team, Alibaba Cloud.项目地址: https://gitcode.com/GitHub_Trending/qw/Qwen1.5
当你要跑一个 235B 的大模型,却发现它塞不进显卡,而小模型又压不住复杂推理时,Qwen 的混合专家(Mixture of Experts, MoE)架构给出了折中:模型存下大参数,但每个 token 只激活其中一小部分。本文把 MoE 的路由原理和参数命名讲清楚,带你跑通 Qwen3 的本地推理与服务部署,不涉及训练与偏好对齐。
它到底解决了什么
想象两个场景。一是你只有一台单卡机器,想部署大模型;二是线上服务要扛住高并发,但显存和算力都紧张。密集(Dense)模型的问题在于:参数量多大,每个 token 就要算多大,模型越大越贵。
MoE 的思路是把「存储知识」和「计算量」解耦。以 Qwen3 为例,它提供两个 MoE 型号:30B-A3B和235B-A22B。前者总共 30B 参数,但每个 token 只激活 3B;后者总共 235B,每个 token 激活 22B。
| 维度 | 密集模型(30B 级) | MoE(30B-A3B) |
|---|---|---|
| 每 token 激活参数 | 30B(全部) | 3B |
| 知识存储总量 | 30B | 30B |
| 单位推理计算量 | 基准 | 约 1/10 |
同样的知识容量下,MoE 把每个 token 的计算量压到密集模型的约十分之一;而单卡 96GB(H20)就能在 BF16 下跑30B-A3B,这点来自项目自带的速度基准。
拆解 Qwen MoE 架构的五步路由原理
MoE 的核心不在「专家」本身,而在「谁来选专家」。下面按一个 token 的前向过程分五步走。
第一步:特征提取。输入文本先经 BPE 分词切成 token 序列,再过词嵌入层和 Transformer 编码器,得到该位置的隐藏状态向量。Qwen 的词汇表约 151,646 个 token。
第二步:门控打分。一个轻量门控网络(Gating Network)读取隐藏状态,对每个专家输出一个选择分数,判断「这个问题该交给谁」。
第三步:Top-K 选择。只挑分数最高的 K 个专家(常见 K=2),其余专家本次不激活——这正是计算量被省下来的关键。
第四步:专家前向。被选中的专家各自做前向计算,专家内部结构与普通 FFN 子网类似,但各专家参数相互独立。
第五步:加权合并。把选中专家的输出按第二步的分数加权求和,再经残差连接送回主干,得到该位置的最终表示。
这里要强调命名规则,它直接暴露了激活量:A前的数字是总存储参数,A后是每个 token 激活的参数,所以235B-A22B意味着存了 235B 知识、每 token 只算 22B。
从零上手
先用最轻量的方式跑通本地推理。下面这条命令启动一个 OpenAI 兼容服务并加载Qwen3-8B(密集版,适合单卡验证流程):
vllm serve Qwen/Qwen3-8B --port 8000 --enable-reasoning --reasoning-parser qwen3它做的事是:加载模型、在 8000 端口起一个 OpenAI 兼容 API,并开启思考模式解析。启动成功后访问http://localhost:8000/v1,即可用 OpenAI SDK 发请求,思考内容会从reasoning_content字段返回。
如果要跑 MoE 型号,把模型名换成Qwen/Qwen3-30B-A3B-Instruct-2507即可。支持的主要框架及最低版本如下:
| 框架 | 用途 | 最低版本 |
|---|---|---|
| Transformers | 本地推理/微调 | >=4.51.0 |
| vLLM | 高吞吐部署 | >=0.9.0 |
| SGLang | 高吞吐部署 | >=0.4.6.post1 |
| llama.cpp | 端侧推理 | >=b5401 |
| Ollama | 本地运行 | v0.9.0 |
| mlx-lm | Apple Silicon | >=0.24.0 |
关键细节与注意事项
⚠️ 思考模式下别用贪心解码。现象:
temperature=0或贪心采样时,思考模型输出质量下降甚至无限重复。原因:贪心采样不适合思考类模型。解决:思考模式用temperature=0.6、top_p=0.95、top_k=20,非思考模式用temperature=0.7、top_p=0.8(见 快速上手)。⚠️ 上下文设太大直接 OOM。现象:vLLM/SGLang 启动时报显存不足。原因:
--max-model-len超过了显存承载。解决:按显存下调,235B-A22B的 BF16 需 8 卡、FP8 需 4 卡(见 速度基准)。MoE 量化在内核上不一定支持。现象:Transformers 下
30B-A3B的 GPTQ-INT4 无法运行,标注 "MoE Kernel Unsupported"。原因:MoE 量化内核缺失。解决:改用 vLLM/SGLang,或直接用 BF16/FP8。Ollama 默认上下文太小。现象:对话生成异常、被截断。原因:默认
num_ctx仅 2048 且允许无限生成。解决:手动设置num_ctx与num_predict(见 README)。
下一步
MoE 让「存得大、算得小」成为可能,这也是 Qwen 能把大模型塞进单卡的关键。🚀 熟悉这套路由逻辑后,你可以顺着官方文档继续深挖:快速上手指南 覆盖从本地推理到 OpenAI 兼容 API 的完整调用,速度基准 给出各型号在不同量化下的吞吐与显存,vLLM 部署 则讲解高并发场景下的服务化配置。
【免费下载链接】Qwen1.5Qwen3 is the large language model series developed by Qwen team, Alibaba Cloud.项目地址: https://gitcode.com/GitHub_Trending/qw/Qwen1.5
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考