X
Xiaoxy510/cross-encoder--mmarco-mMiniLMv2-L12-H384-v1-ascend
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

cross-encoder/mmarco-mMiniLMv2-L12-H384-v1 on Ascend 910B3

1. 简介

本文档记录 cross-encoder/mmarco-mMiniLMv2-L12-H384-v1 在昇腾 Ascend 910B3 NPU 上的迁移适配、推理部署与精度评测结果。

该模型是一个基于 XLM-RoBERTa 的多语言交叉编码器(Cross-Encoder),支持多种语言的文本相关性排序。模型基于 paraphrase-multilingual-MiniLMv2 初始化,在 mMARCO 数据集上微调,参数量约 117.79M。

本次适配工作包括:

  • 在 NPU(Ascend 910B3)上验证多语言交叉编码器推理的正确性
  • 对比 NPU 与 CPU 的输出精度,确保误差 < 1%
  • 提供可直接使用的 NPU 推理脚本 inference.py
  • 提供精度与性能评测脚本 eval.py

相关获取地址:

  • 原始模型(HuggingFace):https://huggingface.co/cross-encoder/mmarco-mMiniLMv2-L12-H384-v1
  • 适配后 NPU 模型仓库(GitCode):https://gitcode.com/Xiaoxy510/cross-encoder--mmarco-mMiniLMv2-L12-H384-v1-ascend

2. 验证环境

组件版本
Python3.9.13
torch2.8.0+cpu
torch_npu2.8.0.post4
transformers4.57.6
numpy1.24.4
  • NPU:Ascend 910B3 × 8 逻辑卡
  • 驱动版本:25.5.2

3. 模型适配与部署

3.1 适配说明

该模型使用 XLM-RoBERTa 架构,通过 AutoModelForSequenceClassification 加载,transformers 库原生支持。NPU 适配无需修改模型结构或权重。

已验证通过的适配流程:

import torch
import torch_npu
from transformers import AutoModelForSequenceClassification, AutoTokenizer

model = AutoModelForSequenceClassification.from_pretrained("cross-encoder/mmarco-mMiniLMv2-L12-H384-v1")
model = model.npu()
model.eval()

tokenizer = AutoTokenizer.from_pretrained("cross-encoder/mmarco-mMiniLMv2-L12-H384-v1")
inputs = tokenizer(["query"], ["passage"], return_tensors="pt")
inputs = {k: v.npu() for k, v in inputs.items()}

with torch.no_grad():
    score = model(**inputs).logits.cpu().item()

3.2 环境准备

pip install torch torch_npu transformers -i https://repo.huaweicloud.com/repository/pypi/simple/
export HF_ENDPOINT=https://hf-mirror.com

3.3 推理脚本使用

# 英文推理
python inference.py --query "How many people live in Berlin?" --passage "Berlin has 3.5 million people."

# 中文推理
python inference.py --query "柏林的人口是多少?" --passage "柏林有约350万居民。"

# 日文推理
python inference.py --query "ベルリンの人口は?" --passage "ベルリンには約350万人の住民がいます。"

# 批量推理
python inference.py --input pairs.json --output scores.json

4. Smoke 验证

python inference.py --query "Wie heißt die Hauptstadt von Deutschland?" --passage "Berlin ist die Hauptstadt und ein Land der Bundesrepublik Deutschland."

5. 性能参考

测试条件:batch_size=12,seq_len=128,float32 精度,连续 10 次取平均。

指标CPUNPU (Ascend 910B3)
平均推理时间 (12 pairs)~7300 ms~26 ms
单 pair 平均耗时~608 ms~2.2 ms
加速比1x~280x
参数量117.79M117.79M
模型大小449.3 MB449.3 MB

6. 精度评测

评测方法

  1. 在 CPU 上加载模型并推理得到参考评分
  2. 在 NPU 上加载同一权重并推理得到 NPU 评分
  3. 对比两组输出,计算多个精度指标

评测结果

使用 12 组多语言(英/德/法/西/日/中文)的(查询,段落)对进行评测:

指标数值要求结果
MSE9.00e-5--
Cosine Similarity0.99999891> 0.999✓
Mean Relative Error0.340%< 1%✓ PASS
Ranking Agreement100%-✓

结论:NPU 精度误差 0.340%,满足精度要求(< 1%),多语言推理结果与 CPU 一致。

详细评测日志见 eval_log.txt。

7. 注意事项

  1. 权重文件:NPU 适配无需修改原始权重
  2. 多语言支持:该模型支持英、德、法、西、日、中文等多种语言
  3. 设备选择:脚本默认自动检测 NPU,若 NPU 不可用则回退到 CPU
  4. 评分解释:输出分数为原始 logit,分数越高表示查询与段落越相关
  5. torch_npu 版本:确保与 torch 版本匹配
  6. 单卡推理:当前使用单张 NPU 卡