[Bug]: Failed to abort requests when killing client process.

该问题发生在客户端进程被强制终止后,vLLM 流式请求未及时中断并继续占用显存/算力。优先排查 FastAPI/Starlette 的 is_disconnected 检测是否失效,并考虑对该函数进行 monkey-patch 修复。

快速结论:该问题发生在客户端进程被强制终止后,vLLM 流式请求未及时中断并继续占用显存/算力。优先排查 FastAPI/Starlette 的 is_disconnected 检测是否失效,并考虑对该函数进行 monkey-patch 修复。

适用环境:vLLM;Ubuntu 22.04;Python 3.11.10;PyTorch 2.5.1+cu124;CUDA 12.4/12.6;NVIDIA RTX 3090;FastAPI 相关版本未在 Issue 中明确,需自行确认。

最快修复方案:暂无确认的一步修复方案;Issue 中建议优先尝试对 FastAPI 的 is_connected/is_disconnected 进行 monkey-patch(参考 #10087 中的解决方案),但未给出验证过的补丁代码。

注意事项:monkey-patch 属于临时规避手段,可能影响其他依赖 FastAPI 请求状态判断的功能;最理想的修复应在 Starlette 上游完成,当前仅适用于等待官方修复前的过渡。

问题场景

用户通过 vLLM 启动 OpenAI 兼容的流式推理服务(如 /v1/completions/v1/chat/completions),在客户端发起了流式请求(stream=True)。当客户端进程在流式输出尚未结束时被强制 kill(非正常断开 TCP),服务端日志出现如下错误,并且请求未被取消,GPU 资源继续被占用。

报错原文

[Bug]: Failed to abort requests when killing client process.

原因分析

根据 Issue 讨论,vLLM 依赖 FastAPI 的 Request.is_disconnected 来周期性检测客户端连接是否中断。但在上述场景中,is_disconnected 在 1.5 秒的轮询间隔内始终未返回 True,导致 iterate_with_cancellation 无法触发取消逻辑。可能原因包括:

  • FastAPI/Starlette 在特定操作系统或网络环境下无法正确感知 TCP 连接被强制 kill,导致 is_disconnected 失效。
  • 客户端进程被 kill 时未正常发送 FIN/RST 包,服务器端无法感知连接关闭。
  • Starlette 上游存在 is_connected 判断逻辑缺陷,该问题在 #10087 中已被报告过。

环境排查

  • 确认 Python 版本(Issue 中为 3.11.10)、PyTorch 版本(2.5.1)、CUDA 版本(12.4/12.6)。
  • 确认显卡型号及驱动版本(Issue 中为 RTX 3090 + 560.35.03)。
  • 重点确认 FastAPI 及 Starlette 的具体版本,该问题是否为 Starlette 的 is_connected 判定缺陷。
  • 检查 vLLM 版本,确认是否已包含 #10087 相关修复或已知的 monkey-patch。

解决步骤

  1. 复现问题并确认日志:在客户端 kill 后,观察 vLLM 服务端日志是否出现 Failed to abort requests 错误。
  2. 定位版本:确认当前 FastAPI 和 Starlette 版本,并对比 #10087 的讨论,判断是否属于同一底层问题。
  3. 可优先尝试 monkey-patch:在启动 vLLM 服务前,对 FastAPI/Starlette 的 is_connected 函数进行补丁,替代原有的连接检测逻辑(具体补丁代码请参考 #10087 的讨论或后续 PR)。
  4. 如果 monkey-patch 修复有效,可将其封装为启动脚本的一部分;如果不适合生产环境,可等待 Starlette 上游发布修复版本。
  5. 若问题依旧,尝试升级或降级 Starlette/FastAPI 版本,验证是否为版本兼容性问题。

验证方法

在应用 monkey-patch 后,重新执行“客户端发起流式请求后 kill 进程”的复现步骤,观察 vLLM 日志中不再出现 Failed to abort requests,且通过 nvidia-smi 确认显存占用在请求中断后已被释放,即表示问题已解决。

参考来源

vllm-project/vllm #10806

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 21593

发表回复

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