技术背景
昇腾是华为自研的 AI 计算芯片,采用达芬奇架构,提供从训练到推理的全场景覆盖。其核心优势在于全栈自研和自主可控,已在金融、能源等关键场景规模化落地。
本次实践聚焦于在昇腾 NPU 上部署 Mistral-7B-Instruct-v0.2 大语言模型,对比原生部署与 vLLM Ascend 优化两种方案的性能差异,为实际生产环境选型提供参考。
环境准备
1. 云资源与系统配置
使用支持昇腾 910B 的云端实例,操作系统为 EulerOS 2.9。关键组件版本如下:
| 组件 | 版本 | 说明 |
|---|---|---|
| Python | 3.8 | 基础运行环境 |
| PyTorch | 2.1.0 | 深度学习框架 |
| CANN | 8.0 | 昇腾计算架构 |
| torch_npu | 2.1.0.post3 | PyTorch-昇腾适配插件 |
启动后进入终端验证 NPU 可用性:
python -c "import torch; import torch_npu; print(f'PyTorch: {torch.__version__}'); print(f'torch_npu: {torch_npu.__version__}'); print(f'NPU available: {torch.npu.is_available()}')"
预期输出应显示 NPU available: True。
2. 加速模型下载
为避免网络波动影响下载效率,建议配置 Hugging Face 国内镜像:
export HF_ENDPOINT=https://hf-mirror.com
方案一:原生部署(transformers + torch_npu)
1. 依赖安装
在昇腾 NPU 上运行模型,需搭建三层推理环境:模型层(Hugging Face)、框架层(PyTorch + accelerate)、硬件层(CANN)。
pip install transformers accelerate --upgrade
2. 模型加载与推理
核心逻辑是通过 device_map="npu:0" 自动将模型迁移至 NPU,并使用 FP16 精度节省显存。
import torch
import torch_npu
from transformers import AutoModelForCausalLM, AutoTokenizer
model_path = "./models/Mistral-7B-Instruct-v0.2"
# 加载模型
model = AutoModelForCausalLM.from_pretrained(
model_path,
torch_dtype=torch.float16,
device_map="npu:0"
)
tokenizer = AutoTokenizer.from_pretrained(model_path)
model.eval()
# 推理测试
prompt = "介绍一下人工智能的发展历程"
inputs = tokenizer(prompt, return_tensors="pt").to("npu:0")
with torch.no_grad():
outputs = model.generate(
**inputs,
max_new_tokens=120,
do_sample=True,
temperature=0.7
)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
print(response)
3. 性能表现
在 FP16 精度下,单请求平均吞吐量约为 18.2 tokens/s,显存占用约 15GB。具体数据如下:
| 测试类型 | 平均延迟 (120 tokens) | 吞吐量 (tokens/s) |
|---|---|---|
| 中文问答 | 6763 ms | 17.74 |
| 英文问答 | 6582 ms | 18.23 |
| 代码生成 | 6578 ms | 18.24 |
| 逻辑推理 | 6436 ms | 18.64 |
| 长上下文 | 6549 ms | 18.32 |
| 平均 | ~6.58 秒 | ~18.2 |
方案二:vLLM Ascend 优化
1. 安装 vLLM
推荐使用源码安装以适配特定版本,国内用户可借助 Gitee 镜像加速。
git clone https://gitee.com/mirrors/vllm-ascend.git
cd vllm-ascend
git checkout v0.7.3
pip install setuptools_scm wheel -i https://pypi.tuna.tsinghua.edu.cn/simple
export COMPILE_CUSTOM_KERNELS=0
pip install --no-build-isolation -e .
2. 启动服务
支持命令行启动或 Python 代码调用,开启连续批处理以提升并发能力。
# 命令行启动
vllm serve mistralai/Mistral-7B-Instruct-v0.2 \
--tensor-parallel-size 1 \
--max-model-len 4096 \
--dtype float16 \
--port 8000
3. 性能对比
vLLM 通过 PagedAttention 等技术显著提升了吞吐能力,实测数据显示单请求吞吐量提升至 45-60 tokens/s。
| 方案 | 延迟 (120 tokens) | 吞吐量 (tokens/s) | 显存占用 |
|---|---|---|---|
| 原生方案 | 6580 ms | 18.2 | ~15GB |
| vLLM Ascend | 2000-2700 ms | 45-60 | ~16GB |
| 提升 | 2.4-3.3 倍 | 2.5-3.3 倍 | +6% |
在高并发场景下(QPS=16),vLLM 吞吐量可达 911 tokens/s,且延迟增长平缓,更适合在线服务。
常见问题与总结
1. 常见坑点
- Tokenizers 版本:若遇到导入错误,请升级
pip install tokenizers>=0.14.0。 - 显存不足:尝试 INT8 量化加载,设置
load_in_8bit=True。 - 下载失败:确保设置了
HF_ENDPOINT环境变量并启用断点续传。
2. 选型建议
- 开发验证:原生方案代码简单,无需额外安装,适合快速跑通流程。
- 生产服务:vLLM Ascend 在高吞吐和低延迟方面优势明显,推荐用于多用户交互场景。
- 成本控制:利用免费云资源完成初步验证,根据实际 QPS 需求调整 batch size。
总体而言,vLLM Ascend 方案在保持较低显存开销的同时,实现了数倍的性能飞跃,是当前昇腾 NPU 上部署大模型的高效选择。

