ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

一文通透Qwen LLM系列——从Qwen、Qwen1.5、Qwen2、Qwen2.5到Qwen3(融合了chat和推理)、Qwen3 MoE

一文通透Qwen LLM系列——从Qwen、Qwen1.5、Qwen2、Qwen2.5到Qwen3(融合了chat和推理)、Qwen3 MoE 1. 从 Qwen 到 Qwen3 MoE一条模型演进的时间线如果你最近在选型本地大模型大概率会被 Qwen 家族的命名绕晕Qwen、Qwen1.5、Qwen2、Qwen2.5、Qwen3还有带 A3B、A22B 后缀的 MoE 版本。它们不是简单的版本号叠加而是阿里通义千问团队在架构、训练数据、后训练策略上一次次“换发动机”的结果。这篇文章想做的事很直接把这条演进脉络讲清楚再给你一套能直接复制运行的配置让你在自己的机器或统一 API 通道上把几代 Qwen 拉出来对比测试。先说结论性的判断方便你带着预期往下读。Qwen 第一代2023 年 8 月解决的是“有没有”的问题用数万亿 token 预训练加 SFT、RLHF 对齐词表扩到约 152K中文能力是重点补强项。Qwen1.52024 年 2 月把规模铺开从 0.5B 到 72B 共 6 个尺寸加一个 MoE上下文 32K对齐用上了 DPO 和 PPO其中 32B 版本引入 GQA 降低 KV 缓存。Qwen22024 年 6 月是架构分水岭稠密模型全面上 GQA、SwiGLU、RoPE、RMSNorm预训练数据从 3 万亿涨到 7 万亿 token还首次给出 57B-A14B 这种 MoE 形态。Qwen2.52024 年 9 月把预训练数据推到 18 万亿 token后训练引入离线 DPO 加在线 GRPO 的双阶段 RL生成长度从 2K 提到 8K结构化输出明显变好。Qwen32025 年则把“思考模式”和“非思考模式”融进同一个模型稠密 6 个尺寸加 2 个 MoE旗舰 235B-A22B 总参 2350 亿、激活 220 亿预训练 36 万亿 token、覆盖 119 种语言。适合谁读三类人。第一类是做本地部署、想知道“我这台 24G 显存的机器该跑哪一代哪个尺寸”的工程师第二类是要做模型对比评测、需要统一调用通道的研究或产品同学第三类是想系统理解通义千问技术路线、准备写技术方案或做技术选型的开发者。下面我会先给参数对照表再给可复制的部署与调用配置最后给验证步骤和排错清单。需要提前说明一点本文所有调用示例都走统一的 OpenAI 兼容接口Base URL 用https://taotoken.net/api这样你不用为每一代模型单独维护一套 SDK。模型 ID 我会在配置里写清楚你按需替换即可。2. 各代 Qwen 参数对照与架构关键变化这一节是全文的信息密度核心。我先把几代模型的关键参数拉成表格再逐条解释变化背后的动机。表格里的数字来自各代技术报告MoE 模型的“激活参数”指的是每个 token 实际参与计算的参数量这个数字直接决定推理成本。代际发布时间代表尺寸预训练 token上下文注意力对齐策略关键变化Qwen2023.081.8B/7B/14B/72B数万亿8K 级MHASFT RLHF词表约 152K中文补强Qwen1.52024.020.5B~72B MoE3 万亿32KMHA/GQADPO PPO32B 引入 GQAQwen22024.060.5B/1.5B/7B/57B-A14B/72B7 万亿32K→128KGQASFT DPO全面 GQAMoE 细粒度专家Qwen2.52024.090.5B~72B Turbo/Plus18 万亿32K→1MGQASFT 离线 DPO 在线 GRPO生成 8K结构化增强Qwen320250.6B~32B 30B-A3B/235B-A22B36 万亿32K→128KGQA QK-Norm四阶段 强到弱蒸馏思考/非思考融合先看 Qwen 第一代。它的分词器基于 tiktoken 的 cl100k base 词表起步额外补充常用中文字符和词汇最终词表约 152K。这个设计在当时很务实GPT 系词表对中文的压缩率不理想补中文词能显著降低中文文本的 token 数直接省推理成本。预训练用数万亿 token之后 SFT 加 RLHF 得到 Qwen-Chat还派生出 Code-Qwen、Math-Qwen 等专用模型。这一代的问题是上下文偏短、注意力还是标准 MHA长文本场景吃力。Qwen1.5 的看点有两个。一是尺寸铺得全0.5B 到 72B 覆盖了从端侧到服务端的全部区间还给了 MoE 版本。二是 32B 版本引入 GQA。GQA 的直觉很好理解标准多头注意力里每个头都有独立的 Q、K、VKV 缓存随头数线性增长GQA 让多个头共享同一组 K、V比如 8 个 Q 头只配 4 组 K、V。这样 KV 缓存直接减半长上下文推理的显存压力小很多吞吐也上去了。对齐上 Qwen1.5 用了 DPO 和 PPO比第一代纯 RLHF 更灵活。Qwen2 是架构真正成型的节点。稠密模型统一采用 GQA、SwiGLU 激活、RoPE 位置编码、QKV 偏置、RMSNorm 预归一化。预训练数据从 3 万亿扩到 7 万亿 token代码和数学数据显著增加。长上下文方面预训练最后阶段把上下文从 4096 扩到 32768RoPE 基频从 10000 调到 1000000再配合 YARN 和双块注意力DCA推理时能处理到 131072 token。MoE 版本 Qwen2-57B-A14B 在 7B 基础上扩展采用细粒度专家加共享专家路由每个 token 激活 140 亿参数。这里有个细节值得记细粒度专家指的是把专家切得更小、激活更多个在总参和激活参相同的情况下能提供更丰富的专家组合。Qwen2.5 的重点在数据和后训练。预训练数据从 7 万亿推到 18 万亿 token用 Qwen2-Instruct 做数据质量过滤把 Qwen2.5-Math 和 Qwen2.5-Coder 的训练数据也整合进来。后训练是双阶段 RL离线阶段用 DPO 处理数学、代码、指令遵循这类有标准答案的任务约 15 万对训练样本在线阶段用 GRPO每个查询采样 8 个响应按奖励分数方差优先处理高方差查询。GRPO 相比 PPO 去掉了价值估计网络省显存也省调参。生成长度从 2K 提到 8K表格和 JSON 这类结构化输出支持更好工具调用也更顺。Qwen2.5-Turbo 支持到 100 万 token 上下文。Qwen3 最大的变化是把“思考”和“非思考”两种模式融进同一个模型。稠密模型 0.6B 到 32B 共 6 个MoE 有 30B-A3B 和 235B-A22B 两个。架构上延续 Qwen2.5 的 GQA、SwiGLU、RoPE、RMSNorm但移除了 QKV 偏置引入 QK-Norm 保证训练稳定性。MoE 版本 128 个专家、每 token 激活 8 个不含共享专家用全局批次负载均衡损失促进专家专业化。预训练分三阶段通用阶段 30 万亿 token、推理阶段再加约 5 万亿高质量 token、长上下文阶段用 32768 序列长度。后训练是四阶段流程长链式思维冷启动、推理型 RL、思维模式融合、通用 RL轻量模型走强到弱蒸馏只需四阶段方法约 1/10 的 GPU 时长。把这张表读透你选型时就有依据了。显存紧张、只要基础对话Qwen2.5-7B 或 Qwen3-8B 是甜点要长文本看 Qwen2.5-Turbo 或 Qwen3 的长上下文配置要推理能力又不想付大模型成本Qwen3-30B-A3B 这种 MoE 激活参数只有 30 亿性价比很高。3. 可复制配置本地部署与统一 API 调用这一节给你两套配置。第一套是本地部署用 vLLM 起服务适合有 GPU 的场景第二套是统一 API 调用用 TaoToken 的 OpenAI 兼容通道适合没有本地算力或要做多代对比的场景。两套配置里的 Base URL、Key、Model ID 三件套我都会写全。先说本地部署。以 Qwen2.5-7B-Instruct 为例假设你已经装好 CUDA 和 vLLM启动命令如下python -m vllm.entrypoints.openai.api_server \ --model Qwen/Qwen2.5-7B-Instruct \ --served-model-name qwen2.5-7b-instruct \ --dtype auto \ --max-model-len 32768 \ --gpu-memory-utilization 0.9 \ --port 8000几个参数解释一下。--max-model-len 32768对应 Qwen2.5 的原生上下文如果你要跑更长需要确认模型是否支持 YaRN 外推。--gpu-memory-utilization 0.9让 vLLM 用 90% 显存做 KV 缓存24G 卡跑 7B 模型这个值比较稳。--served-model-name是你调用时用的模型名可以自定义。如果你要跑 Qwen3-30B-A3B 这种 MoE显存需求看的是总参还是激活参答案是总参。MoE 的专家权重都要加载进显存只是计算时只激活一部分。30B-A3B 总参 300 亿FP16 大约需要 60G 显存建议用两张 48G 卡或量化版本。启动命令类似把模型名换成Qwen/Qwen3-30B-A3B即可。再说统一 API 调用。这是做多代对比最省事的方式因为你不用为每一代模型单独部署。TaoToken 提供 OpenAI 兼容接口Base URL 是https://taotoken.net/apiKey 在控制台的 API Keys 页面创建。先看一个 Python 调用示例from openai import OpenAI client OpenAI( base_urlhttps://taotoken.net/api, api_keysk-你的Key, ) resp client.chat.completions.create( modelqwen2.5-7b-instruct, messages[ {role: system, content: 你是一个严谨的技术助手。}, {role: user, content: 用三句话解释 GQA 相比 MHA 的优势。}, ], temperature0.7, max_tokens512, ) print(resp.choices[0].message.content)如果你用 Cline 或 Claude Code 这类编码工具配置方式是把 Base URL、Key、Model ID 填进对应的设置项。以 Cline 的 MCP 配置为例settings 片段如下{ mcpServers: { taotoken-qwen: { command: npx, args: [-y, taotoken/mcp-server], env: { TAOTOKEN_BASE_URL: https://taotoken.net/api, TAOTOKEN_API_KEY: sk-你的Key, TAOTOKEN_MODEL: qwen3-8b } } } }注意这里的三件套Base URL 是https://taotoken.net/apiKey 是你的 API KeyModel ID 按你要对比的模型填。Qwen3 系列在思考模式下模型 ID 通常带-thinking后缀或通过参数控制具体以文档为准。如果你用 Codex 的 auth.json 方式配置结构类似把 base_url 和 api_key 填进去即可。做多代对比时我建议写一个循环脚本把模型 ID 列表跑一遍统一 prompt、统一 temperature输出并排对比。这样你能直观看到 Qwen2.5 和 Qwen3 在同一个问题上的回答差异尤其是推理类问题Qwen3 的思考模式会先输出推理过程再给结论。4. 验证请求与成功结果怎么确认真的调通了配置写完不算完得验证。这一节给你三个层次的验证连通性、模型身份、能力对比。第一层连通性验证。用 curl 发一个最小请求确认网络和 Key 都没问题curl https://taotoken.net/api/v1/chat/completions \ -H Authorization: Bearer sk-你的Key \ -H Content-Type: application/json \ -d { model: qwen2.5-7b-instruct, messages: [{role: user, content: 回复 OK 两个字母即可}], max_tokens: 16 }成功的话你会看到类似这样的返回{ id: chatcmpl-xxx, object: chat.completion, created: 1730000000, model: qwen2.5-7b-instruct, choices: [ { index: 0, message: {role: assistant, content: OK}, finish_reason: stop } ], usage: {prompt_tokens: 12, completion_tokens: 2, total_tokens: 14} }重点看choices[0].message.content有内容、finish_reason是stop、usage有 token 计数。如果content是空的但finish_reason是length说明 max_tokens 太小被截断了。第二层模型身份验证。有些模型对自身身份的回答会暴露版本信息你可以直接问“你是什么模型”。但要注意模型自述不一定准确更可靠的方式是看返回里的model字段是否和你请求的一致。如果返回的 model 字段和你请求的不一样说明服务端做了路由或映射需要查文档确认。第三层能力对比验证。这是本文的核心目的。我建议用同一组 prompt 跑多代模型观察差异。比如这道题“一个水池有甲乙两个进水管甲单独注满需要 6 小时乙单独注满需要 4 小时两管同时开需要多久” 正确答案是 2.4 小时。Qwen2.5 通常直接给答案Qwen3 在思考模式下会先列方程再算。你可以用下面的脚本批量跑import time from openai import OpenAI client OpenAI(base_urlhttps://taotoken.net/api, api_keysk-你的Key) models [qwen2.5-7b-instruct, qwen3-8b] prompt 一个水池有甲乙两个进水管甲单独注满需要6小时乙单独注满需要4小时两管同时开需要多久请给出计算过程。 for m in models: t0 time.time() resp client.chat.completions.create( modelm, messages[{role: user, content: prompt}], temperature0.2, max_tokens1024, ) dt time.time() - t0 print(f {m} | 耗时 {dt:.2f}s ) print(resp.choices[0].message.content) print()跑完你会看到两个维度的差异一是回答风格Qwen3 的推理链更完整二是耗时思考模式会慢一些因为多了推理 token。这个对比结果可以直接放进你的选型报告。如果你要验证长上下文可以构造一个 8000 token 左右的长文档让模型做摘要或问答。Qwen2.5 支持 8K 生成Qwen3 长上下文阶段用 32768 序列长度训练理论上长文本表现更好。验证时注意看usage.prompt_tokens是否和你预期一致如果远小于你的输入长度说明 tokenizer 压缩率很高这是好事。5. 本篇常见错误排查这一节按真实报错来。我把接入 Qwen 系列时最容易踩的坑列出来每条给现象、原因、解法。401 Unauthorized。现象是请求返回 401提示 invalid api key 或 missing authorization。原因通常是 Key 没填、填错、或者 Header 格式不对。检查两点一是Authorization: Bearer sk-xxx里 Bearer 和 Key 之间有一个空格不能少二是 Key 有没有多余空格或换行。如果你用的是环境变量确认变量名和代码里读的一致。还有一种情况是 Key 被禁用或额度耗尽去控制台 API Keys 页面确认状态。local proxy failed / connection refused。现象是请求发不出去报连接失败。原因通常是本地网络配置问题或者 Base URL 写错。先确认 Base URL 是https://taotoken.net/api注意结尾没有多余的斜杠路径拼接时/v1/chat/completions要接对。如果你在代码里用了base_urlhttps://taotoken.net/api/v1那调用时就不能再拼/v1否则会变成/v1/v1/chat/completions。这个错误很常见建议统一用base_urlhttps://taotoken.net/api让 SDK 自己拼/v1。reading choices 报错 / choices 为空。现象是代码里访问resp.choices[0]时报 IndexError 或 NoneType。原因通常是返回体结构和你预期不一致或者请求被拦截。先打印完整resp看结构。如果choices是空列表看有没有error字段。常见触发是 prompt 触发了内容安全策略或者 max_tokens 设为 0。把 max_tokens 设成合理值比如 512再试。OAuth / 认证方式不匹配。现象是某些工具报 OAuth 相关错误。原因是你用的工具默认走 OAuth 流程而 TaoToken 用的是 API Key 认证。解法是在工具设置里切换到 API Key 模式把 Key 填进去。Claude Code 这类工具如果默认走 Anthropic 官方 OAuth需要改成自定义 Base URL 加 API Key 的方式。模型 ID 不存在 / model not found。现象是返回 404 或提示模型不存在。原因是 Model ID 拼写错误或者该模型不在当前通道支持列表里。Qwen 系列的 Model ID 通常是小写加连字符比如qwen2.5-7b-instruct、qwen3-8b。注意 Qwen2.5 和 Qwen3 的写法不要写成qwen-2.5或Qwen3。去文档页确认准确的 Model ID。思考模式没有输出推理过程。现象是 Qwen3 回答很直接没有推理链。原因是没触发思考模式。Qwen3 通过聊天模板里的/think和/no think标志控制默认是思考模式但部分接口可能需要显式传参。检查你的请求有没有带上对应标志或者模型 ID 是否选的是思考版本。长上下文请求被截断。现象是输入很长但模型只看到一部分。原因是 max_model_len 或服务端上下文限制。本地部署时检查--max-model-len参数API 调用时确认该模型支持的上下文长度。Qwen2.5 原生 32KQwen2.5-Turbo 支持到 1M但 API 通道可能有自己的限制以文档为准。MoE 模型显存不够。现象是加载 Qwen3-30B-A3B 时 OOM。原因是只按激活参数估算了显存。MoE 的专家权重都要加载30B 总参 FP16 约需 60G。解法是用量化版本如 AWQ、GPTQ或者用多卡张量并行。vLLM 的--tensor-parallel-size 2可以拆到两张卡。流式输出中断。现象是 stream 模式下输出到一半停了。原因可能是网络抖动或者 max_tokens 到了。检查 finish_reason如果是 length 就调大 max_tokens如果是 null 或异常加重试逻辑。流式场景建议加超时和重试。token 计数对不上。现象是 usage 里的 token 数和你自己估算的差很多。原因是不同模型的 tokenizer 不一样。Qwen 用 BBPE 词表约 151K中文压缩率比 GPT 系好。如果你用 tiktoken 估算 Qwen 的 token 数结果会偏大。建议直接用返回的 usage 字段或者用 Qwen 官方的 tokenizer 工具。6. 统一通道做多代对比的实践建议把几代 Qwen 放在同一个通道上对比最大的好处是变量可控。你不需要为每一代模型折腾环境、装依赖、调显存只需要换 Model ID。这对做技术选型、写评测报告、或者单纯想搞清楚“Qwen3 到底比 Qwen2.5 强在哪”的人来说效率提升很明显。我的实践建议是分三步走。第一步先用小尺寸模型跑通流程比如 Qwen2.5-0.5B 或 Qwen3-0.6B确认 Key、Base URL、请求格式都没问题。第二步用同一组 prompt 跑目标尺寸的模型记录回答质量、耗时、token 消耗。第三步针对你的实际业务场景构造测试集比如你的场景是代码生成就用真实代码题是长文档问答就用真实文档。通用 benchmark 只能参考业务测试集才决定选型。关于成本MoE 模型的优势在这里体现得很明显。Qwen3-30B-A3B 总参 300 亿但每 token 只激活 30 亿推理成本接近 3B 稠密模型但能力接近更大尺寸。如果你的场景对延迟敏感、预算有限MoE 是很好的折中。Qwen3-235B-A22B 激活 220 亿能力对标更大稠密模型适合对质量要求高的场景。最后给一个实用技巧做对比时固定 temperature 和 max_tokens否则结果不可比。推理类任务 temperature 设 0.2 到 0.3创意类设 0.7 到 0.9。Qwen3 思考模式下推理 token 会占用 max_tokens 额度记得把额度调大否则推理没完就被截断你看到的回答会不完整。如果你要长期做编码或 Agent 类任务可以考虑 Coding Plan 这类按周期计费的方案比按 token 计费更可控。验证模型能力时模型对话页面可以直接交互测试不用写代码。接入文档里有各语言的完整示例遇到报错先查文档再排查。API Keys 在控制台创建和管理建议给不同项目建不同的 Key方便追踪用量。把上面这些配置和验证步骤跑一遍你对 Qwen 全系的演进脉络就不只是“知道”而是“用过、比过、有数据”。这比读十篇综述都管用。
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进