ARTICLE · INTELLIGENCE

战地情报 · 详情页

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

Qwen3-235B-A22B 部署 5 步上手:从本地推理到长上下文调优的完整指南

Qwen3-235B-A22B 部署 5 步上手:从本地推理到长上下文调优的完整指南

Qwen3-235B-A22B 部署 5 步上手:从本地推理到长上下文调优的完整指南

【免费下载链接】Qwen3-235B-A22BQwen3-235B-A22B 具有以下特点: 类型:因果语言模型 训练阶段:预训练与后训练 参数数量:总计 235B,激活 22B 参数数量(非嵌入):234B 层数:94 注意力头数(GQA):Q 为 64,KV 为 4 专家数:128 激活的专家数:8 上下文长度:本地为 32,768,使用 YaRN 可处理 131,072 个标记。项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3-235B-A22B

Qwen3-235B-A22B 是一个总参数 235B、激活参数 22B 的混合专家(MoE)因果语言模型,原生支持 32,768 token 上下文。本文带你按「自查 → 装环境 → 本地推理 → 起服务 → 调优」的顺序把它真正跑起来,每一步都给出可验证的预期结果。

一、先看模型目录与硬件底数

动手前花两分钟确认两件事:权重文件是否齐全、硬件能不能装下它。

1.1 读懂这 118 个权重分片

文件作用
model-00001-of-00118.safetensors…model-00118-of-00118.safetensorsbf16 权重分片,共 118 个
model.safetensors.index.json分片索引,供 transformers 定位参数
tokenizer.json/vocab.json/merges.txt分词器,词表大小 151,936
config.json结构参数:94 层、128 个专家、每 token 激活 8 个、GQA 注意力头 64/4
generation_config.json默认采样参数:temperature 0.6、top_p 0.95、top_k 20

1.2 估算硬件预算

权重精度是 bf16(见 config.json 的torch_dtype),235B 参数 × 2 字节,仅权重就约 470GB,单卡放不下,需要多卡张量并行或跨节点部署。好消息是 MoE 结构下每个 token 只激活 22B 参数,推理速度远好于同等规模的稠密模型,这正是「235B 总 / 22B 激活」架构的价值。

如果没有 8 卡以上资源,本地使用可交给 Ollama、LM Studio、MLX-LM、llama.cpp、KTransformers(见 README.md),配合量化做 CPU/GPU 混合推理,代价是延迟更高。

二、准备环境并下载权重

2.1 安装依赖并克隆权重

版本号是关键:transformers<4.51.0不认识本模型的qwen3_moe架构,加载时直接报错。先装依赖再取权重:

# 获取模型权重 git clone https://gitcode.com/hf_mirrors/Qwen/Qwen3-235B-A22B # 安装依赖(transformers 必须 >= 4.51.0) pip install --upgrade "transformers>=4.51.0"

预期结果:ls Qwen3-235B-A22B能看到 118 个.safetensors分片、分词文件和两个 JSON 配置;python -c "import transformers; print(transformers.__version__)"输出 4.51.0 或更高。

三、用 transformers 跑通第一次推理

3.1 加载模型并发起首个请求

这一步用于验证权重与分词器工作正常:device_map="auto"会自动做模型分片,你只负责发问。

from transformers import AutoModelForCausalLM, AutoTokenizer model_path = "./Qwen3-235B-A22B" tokenizer = AutoTokenizer.from_pretrained(model_path) model = AutoModelForCausalLM.from_pretrained( model_path, torch_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, enable_thinking=True # 默认 True;设为 False 切换为非思考模式 ) inputs = tokenizer([text], return_tensors="pt").to(model.device) generated_ids = model.generate(**inputs, max_new_tokens=32768)[0] output_ids = generated_ids[len(inputs.input_ids[0]):].tolist() # 用 </think> 标记(token id 151668)切分思考与答案 try: index = len(output_ids) - output_ids[::-1].index(151668) except ValueError: index = 0 print("thinking:", tokenizer.decode(output_ids[:index], skip_special_tokens=True).strip("\n")) print("answer: ", tokenizer.decode(output_ids[index:], skip_special_tokens=True).strip("\n"))

预期结果:先打印think块内的思考内容,再打印正式回答。多轮对话中还可以用/think、/no_think逐轮软切换模式,模型会遵循最近一条指令。

四、部署 OpenAI 兼容服务

4.1 用 vLLM 或 SGLang 拉起服务

应用要接模型时,不如直接暴露 OpenAI 兼容 API。官方支持的推理框架是sglang>=0.4.6.post1和vllm>=0.8.5:

# vLLM vllm serve Qwen/Qwen3-235B-A22B --enable-reasoning --reasoning-parser deepseek_r1 # SGLang(示例为 8 卡张量并行) python -m sglang.launch_server --model-path Qwen/Qwen3-235B-A22B --reasoning-parser qwen3 --tp 8

预期结果:服务就绪后,/v1/chat/completions接口可被任何 OpenAI SDK 直接调用,思考内容会单独拆出返回。

4.2 在 API 层切换思考模式

enable_thinking开关在 SGLang 和 vLLM 的 API 中都可用。注意:enable_thinking=True时无论是否用/no_think,响应里始终带think块(内容可能为空);enable_thinking=False时软开关失效,彻底不产生思考内容。

五、处理常见坑

5.1 症状-对策速查

症状原因对策
KeyError: 'qwen3_moe'transformers 版本 < 4.51.0升级到最新版
思考模式输出退化、无限重复使用了贪心解码(greedy decoding)思考模式禁用贪心解码,按官方采样参数走;可调presence_penalty(0–2)
YaRN 警告Unrecognized keys in rope_scaling ... 'yarn'transformers 过旧升级transformers>=4.51.0
多轮对话质量下降历史消息里混入了think内容历史只保留最终回答部分(官方 Jinja2 模板已如此实现)

六、验证与调优:采样参数与长上下文

6.1 采样参数与输出长度

  • 思考模式:Temperature=0.6, TopP=0.95, TopK=20(与 generation_config.json 默认值一致)
  • 非思考模式:Temperature=0.7, TopP=0.8, TopK=20
  • 输出长度:常规问题建议 32,768 token;数学、编程竞赛类高难问题可放到 38,912 token

6.2 启用 131,072 token 长上下文(YaRN)

原生上下文 32,768 token,输入+输出经常超出时再启用 YaRN,官方已验证到 131,072 token。两种方式任选:

# 方式一:vLLM 启动参数,不改权重文件 vllm serve ... --rope-scaling '{"rope_type":"yarn","factor":4.0,"original_max_position_embeddings":32768}' --max-model-len 131072

方式二是在 config.json 中写入同结构的rope_scaling字段(llama.cpp 改完需重新生成 GGUF 文件)。两点注意:典型上下文只有 65,536 时把factor调成 2.0;平均上下文不超过 32,768 就别开 YaRN——静态缩放会影响短文本表现,而config.json默认的max_position_embeddings已是 40,960(含 8,192 的 prompt 预留)。

跑通后建议用 2–3 个真实业务问题对比思考/非思考两种模式的回答质量与首 token 延迟,再决定线上默认模式。

【免费下载链接】Qwen3-235B-A22BQwen3-235B-A22B 具有以下特点: 类型:因果语言模型 训练阶段:预训练与后训练 参数数量:总计 235B,激活 22B 参数数量(非嵌入):234B 层数:94 注意力头数(GQA):Q 为 64,KV 为 4 专家数:128 激活的专家数:8 上下文长度:本地为 32,768,使用 YaRN 可处理 131,072 个标记。项目地址: https://ai.gitcode.com/hf_mirrors/Qwen/Qwen3-235B-A22B

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

RELATED READING

延伸阅读

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