本文档记录 cross-encoder/ms-marco-MiniLM-L12-v2 在昇腾 Ascend 910B3 NPU 上的迁移适配、推理部署与精度评测结果。
该模型是一个基于 MiniLM 的交叉编码器(Cross-Encoder),用于信息检索中的文本相关性排序。模型接受(查询,段落)对作为输入,输出相关性评分(分数越高越相关)。参数量约 33.36M。
本次适配工作包括:
inference.pyeval.py相关获取地址:
参考文档:
| 组件 | 版本 |
|---|---|
Python | 3.9.13 |
torch | 2.8.0+cpu |
torch_npu | 2.8.0.post4 |
transformers | 4.57.6 |
numpy | 1.24.4 |
Ascend 910B3 × 8 逻辑卡25.5.2该模型使用标准 BERT 架构(MiniLM),transformers 库原生支持。NPU 适配无需修改模型结构或权重。
已验证通过的适配流程:
import torch
import torch_npu
from transformers import AutoModelForSequenceClassification, AutoTokenizer
model = AutoModelForSequenceClassification.from_pretrained("cross-encoder/ms-marco-MiniLM-L12-v2")
model = model.npu()
model.eval()
tokenizer = AutoTokenizer.from_pretrained("cross-encoder/ms-marco-MiniLM-L12-v2")
inputs = tokenizer(["query"], ["passage"], return_tensors="pt")
inputs = {k: v.npu() for k, v in inputs.items()}
with torch.no_grad():
outputs = model(**inputs)
score = outputs.logits.cpu().item()pip install torch torch_npu transformers -i https://repo.huaweicloud.com/repository/pypi/simple/
export HF_ENDPOINT=https://hf-mirror.com# NPU 推理
python inference.py --query "How many people live in Berlin?" --passage "Berlin has 3.5 million people."
# 从 JSON 文件批量推理
python inference.py --input pairs.json --output scores.json
# CPU 推理
python inference.py --query "Q" --passage "P" --device cpuJSON 输入格式:
[
{"query": "question", "passage": "relevant passage"},
{"query": "question", "passage": "irrelevant passage"}
]python inference.py --query "How many people live in Berlin?" --passage "Berlin had a population of 3.5 million."测试条件:batch_size=12,seq_len=128,float32 精度,连续 20 次取平均。
| 指标 | CPU | NPU (Ascend 910B3) |
|---|---|---|
| 平均推理时间 (12 pairs) | ~1150 ms | ~18 ms |
| 单 pair 平均耗时 | ~96 ms | ~1.5 ms |
| 加速比 | 1x | ~60x |
| 参数量 | 33.36M | 33.36M |
| 模型大小 | 127.2 MB | 127.2 MB |
使用 12 组(查询,段落)对进行评测:
| 指标 | 数值 | 要求 | 结果 |
|---|---|---|---|
| MSE | 1.03e-5 | - | - |
| Cosine Similarity | 1.00000000 | > 0.999 | ✓ |
| Mean Relative Error | 0.038% | < 1% | ✓ PASS |
结论:NPU 精度误差 0.038%,满足精度要求(< 1%)。
详细评测日志见 eval_log.txt。
torch_npu 版本:确保与 torch 版本匹配