RuntimeError: Application timeout caused pair closure

该报错通常出现在 vLLM 多节点(2 节点及以上)大规模张量并行(如 TP=16)启动时的分布式初始化阶段,各 rank 在 Gloo barrier 中互相等待直至超时。优先排查是否由跨节点场景误入对称内存(symmetric memory) rendezvous 逻辑引起,可先尝试使用 --d

快速结论:该报错通常出现在 vLLM 多节点(2 节点及以上)大规模张量并行(如 TP=16)启动时的分布式初始化阶段,各 rank 在 Gloo barrier 中互相等待直至超时。优先排查是否由跨节点场景误入对称内存(symmetric memory) rendezvous 逻辑引起,可先尝试使用 --disable-custom-all-reduce 参数绕过,并关注修复 PR #53253。

适用环境:vLLM(0.26.1rc1.dev148 至 0.27.1 及更新 main 分支版本);多节点(≥2)环境,节点间无 NVLink(仅 InfiniBand 互联);已在 2×8 H100 (80GB) 和 4×4 RTX 4090 拓扑上复现。

最快修复方案:暂无对所有用户确认的一步修复方案。在 Issue 验证中,对受影响的版本使用 --disable-custom-all-reduce 启动参数可绕过问题(在 4×4 RTX 4090 上验证有效);修复该问题的 PR #53253 已在原始 2×8 H100 拓扑上通过 A/B 验证,可尝试应用该补丁或等待其合入后的版本。

注意事项:--disable-custom-all-reduce 会禁用自定义全规约优化,可能影响跨节点通信性能。PR #53253 的最终防护要求更严格(Blackwell 级算力、PyTorch 本地多播支持及 CPU 进程组一致性判断),仅适用于修复此特定回归。Issue 中有用户反馈在 B200 集群上尝试多个版本及该补丁后问题依旧,说明该修复可能未覆盖所有硬件场景,需进一步排查。

问题场景

用户在使用 vLLM 的 Ray 分布式执行器,于 2 节点(每节点 8× H100 80GB)上以 TP=16 启动 DeepSeek-R1 (FP8) 模型推理服务时触发。所有 16 个 rank 均正常启动,但在分布式初始化阶段,in_the_same_node_as() 内部的 Gloo barrier 永远无法完成,进程空闲 30 分钟后因 Gloo TCP 超时崩溃。相同配置在单节点上运行正常,故障仅在多节点且节点间无 NVLink 互联(仅 InfiniBand)时出现。

报错原文

RuntimeError: Application timeout caused pair closure
[.../gloo/transport/tcp/unbound_buffer.cc:78] Timed out waiting 1800000ms for recv operation to complete

原因分析

根据 Issue 中的二分定位,这是一个回归问题(0.26.1rc1.dev78 正常,0.26.1rc1.dev148 开始故障)。初步调查指向 PR #50000(合入提交 aeeb36b1f),该 PR 移除了之前多节点 CustomAllreduce 的禁用/提前返回逻辑,新增了 world size 16 支持,并允许多节点组进入 _init_mnnvl_buffer(),后者会调用 torch_symm_mem.rendezvous()。后续独立验证确认,挂起时各 worker 均阻塞在 torch.distributed._symmetric_memory.rendezvousCustomAllreduce._init_mnnvl_buffer 路径上,且该函数可能因各 rank 对是否支持对称内存的判断不一致而进入死锁。这可能是因为 in_the_same_node_as 的调用时机或到达 barrier 的 rank 集合发生了变化,而非函数本身代码变更。

环境排查

  • vLLM 版本:0.26.1rc1.dev148 及之后版本、v0.27.0、v0.27.1 均受影响;0.26.1rc1.dev78 及更早版本、v0.26.0 正常。
  • PyTorch:2.13.0+cu130(Issue 中二分对比时锁定)。
  • CUDA:13.0 工具链(同上,锁定验证)。
  • GPU:2 节点 × 8× H100 (80GB) 或 4 节点 × 4× RTX 4090(均为无跨节点 NVLink,仅 InfiniBand 互联)。
  • 相关依赖:torchvisionflashinfer-pythonflashinfer-cubin 等已锁定验证,确认非导致因素。
  • 启动参数:重点关注 --tensor-parallel-size 16--disable-custom-all-reduce 的效果差异。

解决步骤

  1. 临时规避(可优先尝试):在启动命令中加入 --disable-custom-all-reduce 参数。此方法在 4×4 RTX 4090 跨节点 TP=16 场景验证可通过启动,但需注意会牺牲自定义全规约的潜在性能优化。
  2. 长期修复:应用 PR #53253(分支头 3df2cbe83183)的补丁。该 PR 通过三重防护机制(Blackwell 级算力判断、PyTorch 本地多播支持判断、CPU 进程组 MIN 一致性共识)确保所有 rank 在跨节点非 Blackwell 硬件上不进入对称内存 rendezvous,而回退到 NCCL 通信。
  3. 拉取补丁方法:
    git fetch origin pull/53253/head:testing-pr-53253

    然后切换到该分支重新构建并测试部署。

  4. 如果上述方法均无效(例如 B200 集群场景,Issue 中有用户反馈依旧失败),建议降级到已知正常版本 v0.26.0 作为临时方案,或继续等待后续官方修复,并在新 Issue 中补充硬件与复现信息。

验证方法

启动相同配置的 vLLM 服务,观察是否能正常完成模型初始化并进入服务就绪状态。若问题复现,将在约 30 分钟超时后看到 Gloo TCP 报错;若修复成功,初始化应快速正常完成,且日志中不再出现挂起在 rendezvous 的堆栈。在 PR #53253 的验证中,通过了跨节点 TP=16 启动/稳定性测试 3/3 次,可参考此标准进行确认。建议在修复后观察并对比首次 token 生成时间,确认无额外性能回退。

参考来源

vllm-project/vllm #52907

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 21677

发表回复

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