Blame view

reranker/DEPLOYMENT_AND_TUNING.md 5.38 KB
9f5994b4   tangwang   reranker
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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
79
80
  # Reranker 部署与性能调优手册(Qwen3-vLLM)
  
  本文档沉淀当前项目在电商搜索重排场景下的可复用实践,覆盖:
  
  - 环境准备与安装部署
  - `qwen3_vllm` 配置项与优化思路
  - 1000-doc 场景压测流程
  - 关键结论与推荐默认参数
  - 常见故障排查
  
  适用范围:
  
  - 重排后端:`services.rerank.backend: qwen3_vllm`
  - 模型:`Qwen/Qwen3-Reranker-0.6B`
  - 场景:query 较短(通常 < 100 tokens),doc 为商品标题或标题+简短描述,单请求 docs 约 1000 条
  
  ## 1. 环境基线
  
  当前验证环境(2026-03-11):
  
  - GPU:`Tesla T4 16GB`
  - Driver / CUDA:`570.158.01 / 12.8`
  - Python:`3.12.3`
  - 关键依赖:`vllm==0.17.0`、`torch==2.10.0+cu128`、`transformers==4.57.6`、`fastapi==0.135.1`、`uvicorn==0.41.0`
  
  ## 2. 环境准备与安装
  
  ### 2.1 准备 reranker 独立虚拟环境
  
  ```bash
  ./scripts/setup_reranker_venv.sh
  ```
  
  ### 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__)"
  ```
  
  ## 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
  ```
  
  ### 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 简化为“显...
81
  ./scripts/service_ctl.sh stop reranker
9f5994b4   tangwang   reranker
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
  ```
  
  健康检查:
  
  ```bash
  curl -sS http://127.0.0.1:6007/health
  ```
  
  ## 4. 核心优化点(已落地)
  
  ### 4.1 请求大小与推理 batch 解耦
  
  - 调用方一次可传入 1000 docs(业务需求)
  - 服务端按 `infer_batch_size` 自动拆批推理(模型效率需求)
  
  ### 4.2 先排序再分批,降低 padding 浪费
  
  - `sort_by_doc_length: true`:按长度排序后再分批
  - `length_sort_mode: "char"`:短文本场景下开销更低,默认推荐
  - `length_sort_mode: "token"`:长度估计更精确,但有额外 tokenizer 开销
  
  ### 4.3 全局去重后回填
  
  - 对 docs 进行全局去重(非“仅相邻去重”)
  - 推理后按原请求顺序回填 scores,保证接口契约稳定
  
  ### 4.4 启动稳定性修复
  
  - `service_ctl.sh` 对 reranker 使用独立启动路径
  - 增加“稳定健康检查”(连续健康探测)避免“刚 healthy 即退出”的假阳性
  
  ## 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`(看并发吞吐与尾延迟)
  
  可通过环境变量覆盖:
  
  - `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
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
  
  ## 6. 本轮关键结论(2026-03-11)
  
  基于报告:
  
  - `perf_reports/20260311/reranker_1000docs/report.md`
  
  结论:
  
  - 对在线重排更重要的单请求延迟(`c=1`)指标,`infer_batch_size=64` 最优
  - `infer_batch_size=96` 在更高并发下吞吐略高,但会牺牲单请求延迟稳定性
  - 当前默认选择 `infer_batch_size=64` 作为平衡点
  
  ## 7. 生产建议
  
  - 默认保持:`infer_batch_size: 64`、`sort_by_doc_length: true`、`length_sort_mode: "char"`
  - 满足以下条件时可考虑提高到 `96`:业务以吞吐优先、可接受更高单请求延迟、已通过同机同数据压测验证收益
  - 每次改动后都必须复跑 `benchmark_reranker_1000docs.sh` 并归档结果
  
  ## 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`
  - 检查是否有其他进程占用同卡
  
  ## 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`