如何自托管 reranker
托管 rerank API 很方便,但自托管能带来零按次成本、数据完全可控,以及在自己 GPU/CPU 集群上的可预测延迟。本文从第一次 CrossEncoder 调用,到生产级微服务的实操路径。
何时值得自托管
- 调用量大。每个查询对 50–100 个 chunk 重排序,按千条文档计费的 API 成本会迅速累积。
- 数据驻留。查询与文档不出你的 VPC。
- 自定义微调。可随时换上领域微调 checkpoint,无需等厂商。
若你需要多语言质量且运维要极简,Cohere Rerank 或 Jina 等托管 API 的综合成本可能更低 —— 见按场景选型。
选择模型
| 模型 | 规模 | 最适合 |
|---|---|---|
| bge-reranker-base | ~278M | CPU 友好的英文默认 |
| bge-reranker-v2-m3 | ~568M | GPU 有限时的多语言选择 |
| Qwen3-Reranker-4B | ~4B | 2026 开源 SOTA 首选(需 GPU) |
| mxbai-rerank-large-v1 | ~435M | 经典 BEIR 强,Apache 2.0 |
| jina-reranker-v3 | large | Listwise 长上下文;或 v2 成对 |
原型阶段用 CPU 跑 bge-reranker-base。有 GPU 时在标注集上 A/B Qwen3-Reranker-4B 与 bge-v2-m3 或 mxbai-large —— 不要假设榜单顺序会迁移。
sentence-transformers 快速上手
pip install sentence-transformers torch
from sentence_transformers import CrossEncoder
model = CrossEncoder("BAAI/bge-reranker-base", max_length=512)
query = "How do I add reranking to RAG?"
docs = [
"Retrieve 50–100 candidates, rerank with a cross-encoder, keep top 5.",
"London is the capital of the United Kingdom.",
]
pairs = [(query, d) for d in docs]
scores = model.predict(pairs) # higher = more relevant
ranked = sorted(zip(scores, docs), reverse=True)
批量打分 —— 一次 predict() 处理 50 段远比 50 次单独前向快。单段长度建议不超过 512 token(模型默认),避免静默截断。
服务化方案
嵌入应用进程
在 FastAPI / Flask RAG 服务内加载模型。低 QPS 最简单;水平扩展副本即可。
独立 rerank 微服务
暴露 POST /rerank,请求体 { query, documents[] }。多个应用 Pod 共享一块 GPU。
# Minimal FastAPI sketch
from fastapi import FastAPI
from sentence_transformers import CrossEncoder
app = FastAPI()
model = CrossEncoder("BAAI/bge-reranker-base")
@app.post("/rerank")
def rerank(body: dict):
q, docs = body["query"], body["documents"]
scores = model.predict([(q, d) for d in docs])
order = sorted(range(len(docs)), key=lambda i: -scores[i])
return {"results": [{"index": i, "score": float(scores[i])} for i in order]}
ONNX 导出与 C++ 运行时见 Hugging Face 模型卡。仅浏览器实验可用我们的 在线 Demo(xsmall ONNX 构建)。
运维清单
- GPU:单张 T4 跑 bge-base 对 50 段约 30–80 ms;CPU 慢 5–10 倍。
- 内存:base 模型预留约 1–2 GB VRAM;大模型需更多。
- 预热:启动时跑一次 dummy predict,避免冷启动延迟尖峰。
- 监控:在标注子集上跟踪 p95 延迟与 NDCG —— 评测 reranker。
- 降级:rerank 服务不可用时,透传向量 top-k,不要让整条 RAG 请求失败。