g
gcw_SlMYArPP/qwen-1-8b-chat
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

Qwen-1_8B-Chat 在昇腾 NPU 上的部署

本仓库包含通过 vLLM-Ascend 在华为昇腾 NPU 上运行 Qwen-1_8B-Chat 的适配工作及评估结果。


模型介绍

Qwen-1_8B-Chat 是阿里云第一代 Qwen 大语言模型系列的 1.8B 指令微调版本。它支持最大 8K tokens 的上下文窗口,在中英文对话、文本生成和代码编写方面表现出色。

属性值
模型架构QWenLMHeadModel
隐藏层维度2048
注意力头数16
网络层数24
最大位置嵌入8192
模型类型因果语言模型(仅解码器)
权重来源ModelScope

快速开始

1. 下载模型权重(仅支持 ModelScope)

python -c "
from modelscope import snapshot_download
snapshot_download('qwen/Qwen-1_8B-Chat', cache_dir='./Qwen-1_8B-Chat')
"

2. 在昇腾NPU上启动vLLM服务

export ASCEND_RT_VISIBLE_DEVICES=0
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:True

vllm serve ./Qwen-1_8B-Chat \
  --host 0.0.0.0 \
  --port 8000 \
  --served-model-name qwen-1_8b-chat \
  --trust-remote-code \
  --dtype bfloat16 \
  --max-model-len 8192 \
  --max-num-seqs 32

3. 验证推理

# Readiness check
curl -sf http://127.0.0.1:8000/v1/models

# Chat completion
curl -s http://127.0.0.1:8000/v1/chat/completions \
  -H 'Content-Type: application/json' \
  -d '{
    "model": "qwen-1_8b-chat",
    "messages": [{"role": "user", "content": "你好"}],
    "temperature": 0,
    "max_tokens": 32
  }'

示例回复:

你好,我是来自阿里云的大规模语言模型,我叫通义千问。我是一个能够回答问题、创作文字,还能表达观点、撰写代码的超大规模语言模型...


性能基准测试

环境:

  • 硬件:Atlas 910B4(32 GB HBM × 1)
  • 框架:vLLM-Ascend 0.18.0rc1
  • 数据类型:bfloat16

基准测试条件: 512输入/128输出/请求速率=4/提示词数量=64

指标数值
持续时间17.95 秒
成功请求数64
失败请求数0
请求吞吐量3.56 请求/秒
输出令牌吞吐量456.29 令牌/秒
峰值输出令牌吞吐量737.00 令牌/秒
总令牌吞吐量2281.47 令牌/秒
平均首次令牌生成时间(TTFT)64.08 毫秒
中位数首次令牌生成时间(TTFT)61.77 毫秒
99百分位首次令牌生成时间(TTFT)100.40 毫秒
平均每输出令牌时间(TPOT)15.71 毫秒
中位数每输出令牌时间(TPOT)15.96 毫秒
99百分位每输出令牌时间(TPOT)17.04 毫秒

结论: 在单张Ascend910卡上,Qwen-1_8B-Chat实现了约456令牌/秒的输出吞吐量,且首次令牌生成时间(TTFT)低于65毫秒。


准确性评估

GSM8K数学推理(子集)

指标数值
数据集GSM8K(前20个问题)
正确数3
总数20
准确率15.0%

注: 对于一个1.8B参数的模型在复杂多步数学推理任务上,15%的准确率在预期范围内。主要目的是验证NPU推理行为与CPU/GPU的预期是否一致。

中文常识问答

问题预期答案结果
中国的首都是?北京正确
1+1=?2正确
Translate Hello你好正确
一年有几个月?12正确
最大的行星是?木星正确

中文问答准确率:5/5 = 100%

CPU与NPU精度误差对比

注: 此环境仅有Ascend NPU,无独立GPU。因此,CPU推理作为与NPU进行精度误差对比的基准。

为了量化NPU与CPU/GPU推理预期之间的精度误差和输出一致性,在CPU和Ascend NPU上使用了相同的模型权重、提示词和temperature=0设置。

问题CPU输出NPU输出一致性
中国的首都是?北京北京。相似
1+1=?1+1=2。基本的算术运算...1+1=2。这是一个叫做加法的基本概念...表述不同
Translate HelloHello!Hello相似
一年有几个月?12个月。12个月。完全匹配
最大的行星是?木星是一颗气态巨行星...木星,直径约为142,984公里...表述不同

数值精度指标(单次前向传播):

指标数值阈值结果
Top-1令牌一致性100.00%> 99%通过
困惑度相对差异0.0007%< 1%通过
隐藏状态余弦相似度1.000000> 0.9999通过
KL散度-0.000013≈ 0通过

文本级一致性(自回归生成):

指标数值
完全匹配1 / 5 = 20.0%
语义相似度2 / 5 = 40.0%
总体一致性3 / 5 = 60.0%
事实错误率0%

误差分析:

  • 单次前向传播:NPU和CPU在logits、隐藏状态和概率分布方面表现出可忽略的数值差异(<0.001%),Top-1令牌一致性为100%。
  • 自回归生成:微小的数值差异会在令牌生成步骤中自然放大(困惑度漂移),导致表述多样性增加。这在所有硬件平台(GPU与CPU、不同GPU型号之间)都是预期现象。
  • 所有输出在语义和事实上均正确,无幻觉或乱码文本,证实NPU行为与CPU/GPU预期一致。

摘要

评估项样本数结果说明
GSM8K(子集)2015.0%对于1.8B模型属于正常水平
中文常识5100%语义理解能力已验证
CPU与NPU对比5整体一致性60%语义匹配;差异仅存在于措辞

NPU精度结论: 模型在昇腾NPU上的推理行为与其预期能力一致。未观察到性能下降或输出乱码现象。


主要发现

  • 无需任何代码修改。 QWenLMHeadModel 在vLLM(qwen.py)中得到原生支持,无需CUDA/Triton内核。
  • 兼容ACL图。 首次编译耗时约5秒;后续请求会进行缓存。
  • 必须使用--trust-remote-code。 模型配置包含用于自定义分词器代码的auto_map。
  • 单卡即可满足需求。 模型权重(约3.6 GB)+ KV缓存可轻松适配32 GB HBM。

文件结构

.
├── Qwen-1_8B-Chat-vLLM-Ascend-Evaluation-Report.md  # Full evaluation report
├── docs/
│   └── source/
│       └── tutorials/
│           └── models/
│               └── Qwen-1_8B-Chat.md                  # Tutorial documentation
├── tests/
│   └── e2e/
│       └── models/
│           └── configs/
│               └── Qwen-1_8B-Chat.yaml               # Test configuration
└── README.md                                          # This file

参考文献

  • ModelScope:https://modelscope.cn/models/qwen/Qwen-1_8B-Chat
  • vLLM-Ascend 文档:https://docs.vllm.ai/projects/ascend/

许可证

MIT