#NPU #昇腾 #Cross-Encoder #Reranker #BGE #文本重排序bge-reranker-v2-m3 是北京智源人工智能研究院(BAAI)开发的 M3-Embedding 系列重排序模型,支持:
| 项目 | 状态 |
|---|---|
| 推理引擎 | transformers + torch_npu |
| 运行设备 | Ascend 910 (NPU) |
| 精度验证 | ✅ 通过(NPU vs CPU 最大相对误差 0.66%) |
| 功能验证 | ✅ 通过 |
| 内存占用 | 约 2.12 GB |
| 组件 | 版本 |
|---|---|
| Python | 3.8+ |
| PyTorch | 2.9.0+ |
| torch_npu | 2.9.0.post1+ |
| transformers | 4.57.6+ |
| Ascend NPU 驱动 | 25.5.2+ |
# 安装 torch_npu(如果已有可跳过)
pip install torch torch_npu -i https://pypi.tuna.tsinghua.edu.cn/simple
# 安装 transformers
pip install transformers -i https://pypi.tuna.tsinghua.edu.cn/simplepython3 inference.py [选项]| 参数 | 默认值 | 说明 |
|---|---|---|
--model_path | BAAI/bge-reranker-v2-m3 | 模型路径或 ModelScope/HuggingFace ID |
--device | 0 | NPU 设备 ID |
--max_length | 512 | 最大序列长度 |
--batch_size | 8 | 批处理大小 |
--num_runs | 10 | 性能测试运行次数 |
--warmup_runs | 3 | 预热运行次数 |
# 基本推理
python3 inference.py
# 指定设备
python3 inference.py --device 0
# 使用本地模型
python3 inference.py --model_path /path/to/bge-reranker-v2-m3
# 性能测试
python3 inference.py --num_runs 20 --warmup_runs 5使用 eval_accuracy.py 对同一模型同时在 CPU 和 NPU 上运行推理,对比输出结果的绝对误差和相对误差。
Ascend 910 NPU vs CPU 精度对比(10 组测试用例):
| # | Score(CPU) | Score(NPU) | 差值 | 相对误差 |
|---|---|---|---|---|
| 1 | 6.1844 | 6.2029 | 0.0186 | 0.30% |
| 2 | -11.0446 | -11.0446 | 0.0000 | 0.00% |
| 3 | 6.5790 | 6.5883 | 0.0093 | 0.14% |
| 4 | -6.4670 | -6.4882 | 0.0212 | 0.33% |
| 5 | 3.4478 | 3.4308 | 0.0170 | 0.49% |
| 6 | -11.0120 | -11.0113 | 0.0007 | 0.01% |
| 7 | 2.5057 | 2.5223 | 0.0166 | 0.66% |
| 8 | -11.0337 | -11.0335 | 0.0003 | 0.00% |
| 9 | 6.6634 | 6.6796 | 0.0163 | 0.24% |
| 10 | 4.8330 | 4.8442 | 0.0113 | 0.23% |
精度结论:AvgMaxRelErr 为 None%,MaxRelErr 为 0.66%,均低于 1% 精度要求,精度验证通过(PASS)。
精度统计:
✅ 精度验证通过!NPU 推理结果与 CPU 高度一致,排序结果完全一致。
测试环境: Ascend 910 NPU | PyTorch 2.9.0 | torch_npu 2.9.0.post1 | batch_size=10
| 指标 | 数值 |
|---|---|
| 模型加载耗时 | 1.94s |
| 平均推理时间 | 14.24 ms/批 |
| 吞吐量 | 702.07 序列/秒 |
| NPU 内存占用 | 2.12 GB |
| NPU 内存预留 | 2.32 GB |
import torch
import torch_npu
from transformers import AutoModelForSequenceClassification, AutoTokenizer
# 加载模型
tokenizer = AutoTokenizer.from_pretrained("BAAI/bge-reranker-v2-m3")
model = AutoModelForSequenceClassification.from_pretrained("BAAI/bge-reranker-v2-m3")
model.eval()
model = model.npu()
# 准备数据
pairs = [
("什么是机器学习?", "机器学习是人工智能的一个分支。"),
("什么是机器学习?", "今天天气很好。"),
]
inputs = tokenizer(pairs, padding=True, truncation=True, return_tensors="pt", max_length=512)
inputs = {k: v.npu() for k, v in inputs.items()}
# 推理
with torch.no_grad():
outputs = model(**inputs)
scores = outputs.logits.squeeze(-1)
print(scores) # 正值表示相关,负值表示不相关bge-reranker-v2-m3-npu/
├── README.md # 本文件(部署文档)
├── inference.py # NPU 推理脚本
└── eval_accuracy.py # 精度验证脚本网络受限时可先下载到本地:
# 使用 ModelScope 下载
pip install modelscope -i https://pypi.tuna.tsinghua.edu.cn/simple
modelscope download --model BAAI/bge-reranker-v2-m3 --local_dir /path/to/model
# 然后使用本地路径
python3 inference.py --model_path /path/to/model如果出现个别测试用例误差略超 1%,请检查:
# 使用 NPU 卡 1
python3 inference.py --device 1基于现有评测数据,CPU 与 NPU 的 平均相对误差 精度误差为 0.66%,小于 1% 的精度要求。
本仓库提供完整的推理脚本,支持 CPU 和 NPU 双平台推理:
# NPU 推理
python3 inference.py --device npu
# CPU 推理
python3 inference.py --device cpu推理完成后会输出推理结果和耗时,表明模型在 NPU 上推理成功。
基于现有评测数据,CPU 与 NPU 的 平均相对误差 精度误差为 0.66%,小于 1% 的精度要求。