如何用vllm-ascend启动Qwen3-235B-A22B-quantized.w4a8:昇腾NPU推理服务部署实战
如何用vllm-ascend启动Qwen3-235B-A22B-quantized.w4a8:昇腾NPU推理服务部署实战
想在昇腾 NPU 上跑 Qwen3-235B 大模型,却受困于显存不够、部署步骤复杂?本文是一份面向新手的 vllm-ascend 部署 Qwen3-235B-A22B-quantized.w4a8 完整实战指南:从环境准备、模型下载,到一条命令启动推理服务,再到接口验证与常见问题排查,带你快速在国产算力上跑起 2350 亿参数的 MoE 大模型。
一、这个模型是什么?W4A8 量化为什么重要
Qwen3-235B-A22B 是千问团队的 MoE 大模型:总参数约 2350 亿,每次推理仅激活约 220 亿参数(A22B = Active 22B),性能强且推理效率高。而本仓库 Qwen3-235B-A22B-quantized.w4a8 是 vllm-ascend 团队针对昇腾 NPU 做好的 W4A8 量化版本,可直接被 vllm-ascend 加载推理。
💡 W4A8 是什么意思? 权重(Weight)用 4-bit 存储,激活值(Activation)用 8-bit 计算。相比原始 bfloat16 模型,权重体积大幅缩小,让 235B 大模型能在 8 张 910B(64GB)级别集群上跑得动,同时尽量保持精度。
量化细节定义在 recipe.yaml 和 config.json 中,核心策略如下:
| 量化对象 | 量化方案 | 说明 |
|---|---|---|
注意力层 q/k/v/o_proj |
W8A8(int8,channel/token 对称) | 权重按通道量化,激活按 token 动态量化 |
MoE 专家 gate/up/down_proj |
W4A8(int4,group_size=128) | 专家权重 4-bit 分组量化,是体积压缩的主力 |
路由 mlp.gate、lm_head |
不量化 | 保持高精度,避免路由与输出层失真 |
二、仓库结构:先看几个关键文件
本仓库为标准 HuggingFace 格式模型目录,权重以 49 个 safetensors 分片存放(Git LFS 存储,clone 后自动拉取真实权重):
| 文件 | 作用 |
|---|---|
| config.json | 模型结构:Qwen3MoeForCausalLM、94 层、128 个专家、每 token 激活 8 个、最大上下文 40960,以及 compressed-tensors 量化配置 |
| recipe.yaml | 量化配方:W4A8/W8A8 分组策略与 ignore 列表 |
| model.safetensors.index.json | 权重分片索引,vllm-ascend 按它加载 49 个分片 |
| generation_config.json | 推荐生成参数:temperature=0.6、top_k=20、top_p=0.95 |
| chat_template.jinja | 对话模板,多轮对话格式自动套用 |
| tokenizer.json / vocab.json | 分词器,词表大小 151936 |
| README.md | 模型卡片与下载方式说明 |
三、环境准备:CANN + vllm-ascend
1. 硬件与软件要求
- 硬件:推荐 8 × 昇腾 910B(64GB)NPU,W4A8 权重整体约 120GB+,8 卡 TP 并行留足 KV Cache 空间
- 驱动与固件:已安装昇腾 NPU 驱动,
npu-smi info能正常列出设备 - CANN:安装与 vllm-ascend 版本匹配的 CANN Toolkit + Kernels(安装后配置
ASCEND_HOME_PATH、LD_LIBRARY_PATH等环境变量) - Python:3.10 / 3.11,建议使用独立虚拟环境
2. 安装 vllm-ascend
vllm-ascend 是 vLLM 的昇腾适配分支,安装后即可用与 vLLM 相同的方式部署模型:
pip install vllm-ascend
⚠️ vllm-ascend 对 vLLM 版本与 CANN 版本有严格对应关系,请以其官方发布说明为准选择配套版本,避免版本错位导致的算子报错。
四、下载模型到本地
使用 git clone 拉取本仓库(LFS 会自动下载真实权重,约需数小时,取决于带宽):
git clone https://gitcode.com/hf_mirrors/vllm-ascend/Qwen3-235B-A22B-quantized.w4a8
完成后确认目录中 49 个 model-xxxxx-of-00049.safetensors 分片大小正常(而非仅 135 字节的 LFS 指针),即可进入下一步。
五、一条命令启动推理服务
模型目录就是 --model 参数。以下命令在 8 卡 910B 上以张量并行(TP=8)方式启动 OpenAI 兼容推理服务:
vllm serve ./Qwen3-235B-A22B-quantized.w4a8 \
--tensor-parallel-size 8 \
--max-model-len 8192 \
--port 8000
如果你的 vllm-ascend 版本使用独立入口,等价命令为:
python -m vllm_ascend.entrypoints.api_server \
--model ./Qwen3-235B-A22B-quantized.w4a8 \
--tensor-parallel-size 8 \
--max-model-len 8192 \
--port 8000
关键参数速查
| 参数 | 推荐值 | 说明 |
|---|---|---|
--model |
模型本地路径 | vllm-ascend 会自动识别 config.json 中的 compressed-tensors 量化配置,无需手动指定量化方式 |
--tensor-parallel-size |
8 | MoE 大模型建议卡数越多越好;4 卡显存紧张时可尝试 4 + 较小 max-model-len |
--max-model-len |
8192 | 模型支持 40960,但上下文越长 KV Cache 占用越大,按业务实际设置 |
--port |
8000 | 服务监听端口 |
首次启动需要加载 49 个权重分片并初始化算子,耗时较长属正常现象,看到 Uvicorn running on http://0.0.0.0:8000 即表示服务就绪。
六、验证服务:发起第一次对话
服务启动后,用 curl 直接调用 OpenAI 兼容接口即可:
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "./Qwen3-235B-A22B-quantized.w4a8",
"messages": [
{"role": "user", "content": "你好,请用一句话介绍昇腾NPU"}
],
"temperature": 0.6,
"top_p": 0.95
}'
收到正常 JSON 响应(含 choices 字段)即部署成功。生成参数(temperature、top_k、top_p)建议与 generation_config.json 中的推荐值保持一致。
七、常见问题与调优建议
- OOM / 显存不足:降低
--max-model-len,或检查是否误用了更小的--tensor-parallel-size;确认没有其他进程占用 NPU(npu-smi info排查)。 - 启动时报算子/版本错误:优先核对 vllm-ascend、vLLM、CANN 三者版本是否配套。
- 权重加载报 LFS 指针错误:说明 clone 时 LFS 未生效,需
git lfs install后重新拉取。 - 并发吞吐调优:MoE 模型可关注专家并行、
--max-num-seqs等参数,从默认值起步逐步压测。 - 量化精度疑问:本模型对路由
mlp.gate与lm_head保持未量化(见 recipe.yaml 的 ignore 列表),是精度保障的关键设计。
八、总结
部署路径可以浓缩为三步:装 vllm-ascend → git clone 模型 → vllm serve 启动。W4A8 量化让 Qwen3-235B 级别的 MoE 大模型首次能在 8 卡 910B 集群上实用化,配合 vllm-ascend 的高性能 PagedAttention 与 MoE 推理优化,即可获得一个标准的 OpenAI 兼容推理服务,可直接对接你的业务应用。