Blame view

reranker/DEPLOYMENT_AND_TUNING.md 8.14 KB
3d508beb   tangwang   reranker-4b-gguf
1
  # Reranker 部署与性能调优手册(Qwen3-vLLM / Qwen3-GGUF)
9f5994b4   tangwang   reranker
2
3
4
5
  
  本文档沉淀当前项目在电商搜索重排场景下的可复用实践,覆盖:
  
  - 环境准备与安装部署
5c21a485   tangwang   qwen3-reranker-0....
6
  - `qwen3_vllm` / `qwen3_gguf` / `qwen3_gguf_06b` 配置项与优化思路
9f5994b4   tangwang   reranker
7
8
9
10
11
12
  - 1000-doc 场景压测流程
  - 关键结论与推荐默认参数
  - 常见故障排查
  
  适用范围:
  
5c21a485   tangwang   qwen3-reranker-0....
13
14
  - 重排后端:`services.rerank.backend: qwen3_vllm` / `qwen3_gguf` / `qwen3_gguf_06b`
  - 模型:`Qwen/Qwen3-Reranker-0.6B` / `DevQuasar/Qwen.Qwen3-Reranker-4B-GGUF` / `ggml-org/Qwen3-Reranker-0.6B-Q8_0-GGUF`
9f5994b4   tangwang   reranker
15
16
17
18
  - 场景:query 较短(通常 < 100 tokens),doc 为商品标题或标题+简短描述,单请求 docs 约 1000 条
  
  ## 1. 环境基线
  
3d508beb   tangwang   reranker-4b-gguf
19
  当前验证环境(2026-03-25):
9f5994b4   tangwang   reranker
20
21
22
23
  
  - GPU:`Tesla T4 16GB`
  - Driver / CUDA:`570.158.01 / 12.8`
  - Python:`3.12.3`
3d508beb   tangwang   reranker-4b-gguf
24
  - 关键依赖:`vllm==0.17.0`、`torch==2.10.0+cu128`、`transformers==4.57.6`、`llama-cpp-python>=0.3.16`、`fastapi==0.135.1`、`uvicorn==0.41.0`
9f5994b4   tangwang   reranker
25
26
27
28
29
30
  
  ## 2. 环境准备与安装
  
  ### 2.1 准备 reranker 独立虚拟环境
  
  ```bash
3d508beb   tangwang   reranker-4b-gguf
31
32
33
34
35
36
37
38
39
40
41
42
  ./scripts/setup_reranker_venv.sh qwen3_vllm
  ```
  
  若使用 GGUF 并需要 CUDA:
  
  ```bash
  ./scripts/setup_reranker_venv.sh qwen3_gguf
  PATH=/usr/local/cuda/bin:$PATH \
  CUDACXX=/usr/local/cuda/bin/nvcc \
  CMAKE_ARGS="-DGGML_CUDA=on" \
  FORCE_CMAKE=1 \
  ./.venv-reranker-gguf/bin/pip install --no-cache-dir --force-reinstall --no-build-isolation llama-cpp-python==0.3.18
9f5994b4   tangwang   reranker
43
44
45
46
47
48
49
50
  ```
  
  ### 2.2 基础检查
  
  ```bash
  nvidia-smi
  ./.venv-reranker/bin/python -c "import torch; print(torch.cuda.is_available())"
  ./.venv-reranker/bin/python -c "import vllm, transformers; print(vllm.__version__, transformers.__version__)"
3d508beb   tangwang   reranker-4b-gguf
51
  ./.venv-reranker-gguf/bin/python -c "import llama_cpp; print(llama_cpp.__version__)"
9f5994b4   tangwang   reranker
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
  ```
  
  ## 3. 部署与运行
  
  ### 3.1 配置(`config/config.yaml`)
  
  当前推荐基线:
  
  ```yaml
  services:
    rerank:
      backend: "qwen3_vllm"
      backends:
        qwen3_vllm:
          model_name: "Qwen/Qwen3-Reranker-0.6B"
          engine: "vllm"
          max_model_len: 256
          tensor_parallel_size: 1
          gpu_memory_utilization: 0.36
          dtype: "float16"
          enable_prefix_caching: true
          enforce_eager: false
          infer_batch_size: 64
          sort_by_doc_length: true
          length_sort_mode: "char"  # char | token
  ```
  
3d508beb   tangwang   reranker-4b-gguf
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
  GGUF / T4 剩余显存约 `4.8~6GB` 时,推荐基线:
  
  ```yaml
  services:
    rerank:
      backend: "qwen3_gguf"
      backends:
        qwen3_gguf:
          repo_id: "DevQuasar/Qwen.Qwen3-Reranker-4B-GGUF"
          filename: "*Q8_0.gguf"
          local_dir: "./models/reranker/qwen3-reranker-4b-gguf"
          cache_dir: "./model_cache"
          n_ctx: 384
          n_batch: 384
          n_ubatch: 128
          n_gpu_layers: 24
          flash_attn: true
          offload_kqv: true
          infer_batch_size: 8
          sort_by_doc_length: true
          length_sort_mode: "char"
  ```
  
9f5994b4   tangwang   reranker
102
103
104
105
106
107
108
109
110
111
112
113
114
115
  ### 3.2 启停命令
  
  推荐统一使用:
  
  ```bash
  ./scripts/service_ctl.sh start reranker
  ./scripts/service_ctl.sh status reranker
  ./scripts/service_ctl.sh stop reranker
  ```
  
  也可直接运行原生脚本:
  
  ```bash
  ./scripts/start_reranker.sh
af7ee060   tangwang   service_ctl 简化为“显...
116
  ./scripts/service_ctl.sh stop reranker
9f5994b4   tangwang   reranker
117
118
119
120
121
122
123
124
125
126
127
128
129
130
  ```
  
  健康检查:
  
  ```bash
  curl -sS http://127.0.0.1:6007/health
  ```
  
  ## 4. 核心优化点(已落地)
  
  ### 4.1 请求大小与推理 batch 解耦
  
  - 调用方一次可传入 1000 docs(业务需求)
  - 服务端按 `infer_batch_size` 自动拆批推理(模型效率需求)
9f5994b4   tangwang   reranker
131
  - `sort_by_doc_length: true`:按长度排序后再分批
9f5994b4   tangwang   reranker
132
  
fb973d19   tangwang   configs
133
  ### 4.2 全局去重后回填
9f5994b4   tangwang   reranker
134
135
136
137
  
  - 对 docs 进行全局去重(非“仅相邻去重”)
  - 推理后按原请求顺序回填 scores,保证接口契约稳定
  
fb973d19   tangwang   configs
138
  ### 4.3 启动稳定性修复
9f5994b4   tangwang   reranker
139
140
141
142
  
  - `service_ctl.sh` 对 reranker 使用独立启动路径
  - 增加“稳定健康检查”(连续健康探测)避免“刚 healthy 即退出”的假阳性
  
3d508beb   tangwang   reranker-4b-gguf
143
144
145
146
147
148
149
  ### 4.4 GGUF / T4 小显存优化原则
  
  - `Q8_0` 权重约 `4.28GB`,但还要给 KV cache、CUDA 工作区和运行时碎片预留空间,不能按“模型大小 < 剩余显存”直接判断可行。
  - 当前业务是短 query + 商品标题,优先压缩 `n_ctx`;`384` 通常比默认长上下文更划算。
  - T4 小显存下先扫 `n_gpu_layers`,再尝试提高 `n_ctx`;`infer_batch_size` 在当前 GGUF 接入里主要是服务侧 work chunk,不是 llama.cpp 的真实算子 batch。
  - `flash_attn: true`、`offload_kqv: true` 默认保持开启;若 OOM,优先降低 `n_gpu_layers`
  
9f5994b4   tangwang   reranker
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
  ## 5. 性能调优流程(标准流程)
  
  ### 5.1 使用一键压测脚本
  
  ```bash
  ./scripts/benchmark_reranker_1000docs.sh
  ```
  
  输出目录:
  
  - `perf_reports/<date>/reranker_1000docs/*.json`
  - `perf_reports/<date>/reranker_1000docs/report.md`
  
  ### 5.2 常用参数扫描
  
  默认扫描:
  
  - `infer_batch_size`: `24 32 48 64`
  - 并发组:`c=1`(看单请求延迟)、`c=4`(看并发吞吐与尾延迟)
  
3d508beb   tangwang   reranker-4b-gguf
170
171
172
173
174
175
176
  GGUF 建议扫描:
  
  - `n_gpu_layers`: `20 24 28`
  - `n_ctx`: `320 384 448`
  - `infer_batch_size`: `4 8 12`(次要,仅影响服务侧 work chunk)
  - 扫描顺序:先固定 `n_ctx=384`,找能稳定启动的最大 `n_gpu_layers`;再在显存允许时尝试 `n_ctx=448`;最后才微调 `infer_batch_size`
  
9f5994b4   tangwang   reranker
177
178
179
180
181
182
183
184
185
186
187
188
189
190
  可通过环境变量覆盖:
  
  - `BATCH_SIZES`
  - `C1_REQUESTS`
  - `C4_REQUESTS`
  - `TENANT_ID`
  - `RERANK_BASE`
  
  ### 5.3 运行时临时覆盖服务参数
  
  用于“同机对比不同参数”:
  
  - `RERANK_VLLM_INFER_BATCH_SIZE`
  - `RERANK_VLLM_SORT_BY_DOC_LENGTH`
9f5994b4   tangwang   reranker
191
  
3d508beb   tangwang   reranker-4b-gguf
192
  ## 6. 本轮关键结论
9f5994b4   tangwang   reranker
193
  
3d508beb   tangwang   reranker-4b-gguf
194
  vLLM(2026-03-11,见 `perf_reports/20260311/reranker_1000docs/report.md`):
9f5994b4   tangwang   reranker
195
196
197
198
199
  
  - 对在线重排更重要的单请求延迟(`c=1`)指标,`infer_batch_size=64` 最优
  - `infer_batch_size=96` 在更高并发下吞吐略高,但会牺牲单请求延迟稳定性
  - 当前默认选择 `infer_batch_size=64` 作为平衡点
  
3d508beb   tangwang   reranker-4b-gguf
200
201
202
203
204
205
206
  GGUF(2026-03-25,本次接入):
  
  - `DevQuasar/Qwen.Qwen3-Reranker-4B-GGUF` 的 `Q8_0` 体积约 `4.28GB`,结合当前机器实测剩余显存约 `4823 MiB`,默认不采用激进的全量 GPU offload。
  - 当前推荐默认值:`n_ctx=384`、`n_batch=384`、`n_ubatch=128`、`n_gpu_layers=24`、`infer_batch_size=8`
  - 若现场剩余显存更接近 `6GB` 且碎片较少,可优先尝试 `n_gpu_layers=28`;若启动失败,回退到 `24` 或 `20`
  - 由于当前工作区尚未缓存该 GGUF 权重,本次尚未完成真实吞吐压测;上线前需在部署机复跑一轮参数扫描并归档报告。
  
9f5994b4   tangwang   reranker
207
208
  ## 7. 生产建议
  
fb973d19   tangwang   configs
209
  - 默认保持:`infer_batch_size: 64`、`sort_by_doc_length: true`
9f5994b4   tangwang   reranker
210
211
  - 满足以下条件时可考虑提高到 `96`:业务以吞吐优先、可接受更高单请求延迟、已通过同机同数据压测验证收益
  - 每次改动后都必须复跑 `benchmark_reranker_1000docs.sh` 并归档结果
3d508beb   tangwang   reranker-4b-gguf
212
213
  - GGUF 默认保持:`n_ctx: 384`、`n_gpu_layers: 24`、`infer_batch_size: 8`、`flash_attn: true`、`offload_kqv: true`
  - GGUF 若 OOM:先降 `n_gpu_layers`,再降 `n_ctx`,最后再降 `infer_batch_size`
9f5994b4   tangwang   reranker
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
  
  ## 8. 故障排查
  
  ### 8.1 `start reranker` 显示 healthy 后很快退出
  
  排查顺序:
  
  ```bash
  ./scripts/service_ctl.sh status reranker
  tail -n 200 logs/reranker.log
  lsof -i :6007 -P -n
  ```
  
  说明:
  
  - 该类问题已在 `scripts/service_ctl.sh` 中通过 reranker 独立启动分支与稳定健康检查进行修复
  - 若仍出现,优先检查 GPU 资源争用、vLLM 初始化失败或端口冲突
  
  ### 8.2 启动慢
  
  现象:
  
  - 首次启动会加载模型、torch.compile、CUDA graph capture,耗时较长
  
  建议:
  
  - 启动时预留足够健康检查窗口
  - 避免频繁重启(编译缓存在 `.runtime/reranker` 下可复用)
  
  ### 8.3 OOM 或显存不足
  
  优先调整:
  
  - 降低 `gpu_memory_utilization`
  - 降低 `infer_batch_size`
  - 检查是否有其他进程占用同卡
  
3d508beb   tangwang   reranker-4b-gguf
251
252
253
254
255
256
257
  GGUF 优先调整:
  
  - 降低 `n_gpu_layers`
  - 降低 `n_ctx`
  - 降低 `infer_batch_size`
  - 检查是否有其他进程占用同卡
  
9f5994b4   tangwang   reranker
258
259
260
261
262
263
264
265
  ## 9. 变更与验证清单
  
  每次 reranker 调优改动后,至少完成:
  
  - 配置变更已同步 `config/config.yaml`
  - 文档变更已同步 `reranker/README.md` 与本手册
  - 压测报告已归档到 `perf_reports/<date>/reranker_1000docs/`
  - 启停验证通过:`./scripts/service_ctl.sh start reranker`、`./scripts/service_ctl.sh status reranker`、`curl http://127.0.0.1:6007/health`