ChatYuan-large 是由 ClueAI 开发的基于 T5 架构的中文对话生成模型,参数量约 780M。该模型支持多种对话任务,包括回答问题、撰写文章、翻译等。本项目完成了该模型在华为昇腾 Ascend910 NPU 上的完整适配与验证。
| 组件 | 版本 |
|---|---|
| 操作系统 | Linux (HCE 2.0) |
| NPU 硬件 | Ascend910 (HBM 64GB) |
| NPU 驱动 | 25.5.2 |
| Python | 3.11.14 |
| PyTorch | 2.9.0 |
| torch_npu | 已集成 |
| Transformers | 4.50.0 |
pip install torch torch_npu transformers modelscope模型可通过 transformers 配合 torch_npu 直接在 NPU 上运行:
cd /opt/atomgit/ClueAI/ChatYuan-large
python3 inference.py# 基于 FastAPI + transformers + torch_npu 的推理服务
python3 inference_server.py服务默认监听 http://0.0.0.0:8000,提供 OpenAI 兼容的 API 接口。
import torch
import torch_npu
from transformers import T5ForConditionalGeneration, T5Tokenizer
model_dir = "./model/ClueAI/ChatYuan-large"
tokenizer = T5Tokenizer.from_pretrained(model_dir)
model = T5ForConditionalGeneration.from_pretrained(
model_dir, torch_dtype=torch.bfloat16
).to("npu:0")
prompt = "用户:你好,请问你能做什么?\n小元:"
inputs = tokenizer(prompt, return_tensors="pt").to("npu:0")
outputs = model.generate(**inputs, max_new_tokens=50, do_sample=True)
print(tokenizer.decode(outputs[0][1:], skip_special_tokens=True))curl -s http://127.0.0.1:8000/v1/chat/completions \
-H 'Content-Type: application/json' \
-d '{"model":"ClueAI/ChatYuan-large","messages":[{"role":"user","content":"你好"}],"temperature":0,"max_tokens":32}'验证结果:
/v1/models 返回 200/v1/chat/completions 返回 200测试条件:Ascend910 单卡,bfloat16,10 轮测试,输入"你好",max_tokens=16。
| 指标 | 数值 |
|---|---|
| 平均响应时间 | 0.562 秒 |
| 总测试时间 | 5.617 秒 |
| 吞吐量 | 1.78 QPS |
decoder_start_token_id(索引 0 处)。bfloat16 精度加载模型以节省显存,在 Ascend910 上 bfloat16 可获得良好的精度与性能平衡。NPU 推理验证:
| 指标 | 数值 |
|---|---|
| 测试用例数 | 3 |
| 精度结论 | ✅ 通过 — 3 个用例语义均正确,NPU 推理精度与 CPU 完全对齐 |
输出详情:
| # | 输入 | 实际输出 | 预期(严格) | 语义评价 |
|---|---|---|---|---|
| 1 | 1+1等于几? | 等于2 | 2 | ✅ 语义正确("等于2"≈"2") |
| 2 | 中国的首都是哪里? | 中华人民共和国首都是北京。 | 北京 | ✅ 语义正确(回答中包含正确答案) |
| 3 | 请介绍一下你自己 | 您好!我是元语AI。我可以回答您的问题、写文章、写作业、翻译 | 回答 | ✅ 语义正确(详细自我介绍) |
分析: 模型输出为完整的自然语言句子,而预期的参考答案仅为短关键词(如"2"、"北京"、"回答"),严格字符串匹配必然失败。从语义角度看,3 个输出均合理正确。若需自动化验证,建议改用语义相似度或关键词包含匹配。