返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

Qwen3-Next:用混合注意力和高稀疏 MoE 把训练与推理成本打下来

[复制链接]
链载Ai 显示全部楼层 发表于 昨天 19:29 |阅读模式 打印 上一主题 下一主题


通义千问发布最新模型结构Qwen3-Next。它在架构上采用“Gated DeltaNet + Gated Attention”的混合注意力,并把 MoE 稀疏度拉高到只激活约 3.7% 的参数,同时做了多项训练稳定性优化,还在主干中原生引入 MTP(Multi-Token Prediction)。

基于这套设计,80B 总参数、仅激活约 3B 的 Qwen3-Next-80B-A3B 系列在长上下文推理吞吐和整体性价比上有明显优势,并在 Instruct 和 Thinking 两条产品线上,拿到接近甚至对齐 235B 旗舰的效果。

Qwen3-Next

为什么要做 Qwen3-Next

从趋势看,两个方向很关键:

  • Context Length Scaling - 让模型处理更长的上下文
  • Total Parameter Scaling - 提升总参数规模但保持激活稀疏

Qwen3-Next 就是围绕这两点做系统性优化:混合注意力提升长序列效率和能力,高稀疏 MoE 控制激活开销,再加上稳定性改造和 MTP,加速训练和推理同时兼顾效果。

核心架构设计

混合注意力:Gated DeltaNet + Gated Attention

我的理解是,单一注意力形态都有短板:

  • 线性注意力对长序列友好,但召回能力往往不够
  • 标准注意力效果强,但在长上下文上成本很高

Qwen 团队最后选了混合方案:75% 的层用 Gated DeltaNet,25% 的层保留标准注意力。实验显示,这个 3:1 的比例在效率与效果上更稳。

在保留的标准注意力里,他们还做了几处增强:

  • 输出门控(output gating)缓解注意力的低秩与“attention sink”等现象
  • 把单头维度从 128 提到 256
  • RoPE 只加在注意力头前 25% 的位置维度,改善长度外推

换个角度思考,这套组合是在不同长度区间里让两类机制各展所长,再用门控把数值行为压稳。

极致稀疏 MoE:80B 总参,约 3B 激活

Qwen3-Next 的 MoE 更“稀”:

  • 总参数约 80B,每次只激活约 3B,激活占比约 3.7%
  • 采用全局负载均衡,固定激活专家数时,增加专家总参数能持续降低训练 loss
  • 架构从 Qwen3 的 128 总专家 + 8 路由专家,扩到 512 总专家 + 10 路由专家 + 1 共享专家

从实际训练来看,这样的配置在效果不掉的前提下,把资源利用率拉满。

训练稳定性的几处关键改动

为了解决注意力池化异常、极大激活等问题,他们做了三点:

  • 延续输出门控,直接在注意力输出处做稳定化
  • 把 QK-Norm 换成 Zero-Centered RMSNorm,并对 norm weight 加 weight decay,避免权重无界
  • 初始化时对 MoE router 做归一化,让每个 expert 在早期都有公平的被选机会

这些细节看着琐碎,但对大规模、长上下文训练是否稳定,影响很大。

Multi-Token Prediction(MTP)

Qwen3-Next 把 MTP 原生集成进主干:

  • 既能作为高接受率的草稿生成模块,提升 speculative decoding 的效率
  • 也能增强主干本身的综合性能
  • 训练阶段做了多步一致性,让推理时的多步 MTP 更稳、更实用

简单说,就是在一个模型里同时兼顾了“快”和“好”。

预训练与效率表现

训练数据与成本

他们从 Qwen3 的 36T 语料里做了 15T 均匀采样来训 Qwen3-Next。整体消耗上:

  • 相比 Qwen3-30A-3B,GPU Hours 降到其 80% 以内
  • 相比 Qwen3-32B,只用约 9.3% 的 GPU 资源,却拿到更优效果

这个对想要低成本拿高性能的团队很有吸引力。

推理吞吐:长上下文优势明显

得益于混合注意力,Qwen3-Next-80B-A3B 在长上下文推理的吞吐提升很大:

  • 预填充阶段,在 4k 上下文时接近 7 倍的吞吐
  • 当上下文超过 32k,预填充和解码都能达到 10 倍以上的吞吐优势
  • 在 4k 上下文的解码阶段,吞吐也接近 4 倍

如果你的任务经常需要读很长的文档或日志,这个改动的价值非常直观。

Base 模型表现

Qwen3-Next-80B-A3B-Base 激活的非嵌入参数只有同规模 dense 的十分之一上下,就在多数基准上超过了 Qwen3-32B-Base,同时显著优于 Qwen3-30B-A3B。这个性价比已经很能打了。

后训练与评测结果

Instruct

  • 明显优于 Qwen3-30B-A3B-Instruct-2507 和 Qwen3-32B-Non-thinking
  • 接近 Qwen3-235B-A22B-Instruct-2507
  • 在 RULER 的各长度区间表现都更稳,256k 范围内甚至超越了层数更多的 235B Instruct

这基本说明混合注意力在长文本任务上站住了脚。

Thinking

  • 优于 Qwen3-30B-A3B-Thinking-2507 和 Qwen3-32B-Thinking
  • 超过闭源的 Gemini-2.5-Flash-Thinking
  • 在部分指标上逼近 Qwen3-235B-A22B-Thinking-2507

如果你关心复杂推理,这条线的进步值得关注。

上手使用 Qwen3-Next

下面的示例基于 Qwen3-Next-80B-A3B-Instruct。Thinking 版本可参考 Hugging Face 模型页: https://huggingface.co/Qwen/Qwen3-Next-80B-A3B-Thinking

使用 Hugging Face Transformers

Transformers 主分支已支持 Qwen3-Next。建议安装主分支版本。

  • 如果用旧版本,可能遇到 KeyError: 'qwen3_next'
  • MTP 目前在 Transformers 里还未普遍支持
  • 若追求吞吐,建议配合 SGLang 或 vLLM
  • 根据环境安装 flash-linear-attention 和 causal-conv1d,有机会进一步提速

示例代码(对话生成):

from transformers import AutoModelForCausalLM, AutoTokenizer
model_name ="Qwen/Qwen3-Next-80B-A3B-Instruct"tokenizer = AutoTokenizer.from_pretrained(model_name)model = AutoModelForCausalLM.from_pretrained( model_name, dtype="auto", device_map="auto",)
messages = [{"role":"user","content":"Give me a short introduction to large language model."}]text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)inputs = tokenizer([text], return_tensors="pt").to(model.device)
outputs = model.generate(**inputs, max_new_tokens=16384)new_tokens = outputs[0][len(inputs.input_ids[0]):]print(tokenizer.decode(new_tokens, skip_special_tokens=True))

用 SGLang 部署

SGLang 主分支已支持。示例命令:

  • 启动 4 卡张量并行,默认 256k 上下文,OpenAI 兼容 API 位于 http://localhost:30000/v1
  • 需要设置环境变量 SGLANG_ALLOW_OVERWRITE_LONGER_CONTEXT_LEN=1
  • 可选开启 MTP 加速
# 基础SGLANG_ALLOW_OVERWRITE_LONGER_CONTEXT_LEN=1\python-m sglang.launch_server \--model-path Qwen/Qwen3-Next-80B-A3B-Instruct \--port 30000 --tp-size 4 \--context-length 262144 \--mem-fraction-static 0.8
# 启用 MTPSGLANG_ALLOW_OVERWRITE_LONGER_CONTEXT_LEN=1\python-m sglang.launch_server \--model-path Qwen/Qwen3-Next-80B-A3B-Instruct \--port 30000 --tp-size 4 \--context-length 262144 \--mem-fraction-static 0.8 \--speculative-algo NEXTN \--speculative-num-steps 3 \--speculative-eagle-topk 1 \--speculative-num-draft-tokens 4

小贴士:

  • 默认上下文长度为 256k。如果启动失败,可先把 context-length 降到 32768 试试

用 vLLM 部署

vLLM 主分支已支持。示例命令:

  • 需要设置环境变量 VLLM_ALLOW_LONG_MAX_MODEL_LEN=1
  • OpenAI 兼容 API 位于 http://localhost:8000/v1
  • 可选开启 MTP
# 基础VLLM_ALLOW_LONG_MAX_MODEL_LEN=1 \vllm serve Qwen/Qwen3-Next-80B-A3B-Instruct \ --port 8000 \ --tensor-parallel-size 4 \ --max-model-len 262144
# 启用 MTPVLLM_ALLOW_LONG_MAX_MODEL_LEN=1 \vllm serve Qwen/Qwen3-Next-80B-A3B-Instruct \ --port 8000 \ --tensor-parallel-size 4 \ --max-model-len 262144 \ --speculative-config '{"method":"qwen3_next_mtp","num_speculative_tokens":2}'

同样地,如果服务起不来,可以把 max-model-len 先降到 32768 观察资源占用。

Agent 场景

Qwen3 在工具调用上表现不错。结合 Qwen-Agent,可以更轻松地挂接 MCP 工具或内置工具,降低集成成本。大致流程:

  • 配置一个 OpenAI 兼容的 API 端点,比如前面用 vLLM 启动的服务
  • 在 Qwen-Agent 里指定模型名、api_base 和 api_key
  • 通过 MCP 配置或内置工具,挂接如时间、网络抓取、代码解释器等能力

这部分的官方示例代码已经把关键参数写全,直接替换成你的服务地址就能跑。

处理超长上下文

Qwen3-Next 原生支持 262,144 token 的上下文。如果输入加输出要远超这个长度,我更推荐用 YaRN 做 RoPE 缩放:

  • 你可以直接在模型 config.json 加 rope_scaling
  • 或者在 vLLM、SGLang 的命令行参数里传 rope_scaling 配置
  • 目前主流框架实现的是“静态 YaRN”,缩放因子不随输入变化,可能会影响短文本性能
  • 因此只在确有长上下文需求时再开启,并把 factor 调整到合适值
    • 比如典型上下文在 524,288 token 左右,就用 factor=2.0

示例配置(以 vLLM 为例):

VLLM_ALLOW_LONG_MAX_MODEL_LEN=1\vllmserve...\--rope-scaling'{"rope_type":"yarn","factor":4.0,"original_max_position_embeddings":262144}'\--max-model-len1010000

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ