BAAI/bge-reranker-v2-gemma 是一个基于 Google Gemma-2B 的大语言模型(LLM)重排序模型,用于对查询和文档进行相关性评分与排序。
相关获取地址:
| 组件 | 版本 |
|---|---|
| NPU | Ascend910_9362 |
| PyTorch | 2.1.0+ |
| torch_npu | 2.9.0.post1 |
| transformers | 5.8.1 |
| Python | 3.11.14 |
/path/to/bge-reranker-v2-gemma/model使用 ModelScope SDK 下载:
pip install modelscope
python -c "from modelscope import snapshot_download; snapshot_download('BAAI/bge-reranker-v2-gemma', cache_dir='./model')"或使用 HuggingFace 镜像:
pip install huggingface_hub
HF_ENDPOINT=https://hf-mirror.com python -c "from huggingface_hub import snapshot_download; snapshot_download('BAAI/bge-reranker-v2-gemma', cache_dir='./model')"import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
model_path = "/path/to/bge-reranker-v2-gemma/model"
tokenizer = AutoTokenizer.from_pretrained(model_path)
if tokenizer.pad_token is None:
tokenizer.pad_token = tokenizer.eos_token
model = AutoModelForCausalLM.from_pretrained(model_path, dtype=torch.bfloat16)
model = model.to("npu:0")
model.eval()
yes_loc = tokenizer('Yes', add_special_tokens=False)['input_ids'][0]
prompt = ("Given a query A and a passage B, determine whether the passage "
"contains an answer to the query by providing a prediction of either 'Yes' or 'No'.")
query = "What is machine learning?"
passage = "Machine learning is a branch of artificial intelligence."
text = f"A: {query}\nB: {passage}\n{prompt}"
inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=1024)
inputs = {k: v.to("npu:0") for k, v in inputs.items()}
with torch.no_grad():
outputs = model(**inputs, return_dict=True)
score = outputs.logits[0, -1, yes_loc].float().item()
print(f"Relevance score: {score}")python inference.py验证结果:
测试条件:单卡 NPU,bf16 精度,max_length=1024。
| Batch Size | 平均延迟 (ms) | 吞吐量 (pairs/s) |
|---|---|---|
| 1 | 21.17 | 47.24 |
| 2 | 21.57 | 92.72 |
| 4 | 22.20 | 180.20 |
| 8 | 23.52 | 340.13 |
A: {query}\nB: {passage}\n{prompt},其中 prompt 是固定的指令模板device_map 参数,直接 model.to("npu:0") 即可generate() 方法,因为没有针对重排序模型的特定生成逻辑prepare_for_model 方法,应直接使用 tokenizer() 处理输入NPU 与 CPU 精度对比(CPU 为基线,NPU 为验证目标):
| 指标 | 数值 |
|---|---|
| 测试用例数 | 2 |
| 最大 logits 差异 | < 1% |
| 预测一致性 | 2/2 (100%) |
| 精度要求 | NPU 与 CPU 最大 logits 误差 < 1% |
| 精度结论 | ✅ 通过 — CPU 与 NPU 精度一致 |
精度评测源代码和日志详见 eval/ 目录。