weixin_72661020/Fengshenbang-Erlangshen-RoBERTa-330M-NLI
模型介绍文件和版本Pull Requests讨论分析

Fengshenbang/Erlangshen-RoBERTa-330M-NLI 昇腾 NPU 适配

1. 简介

Fengshenbang/Erlangshen-RoBERTa-330M-NLI 是一个基于 RoBERTa 架构的中英文自然语言推理(NLI)模型,参数量为 330M。该模型使用 BERT 架构进行分类,支持三个标签:CONTRADICTION(矛盾)、NEUTRAL(中性)、ENTAILMENT(蕴含)。

  • 模型类型:BertForSequenceClassification
  • 参数量:330M
  • 支持语言:中文、英文
  • 推理框架:PyTorch + torch_npu
  • 模型下载地址(ModelScope):https://modelscope.cn/models/Fengshenbang/Erlangshen-RoBERTa-330M-NLI

2. 验证环境

组件版本
NPUAscend 910
CANN25.5.2
PyTorch2.x (with NPU support)
torch_npuNPU兼容版本
Python3.x

3. 推理脚本

由于该模型为 BertForSequenceClassification(编码器模型),无法使用 vLLM 进行推理。使用原生 PyTorch + torch_npu 进行推理。

# 运行推理
python3 inference.py

4. Smoke 验证

python3 -c "
import torch
from transformers import AutoTokenizer, AutoModelForSequenceClassification

model_path = 'model/Fengshenbang/Erlangshen-RoBERTa-330M-NLI'
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForSequenceClassification.from_pretrained(model_path)
model.to('npu:0')
model.eval()

premise = '一个男人在演奏吉他。'
hypothesis = '这个人在弹奏乐器。'
inputs = tokenizer(premise, hypothesis, return_tensors='pt', truncation=True, max_length=512)
inputs = {k: v.to('npu:0') for k, v in inputs.items()}
with torch.no_grad():
    outputs = model(**inputs)
    pred = torch.argmax(outputs.logits, dim=-1).item()
id2label = {0: 'CONTRADICTION', 1: 'NEUTRAL', 2: 'ENTAILMENT'}
print(f'预测结果: {id2label[pred]}')
"

5. 性能参考

指标CPUNPU (Ascend 910)
平均推理时间384.53 ms32.13 ms
加速比1x11.97x

6. 精度评测

精度验证方法:在 CPU 和 NPU 上分别运行相同的 NLI 测试用例,对比输出 logits 差异。

指标数值
测试用例数8
标签一致率100% (8/8)
最大 Logit 差异0.007793 (< 1%)
平均 Logit 差异0.002456
精度结论PASS

7. 评测材料

评测材料位于 eval/ 目录:

  • accuracy_eval.py: 精度评测源代码
  • accuracy.json: 精度评测结果
  • performance.json: 性能评测结果
  • run.log: 完整运行日志

8. 注意事项

  • 该模型为 BertForSequenceClassification(编码器模型),不支持 vLLM 推理
  • 推理时需将 input tensor 显式移至 NPU 设备
  • 模型输出为 logits,需通过 argmax 获取预测标签
  • 三个标签分别为:0-CONTRADICTION(矛盾)、1-NEUTRAL(中性)、2-ENTAILMENT(蕴含)
下载使用量0