本文档记录 iic/nlp_structbert_sentiment-classification_chinese-large 在华为昇腾 Ascend NPU (Ascend910) 环境下的适配与验证结果。
相关获取地址:
| 组件 | 版本 |
|---|---|
| NPU | Ascend910 |
| CANN | 25.5.2 |
| PyTorch | 2.9.0+cpu |
| torch_npu | 2.9.0.post1 |
| Python | 3.11.14 |
| ModelScope | latest |
| transformers | latest |
由于 ModelScope Pipeline 不支持直接指定 "npu" 作为 device,采用以下适配方式:
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
import torch_npu
# 在 CPU 上创建 pipeline
semantic_cls = pipeline(
Tasks.text_classification,
model=model_dir,
device="cpu"
)
# 将模型手动转移到 NPU
semantic_cls.model = semantic_cls.model.to("npu:0")
# 执行推理
result = semantic_cls(input="测试文本")关键点:Pipeline 的内置 collate 函数能正确处理 batch 维度,无需手动处理。
python3 inference.py验证结果:
测试条件:单卡 Ascend910,20 次推理取平均值。
| 指标 | 数值 |
|---|---|
| 平均延迟 | 6431.86 ms |
| P50 延迟 | 6438.62 ms |
| P90 延迟 | 6495.47 ms |
| P99 延迟 | 6519.74 ms |
| 最小延迟 | 6218.15 ms |
| 最大延迟 | 6522.57 ms |
| 标准差 | 64.17 ms |
| 吞吐量 | 0.16 推理/秒 |
使用 10 个中文情感分类测试用例进行精度验证,覆盖正面和负面两种情感。
| 指标 | 数值 |
|---|---|
| 测试用例数 | 10 |
| 正确数 | 10 |
| 准确率 | 100.00% |
测试结果明细:
| 输入 | 期望 | 预测 | 置信度 |
|---|---|---|---|
| 这件衣服质量很好,我很喜欢 | 正面 | 正面 | 0.9317 |
| 这个产品质量太差了,用了一天就坏了 | 负面 | 负面 | 0.9375 |
| 今天天气不错,适合出去游玩 | 正面 | 正面 | 0.8723 |
| 启动的时候很大声音,齿轮摩擦的声音 | 负面 | 负面 | 0.8987 |
| 服务态度非常好,下次还会再来 | 正面 | 正面 | 0.9397 |
| 发货太慢了,等了整整一周 | 负面 | 负面 | 0.9009 |
| 这个电影真的很感人,推荐大家去看 | 正面 | 正面 | 0.9461 |
| 价格太贵了,不值这个价 | 负面 | 负面 | 0.9055 |
| 味道很不错,已经回购好几次了 | 正面 | 正面 | 0.9445 |
| 客服完全不理人,体验很差 | 负面 | 负面 | 0.9427 |
"npu" 设备名称,需要通过创建后手动移模型的方式适配inference.py — 推理脚本(NPU 适配版)accuracy_run.py — 精度验证脚本accuracy_run_perf.py — 性能验证脚本eval/accuracy.json — 精度验证结果eval/performance.json — 性能验证结果NPU vs CPU 精度对比(CPU 为基线,NPU 为验证目标):
| 指标 | 数值 |
|---|---|
| 测试用例数 | 6 |
| 最大 logits 差异 | 0.00066081 |
| 预测一致性 | 6/6 (100%) |
| 精度要求 | NPU vs CPU 最大 logits 误差 < 1% |
| 精度结论 | 通过 (差异 远小于 1%) |
精度评测源代码和日志详见 eval/ 目录。