Blame view

reranker/README.md 6.54 KB
42e3aea6   tangwang   tidy
1
2
  # Reranker 模块
  
9f5994b4   tangwang   reranker
3
  **请求示例**`docs/QUICKSTART.md` §3.5。扩展规范见 `docs/DEVELOPER_GUIDE.md` §7。部署与调优实战见 `reranker/DEPLOYMENT_AND_TUNING.md`
42e3aea6   tangwang   tidy
4
5
  
  ---
d90e7428   tangwang   补充重排
6
  
d31c7f65   tangwang   补充云服务reranker
7
  Reranker 服务提供统一的 `/rerank` API,支持可插拔后端(BGE、Qwen3-vLLM、Qwen3-Transformers、DashScope 云重排)。调用方通过 HTTP 访问,不关心具体后端。
701ae503   tangwang   docs
8
9
  
  **特性**
80955935   tangwang   Reranker 补充 qwen3...
10
  - 多后端:`qwen3_vllm`(默认,Qwen3-Reranker-0.6B + vLLM)、`qwen3_transformers`(纯 Transformers,无需 vLLM)、`bge`(兼容保留)
d31c7f65   tangwang   补充云服务reranker
11
  - 云后端:`dashscope_rerank`(调用 DashScope `/compatible-api/v1/reranks`,支持按地域切换 endpoint)
701ae503   tangwang   docs
12
13
14
15
16
17
18
19
20
  - 统一配置:`config/config.yaml` → `services.rerank.backend` / `services.rerank.backends.<name>`
  - 文档去重、分数与输入顺序一致、FP16/GPU 支持(视后端)
  
  ## 目录与入口
  - `reranker/server.py`:FastAPI 服务,启动时按配置加载一个后端
  - `reranker/backends/`:后端实现与工厂
    - `backends/__init__.py`:`get_rerank_backend(name, config)`
    - `backends/bge.py`:BGE 后端
    - `backends/qwen3_vllm.py`:Qwen3-Reranker-0.6B + vLLM 后端
80955935   tangwang   Reranker 补充 qwen3...
21
    - `backends/qwen3_transformers.py`:Qwen3-Reranker-0.6B 纯 Transformers 后端(官方 Usage 方式)
d31c7f65   tangwang   补充云服务reranker
22
    - `backends/dashscope_rerank.py`:DashScope 云重排后端(HTTP 调用)
701ae503   tangwang   docs
23
24
25
26
  - `reranker/bge_reranker.py`:BGE 核心推理(被 bge 后端封装)
  - `reranker/config.py`:服务端口、MAX_DOCS、NORMALIZE 等(后端参数在 config.yaml)
  
  ## 依赖
fb973d19   tangwang   configs
27
  - 通用:`torch`、`transformers`、`fastapi`、`uvicorn`(隔离环境见 `requirements_reranker_service.txt`;全量 ML 环境另见 `requirements_ml.txt`
80955935   tangwang   Reranker 补充 qwen3...
28
29
  - **Qwen3-vLLM 后端**`vllm>=0.8.5`、`transformers>=4.51.0`(仅当使用 `backend: qwen3_vllm` 时需 vLLM)
  - **Qwen3-Transformers 后端**`transformers>=4.51.0`、`torch`(无需 vLLM,适合 CPU 或小显存)
701ae503   tangwang   docs
30
    ```bash
07cf5a93   tangwang   START_EMBEDDING=...
31
    ./scripts/setup_reranker_venv.sh
701ae503   tangwang   docs
32
33
34
    ```
  
  ## 配置
d31c7f65   tangwang   补充云服务reranker
35
  - **后端选择**`config/config.yaml` 中 `services.rerank.backend`(`qwen3_vllm` | `qwen3_transformers` | `bge` | `dashscope_rerank`),或环境变量 `RERANK_BACKEND`
701ae503   tangwang   docs
36
37
38
39
40
  - **后端参数**`services.rerank.backends.bge` / `services.rerank.backends.qwen3_vllm`,例如:
  
  ```yaml
  services:
    rerank:
07cf5a93   tangwang   START_EMBEDDING=...
41
      backend: "qwen3_vllm"   # 或 bge
701ae503   tangwang   docs
42
43
44
45
46
47
48
49
50
51
52
      backends:
        bge:
          model_name: "BAAI/bge-reranker-v2-m3"
          device: null
          use_fp16: true
          batch_size: 64
          max_length: 512
          cache_dir: "./model_cache"
          enable_warmup: true
        qwen3_vllm:
          model_name: "Qwen/Qwen3-Reranker-0.6B"
9f5994b4   tangwang   reranker
53
54
55
          max_model_len: 256
          infer_batch_size: 64
          sort_by_doc_length: true
9f5994b4   tangwang   reranker
56
57
          enable_prefix_caching: true
          enforce_eager: false
a99e62ba   tangwang   记录各阶段耗时
58
          instruction: "Given a shopping query, rank product titles by relevance"
80955935   tangwang   Reranker 补充 qwen3...
59
60
        qwen3_transformers:
          model_name: "Qwen/Qwen3-Reranker-0.6B"
a99e62ba   tangwang   记录各阶段耗时
61
          instruction: "Given a shopping query, rank product titles by relevance"
80955935   tangwang   Reranker 补充 qwen3...
62
63
64
          max_length: 8192
          batch_size: 64
          use_fp16: true
701ae503   tangwang   docs
65
66
          tensor_parallel_size: 1
          gpu_memory_utilization: 0.8
a99e62ba   tangwang   记录各阶段耗时
67
          instruction: "Given a shopping query, rank product titles by relevance"
d31c7f65   tangwang   补充云服务reranker
68
69
70
        dashscope_rerank:
          model_name: "qwen3-rerank"
          endpoint: "https://dashscope.aliyuncs.com/compatible-api/v1/reranks"
0d3e73ba   tangwang   rerank mini batch
71
          api_key_env: "RERANK_DASHSCOPE_API_KEY_CN"
d31c7f65   tangwang   补充云服务reranker
72
73
          timeout_sec: 15.0
          top_n_cap: 0
0d3e73ba   tangwang   rerank mini batch
74
          batchsize: 64  # 0关闭;>0并发小包调度(top_n/top_n_cap 仍生效,分包后全局截断)
d31c7f65   tangwang   补充云服务reranker
75
76
77
          instruct: "Given a shopping query, rank product titles by relevance"
          max_retries: 2
          retry_backoff_sec: 0.2
701ae503   tangwang   docs
78
79
  ```
  
d31c7f65   tangwang   补充云服务reranker
80
81
82
83
84
85
  DashScope endpoint 地域示例:
  - 中国:`https://dashscope.aliyuncs.com/compatible-api/v1/reranks`
  - 新加坡:`https://dashscope-intl.aliyuncs.com/compatible-api/v1/reranks`
  - 美国:`https://dashscope-us.aliyuncs.com/compatible-api/v1/reranks`
  
  DashScope 认证:
0d3e73ba   tangwang   rerank mini batch
86
87
88
89
  - `api_key_env` 必填,表示该后端读取哪个环境变量作为 API Key
  - 推荐按地域分别注入:
    - `RERANK_DASHSCOPE_API_KEY_CN=...`
    - `RERANK_DASHSCOPE_API_KEY_US=...`
d31c7f65   tangwang   补充云服务reranker
90
  
701ae503   tangwang   docs
91
92
93
  - 服务端口、请求限制等仍在 `reranker/config.py`(或环境变量 `RERANKER_PORT`、`RERANKER_HOST`)。
  
  ## 运行
d90e7428   tangwang   补充重排
94
  ```bash
07cf5a93   tangwang   START_EMBEDDING=...
95
  ./scripts/start_reranker.sh
d90e7428   tangwang   补充重排
96
  ```
07cf5a93   tangwang   START_EMBEDDING=...
97
  该脚本会使用隔离环境 `.venv-reranker`;首次请先执行 `./scripts/setup_reranker_venv.sh`
d90e7428   tangwang   补充重排
98
  
9f5994b4   tangwang   reranker
99
100
101
102
103
104
  ## 性能压测(1000 docs)
  ```bash
  ./scripts/benchmark_reranker_1000docs.sh
  ```
  输出目录:`perf_reports/<date>/reranker_1000docs/`
  
d90e7428   tangwang   补充重排
105
106
107
108
109
  ## API
  ### Health
  ```
  GET /health
  ```
701ae503   tangwang   docs
110
  Response 含 `backend`(当前后端名)、`model`、`model_loaded`、`status`
d90e7428   tangwang   补充重排
111
112
113
114
115
116
117
118
  
  ### Rerank
  ```
  POST /rerank
  Content-Type: application/json
  
  {
    "query": "wireless mouse",
d31c7f65   tangwang   补充云服务reranker
119
120
    "docs": ["logitech mx master", "usb cable", "wireless mouse bluetooth"],
    "top_n": 10
d90e7428   tangwang   补充重排
121
122
123
  }
  ```
  
d31c7f65   tangwang   补充云服务reranker
124
125
126
127
  `top_n` 为可选字段:
  - 对本地后端(`qwen3_vllm` / `qwen3_transformers` / `bge`)通常会忽略,仍返回全量分数。
  -`dashscope_rerank` 可用于控制云端返回的候选量,建议设置为 `page+size`(例如分页 `from=20,size=10` 时传 `30`)。
  
d90e7428   tangwang   补充重排
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
  Response:
  ```
  {
    "scores": [0.93, 0.02, 0.88],
    "meta": {
      "input_docs": 3,
      "usable_docs": 3,
      "unique_docs": 3,
      "dedup_ratio": 0.0,
      "elapsed_ms": 12.4,
      "model": "BAAI/bge-reranker-v2-m3",
      "device": "cuda",
      "fp16": true,
      "batch_size": 64,
      "max_length": 512,
      "normalize": true,
      "service_elapsed_ms": 13.1
    }
  }
  ```
  
  ## Logging
  The service uses standard Python logging. For structured logs and full output,
  run uvicorn with:
  ```bash
  uvicorn reranker.server:app --host 0.0.0.0 --port 6007 --log-level info
  ```
  
  ## Notes
701ae503   tangwang   docs
157
158
  - 无请求级缓存;输入按字符串去重后推理,再按原始顺序回填分数。
  - 空或 null 的 doc 跳过并计为 0。
fb973d19   tangwang   configs
159
  - **Qwen3-vLLM 分批策略**`docs` 请求体可为 1000+,服务端会按 `infer_batch_size` 拆分;当 `sort_by_doc_length=true` 时,会先按文档长度排序后分批,减少 padding 开销,最终再按输入顺序回填分数。
af827ce9   tangwang   rerank
160
  - 运行时可用环境变量临时覆盖批量参数:`RERANK_VLLM_INFER_BATCH_SIZE`、`RERANK_VLLM_SORT_BY_DOC_LENGTH`
701ae503   tangwang   docs
161
  - **Qwen3-vLLM**:参考 [Qwen3-Reranker-0.6B](https://huggingface.co/Qwen/Qwen3-Reranker-0.6B),需 GPU 与较多显存;与 BGE 相比适合长文本、高吞吐场景(vLLM 前缀缓存)。
fb973d19   tangwang   configs
162
  - **Qwen3-Transformers**:官方 Transformers Usage 方式,无需 vLLM;适合 CPU 或小显存。默认 `attn_implementation: "sdpa"`;若已安装 `flash_attn` 可设 `flash_attention_2`(未安装时服务会自动回退到 sdpa)。