Transformers LLM 推理:vLLM‑MindSpore Plugin的使用
大模型在线服务场景下,传统静态批推理存在显存浪费、排队时延高的痛点。vLLM 凭借 PagedAttention 分页 KV 缓存、连续批处理调度能力,大幅提升 LLM 服务吞吐。vLLM‑MindSpore Plugin 作为对接 MindSpore‑Transformers 的适配插件,把 vLLM 的调度引擎与 MindSpore 图编译、算子融合、混合量化能力结合,在昇腾 Atlas 系列硬件上实现高吞吐 LLM 推理服务。本文从插件架构原理、环境部署、实操调用、性能测试、故障排查完整介绍实践方案,提供可复用代码,帮助开发者快速把 MindSpore‑Transformers 模型转为 vLLM 在线推理服务。
一、vLLM‑MindSpore Plugin 核心原理
vLLM‑MindSpore Plugin 整体分为两层:上层复用原生 vLLM 调度层(Scheduler、BlockAllocator、Cache Engine),负责请求排队、分页 KV 缓存管理、连续批处理;下层替换 Model Executor,接入 MindSpore‑Transformers 作为模型后端,利用 MindSpore 图编译、算子优化、金箍棒量化套件完成昇腾 NPU 上的模型前向计算。
核心能力:
-
PagedAttention 分页 KV 缓存:把 KV 缓存切分为固定大小 Block,显存碎片化大幅降低,支持超高并发请求;
-
MindSpore 图算融合:Prefill/Decode 阶段算子做图编译优化,Cube/Vector 单元异构调度;
-
无缝对接 MindSpore‑Transformers:直接读取 MindSpore 格式 ckpt 权重,支持 AWQ、SmoothQuant、KVCache 量化;
-
兼容 OpenAI API 接口,无需修改上层业务代码,即可切换 MindSpore 推理后端。
适用场景:MindSpore‑Transformers 训练产出的大模型,需要对外提供高 QPS 推理服务;不适合极简单请求离线推理场景,该场景建议直接调用 MindSpore 原生推理接口。
二、实验环境准备
-
硬件:Atlas 800T A2(Ascend910B,单机 8 卡);
-
软件栈:openEuler22.03,CANN8.0.RC2,MindSpore 2.7.1,MindSpore‑Transformers 2.0.0;
-
版本约束:vLLM‑MindSpore Plugin 0.5.1,适配 vLLM‑0.9.1;Python3.9‑3.11;
-
模型:Qwen‑7B MindSpore 权重(MindSpore‑Transformers 导出)。
源码编译安装插件:
# 拉取插件仓库
git clone -b v0.5.1 https://atomgit.com/mindspore/vllm‑mindspore.git
cd vllm‑mindspore
bash install_depend_pkgs.sh
# pip版本大于25.3增加--no‑build‑isolation参数
pip install --no‑build‑isolation .
环境校验脚本,确认插件、MindSpore 导入正常:
python -c "
import mindspore
import vllm_mindspore
print('vLLM‑MindSpore Plugin install ok')
"
设置后端环境变量,指定使用 MindSpore‑Transformers 作为模型后端:
export VLLM_MS_MODEL_BACKEND=MindFormers
export MINDFORMERS_MODEL_CONFIG=/path/to/qwen7b_config.yaml
三、实操:离线推理与启动 API 服务
3.1 离线 Python 调用示例
from vllm import LLM, SamplingParams
# 采样参数配置
sampling_params = SamplingParams(
temperature=0.7,
top_p=0.8,
max_tokens=256
)
# 初始化LLM,指定MindSpore‑Transformers权重路径
llm = LLM(
model="/data/mindspore_qwen7b",
trust_remote_code=True,
tensor_parallel_size=2, # TP张量并行卡数
max_model_len=2048,
block_size=128,
gpu_memory_utilization=0.85
)
prompts = [
"请简单介绍昇思MindSpore框架",
"解释PagedAttention分页缓存原理"
]
outputs = llm.generate(prompts, sampling_params=sampling_params)
for out in outputs:
prompt = out.prompt
generated_text = out.outputs[0].text
print(f"Q:{prompt}\nA:{generated_text}\n")
3.2 启动 OpenAI 兼容 API 服务
vllm‑mindspore serve \
--model /data/mindspore_qwen7b \
--trust‑remote‑code \
--tensor‑parallel‑size 2 \
--max‑model‑len 2048 \
--block‑size 128 \
--gpu‑memory‑utilization 0.85 \
--port 8000
客户端 curl 调用测试:
curl http://127.0.0.1:8000/v1/completions \
‑H "Content‑Type: application/json" \
‑d '{
"model":"qwen7b",
"prompt":"什么是MindSpore‑Transformers",
"max_tokens":128
}'
四、关键调优参数说明
-
block_size:KV 缓存块大小,推荐 128;块过小会增加调度开销,过大造成块内显存浪费; -
gpu_memory_utilization:NPU 显存占用上限,一般设置 0.8‑0.9,预留部分显存给 MindSpore 图编译临时内存; -
tensor_parallel_size:张量并行 TP 卡数,大模型开启 TP,多卡拆分权重; -
max‑num‑seqs:服务最大并发序列,受显存和 block 数量约束。
重要提示:MindSpore 图编译发生在第一次 prefill 请求,首请求会有明显编译耗时,属于正常现象;后续请求直接复用编译后的图,吞吐显著提升。
五、常见问题排查
-
ModuleNotFoundError: No module named 'mindspore' 排查:MindSpore 未安装成功;确认 pip 环境,源码安装时 pip>=25.3 需要增加
--no‑build‑isolation参数。 -
首请求耗时极长,后续请求很快 现象:第一次推理延迟很高,后续请求性能正常。 排查:MindSpore 执行图编译;生产环境建议服务启动后发送预热请求,完成编译再接入业务流量。
-
NPU OOM 显存溢出 排查:调小
gpu_memory_utilization,降低max‑num‑seqs并发数;开启 KVCache 量化,减少 KV 缓存显存占用;增大 TP 并行卡数拆分模型权重。 -
报 aclnn 算子 RuntimeError 排查:CANN 版本与 MindSpore 版本配套关系不匹配,核对官方版本矩阵;升级或者回退 CANN、MindSpore 版本。
-
权重加载失败,提示 yaml config 找不到 排查:环境变量
MINDFORMERS_MODEL_CONFIG指向 MindSpore‑Transformers 的 yaml 配置文件,路径必须正确。
六、性能实测对比
测试硬件 Atlas800T A2,Qwen‑7B 模型,max‑len=2048,对比MindSpore 原生静态批推理
实测结果可见,依托 PagedAttention 分页 KV 缓存和连续批调度,vLLM‑MindSpore Plugin 可以显著提升 MindSpore‑Transformers 模型的服务并发、吞吐,降低长尾时延,适合真实线上业务流量。
七、总结
vLLM‑MindSpore Plugin 打通 MindSpore‑Transformers 训练到高吞吐在线推理链路,保留 MindSpore 图编译、混合量化优势,同时继承 vLLM 成熟调度与分页 KV 缓存能力。开发者可以复用 MindSpore 完整训练微调链路,不需要迁移权重格式,快速上线 OpenAI 兼容的 LLM 推理服务。
鲲鹏昇腾开发者社区是面向全社会开放的“联接全球计算开发者,聚合华为+生态”的社区,内容涵盖鲲鹏、昇腾资源,帮助开发者快速获取所需的知识、经验、软件、工具、算力,支撑开发者易学、好用、成功,成为核心开发者。
更多推荐
所有评论(0)