[Performance]: Significant performance degradation v1/reranker under concurrent requests while swiching from v.0.19.1 to v0.20.2 v0.21.1

用户使用 vLLM 部署 bge-reranker-v2-m3 模型,通过异步 HTTP 客户端向 /v1/score 端点发送并发 Re-Ranker 请求(每次请求包含 100 个文档)。在从 v0.19.1 升级到 v0.20.2 和 v0.21.1 后,观察到平均延迟显著上升(从约 1.3

[Performance]: Significant performance degradation v1/reranker under concurrent requests while swiching from v.0.19.1 to v0.20.2 v0.21.1

[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 是否合理

解决步骤

  1. 可优先尝试:复现并对比 PyTorch 版本:在 vLLM v0.21.1 环境下,降级 PyTorch 到 2.10.0+cu128(如果兼容),观察延迟是否恢复基线水平。
  2. 可优先尝试:增加 API 服务器实例数:用户测试发现 api_server_count = 8(即多个 vLLM 服务进程)下没有明显回退,说明问题可能与单实例的调度策略有关。建议在生产环境中采用多实例部署(通过 api_server_count 或反向代理负载均衡)。
  3. 使用 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 观察哪个阶段(预处理、模型执行、后处理)耗时增加。

  4. 检查 vLLM 日志:查看服务端是否输出调度器警告或资源不足信息(如 schedule / preempt 事件增多)。
  5. 尝试关闭某些新特性:在 v0.21.1 启动时添加 --disable-v1-scheduler(如果支持)或 --disable-async-output-proc 等参数,排除 v1 新调度算法的影响。

验证方法

使用与 Issue 中相同的基准测试脚本(benchmark.py)重新运行并发测试,对比平均延迟、最大延迟和吞吐量(RPS)。若平均延迟从约 2000ms 回落到约 1300ms(v0.19.1 水平),或通过分布式追踪确认耗时从模型推理转移到其他阶段,可判断已找到瓶颈。

参考来源

vllm-project/vllm #43444

GamsGo AI

AI 工具推荐

想把多个 AI 模型放在一个入口?

GamsGo AI 集成 ChatGPT、DeepSeek、Gemini、Claude、Midjourney、Veo 等常用模型,适合写作、绘图、视频和日常 AI 工作流。

了解 GamsGo AI

推广链接:通过此链接购买,我可能获得佣金,不影响你的价格。

celebrityanime
celebrityanime
文章: 14702

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注