![[Performance]: Significant performance degradation v1/reranker under concurrent requests while swiching from v.0.19.1 to v0.20.2 v0.21.1](https://www.chat-gpts.plus/wp-content/uploads/2026/07/43444-183a064c.jpg)
[Performance]: Significant performance degradation v1/reranker under concurrent requests while swiching from v.0.19.1 to v0.20.2 v0.21.1
快速结论:该性能问题发生在 vLLM v0.20.2 及 v0.21.1 版本中,使用 bge-reranker-v2-m3 模型进行 /v1/score 并发请求时,平均延迟相比 v0.19.1 显著增加(约 1.5 倍)。优先排查是否因 PyTorch 版本从 2.10.0+cu128 升级到 2.11.0+cu130 引入了性能回退,或检查 GPU 利用率(可能未充分饱和)。
问题场景
用户使用 vLLM 部署 bge-reranker-v2-m3 模型,通过异步 HTTP 客户端向 /v1/score 端点发送并发 Re-Ranker 请求(每次请求包含 100 个文档)。在从 v0.19.1 升级到 v0.20.2 和 v0.21.1 后,观察到平均延迟显著上升(从约 1.3 秒增至约 2.0 秒),而并发数从 1 到 50 变化时趋势一致。
报错原文
# 无显式报错,性能回退体现在延迟统计中:
# v0.19.1 (baseline):
Concurrency=1 Avg=1339.91ms Max=2313ms Min=390ms
Concurrency=50 Avg=1270.18ms Max=2095ms Min=654ms
# v0.20.2:
Concurrency=1 Avg=2069.23ms Max=2279ms Min=2024ms
Concurrency=50 Avg=1998.23ms Max=2550ms Min=1855ms
# v0.21.1:
Concurrency=1 Avg=2031.59ms Max=2454ms Min=1930ms
Concurrency=50 Avg=1978.68ms Max=2559ms Min=1846ms
原因分析
可能原因:
- PyTorch 升级引入的性能回退:v0.20.2 和 v0.21.1 版本依赖 PyTorch 2.11.0+cu130,而 v0.19.1 使用 PyTorch 2.10.0+cu128。用户观察到约 2% 的峰值吞吐量下降,可能受此影响。
- vLLM v1 引擎 / Re-Ranker 调度器变更:v0.20.0 之后引入了大量 v1 架构改进,可能改变了请求排队、批量处理或模型推理的批处理策略,导致并发场景下延迟上升。
- 客户端连接池限制:使用
aiohttp.TCPConnector(ssl=False, limit=0, limit_per_host=50)与anyio.CapacityLimiter(concurrency)配合,但并发控制层可能与 vLLM 服务端的新流控产生交互,需确认服务端是否达到瓶颈。
环境排查
- 确认 vLLM 版本(v0.19.1、v0.20.2、v0.21.1)
- 确认 PyTorch 版本(v0.19.1 与后续版本中分别为 2.10.0+cu128 和 2.11.0+cu130)
- 确认 CUDA 版本(与 cu128、cu130 对应)
- 确认 GPU 型号与显存是否支持模型加载和批量推理
- 检查 GPU 利用率(
nvidia-smi)在并发请求下是否饱和,或处于低利用率等待状态 - 检查 vLLM 服务端配置,如
--max-num-seqs、--max-model-len是否合理
解决步骤
- 可优先尝试:复现并对比 PyTorch 版本:在 vLLM v0.21.1 环境下,降级 PyTorch 到 2.10.0+cu128(如果兼容),观察延迟是否恢复基线水平。
- 可优先尝试:增加 API 服务器实例数:用户测试发现
api_server_count = 8(即多个 vLLM 服务进程)下没有明显回退,说明问题可能与单实例的调度策略有关。建议在生产环境中采用多实例部署(通过api_server_count或反向代理负载均衡)。 - 使用 OpenTelemetry 分布式追踪定位瓶颈:参考用户提供的 Grafana Tempo 配置,配置 vLLM 的 OTEL:
export OTEL_EXPORTER_OTLP_TRACES_PROTOCOL=grpc export OTEL_EXPORTER_OTLP_TRACES_ENDPOINT=http://localhost:4317 vllm serve BAAI/bge-reranker-v2-m3 --otlp-traces-endpoint="$OTEL_EXPORTER_OTLP_TRACES_ENDPOINT"然后运行 dummy_client.py 观察哪个阶段(预处理、模型执行、后处理)耗时增加。
- 检查 vLLM 日志:查看服务端是否输出调度器警告或资源不足信息(如
schedule/preempt事件增多)。 - 尝试关闭某些新特性:在 v0.21.1 启动时添加
--disable-v1-scheduler(如果支持)或--disable-async-output-proc等参数,排除 v1 新调度算法的影响。
验证方法
使用与 Issue 中相同的基准测试脚本(benchmark.py)重新运行并发测试,对比平均延迟、最大延迟和吞吐量(RPS)。若平均延迟从约 2000ms 回落到约 1300ms(v0.19.1 水平),或通过分布式追踪确认耗时从模型推理转移到其他阶段,可判断已找到瓶颈。



