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.safetensors | bf16 权重分片,共 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),仅供参考