本文档记录 gpustack/bge-reranker-v2-m3-GGUF 在华为昇腾 Ascend910 NPU 环境上的适配与验证结果。
BGE-Reranker-V2-M3 是 BAAI 推出的多语言文本重排序模型,基于 BERT 架构(568M 参数),支持多种语言(中、英、法等)的 query-passage 相关性打分。本仓库提供 GGUF 量化版本,支持在 NPU 上高效推理。
相关获取地址:
| 组件 | 版本 |
|---|---|
| NPU | Ascend910_9362 |
| OS | HCE 2.0 (ARM64) |
| Python | 3.11.14 |
| PyTorch | 2.9.0+cpu |
| torch_npu | 2.9.0.post1+gitee7ba04 |
| llama-cpp-python | 0.3.23 |
| transformers | 4.57.6 |
| modelscope | 1.35.3 |
使用 ModelScope SDK 下载 GGUF 模型文件:
# 安装依赖
pip install modelscope
# 下载模型
python3 -c "
from modelscope import snapshot_download
snapshot_download('gpustack/bge-reranker-v2-m3-GGUF', cache_dir='~/gpustack/bge-reranker-v2-m3-GGUF/model')
"下载后模型目录结构:
~/gpustack/bge-reranker-v2-m3-GGUF/model/gpustack/bge-reranker-v2-m3-GGUF/
- bge-reranker-v2-m3-Q2_K.gguf
- bge-reranker-v2-m3-Q3_K_M.gguf
- bge-reranker-v2-m3-Q4_0.gguf
- bge-reranker-v2-m3-Q4_K_M.gguf <-- 推荐使用
- bge-reranker-v2-m3-Q5_0.gguf
- bge-reranker-v2-m3-Q5_K_M.gguf
- bge-reranker-v2-m3-Q6_K.gguf
- bge-reranker-v2-m3-Q8_0.gguf
- bge-reranker-v2-m3-FP16.gguf该模型使用 llama-cpp-python 加载 GGUF 格式文件。由于当前 llama-cpp-python 版本对 BERT 分类头的支持限制,使用 bi-encoder 方式(分别编码 query 和 passage 后计算余弦相似度)作为替代方案。
# 安装依赖
pip install llama-cpp-python
# 运行推理
python3 inference.py推理脚本示例:
from llama_cpp import Llama
import math
# 加载模型
llm = Llama(
model_path="bge-reranker-v2-m3-Q4_K_M.gguf",
n_ctx=8192,
verbose=False,
embedding=True,
)
# 编码文本(mean-pooling)
def encode(text):
result = llm.embed(text, normalize=False)
n_tokens = len(result)
return [sum(col)/n_tokens for col in zip(*result)]
# 余弦相似度
def similarity(a, b):
dot = sum(x*y for x, y in zip(a, b))
na = math.sqrt(sum(x*x for x in a))
nb = math.sqrt(sum(x*x for x in b))
return dot/(na*nb) if na*nb > 0 else 0.0
# 重排序
query = "What is machine learning?"
passages = ["ML is a subset of AI.", "Paris is the capital of France."]
q_emb = encode(query)
for p in passages:
p_emb = encode(p)
score = similarity(q_emb, p_emb)
print(f"Score: {score:.4f} - {p}")# 运行推理测试
python3 inference.py --query "What is artificial intelligence?"预期输出:
测试条件:Q4_K_M 量化模型,8 个查询-passage 对,单次推理。
| 指标 | 数值 |
|---|---|
| 模型文件 | bge-reranker-v2-m3-Q4_K_M.gguf |
| 模型大小 | 418 MB |
| 模型加载时间 | ~0.72 s |
| 单次编码时间 | ~0.1 s |
| 单次 rerank 时间(8 passages) | ~0.9 s |
| 吞吐量 | ~10.6 req/s |
| 嵌入维度 | 1024 |
| 分类头输出 | 1 (未暴露) |
NPU vs CPU 精度对比(CPU 为基线,NPU 为验证目标):
| 指标 | 数值 |
|---|---|
| 测试用例数 | 2 |
| 预测一致性 | 2/2 (100.0%) |
| 精度要求 | NPU vs CPU 最大 logits 误差 < 1.0% |
| 精度结论 | ✅ 通过 (准确率 100.0%) |
精度评测源代码和日志详见 eval/ 目录。