[Bug]: RPC call to sample_tokens timed out. Qwen3.5-397B-A17B

用户在 NVIDIA H200 GPU 上部署 Qwen3.5-397B-A17B 模型,遵循官方部署指南(https://github.com/vllm-project/recipes/blob/main/Qwen/Qwen3.5.md),使用 8 张 GPU 并启用了 tensor_parall

[Bug]: RPC call to sample_tokens timed out. Qwen3.5-397B-A17B

[Bug]: RPC call to sample_tokens timed out. Qwen3.5-397B-A17B

快速结论:该报错通常发生在部署 Qwen3.5-397B-A17B 模型并执行推理请求时,原因是共享内存广播块在 60 秒内无可用资源,导致 EngineCore 进程超时崩溃。优先排查模型的权重加载、KV Cache 量化或编译阶段是否阻塞了进程,以及共享内存配置是否充足。

问题场景

用户在 NVIDIA H200 GPU 上部署 Qwen3.5-397B-A17B 模型,遵循官方部署指南(https://github.com/vllm-project/recipes/blob/main/Qwen/Qwen3.5.md),使用 8 张 GPU 并启用了 tensor_parallel_size=8、enable_prefix_caching=True、enable_chunked_prefill=True 等配置。初始部署时服务可以正常启动,但当通过 curl 发送标准聊天补全请求(temperature=0.7, max_tokens=512)后,系统出现超时错误并导致服务崩溃,返回 HTTP 500 错误。

报错原文

No available shared memory broadcast block found in 60 seconds. This typically happens when some processes are hanging or doing some time-consuming work (e.g. compilation, weight/kv cache quantization).

EngineCore encountered a fatal error.
(EngineCore_DP0 pid=287050) ERROR 02-27 15:59:56 [core.py:1080] TimeoutError: RPC call to sample_tokens timed out.

最终的 HTTP 响应为:

{"error":{"message":"EngineCore encountered an issue. See stack trace (above) for the root cause.","type":"InternalServerError","param":null,"code":500}}

原因分析

可能原因:共享内存广播块在 60 秒内无法分配,导致 RPC 调用 sample_tokens 超时。这通常是因为某些进程在初始化或推理准备阶段被阻塞,例如:

  • 模型权重加载或 KV Cache 量化过程中耗时过长。
  • 编译阶段(如 VLLM_COMPILE mode 3 模式)占用了大量时间,导致其他进程无法正常获得共享内存资源。
  • 共享内存(/dev/shm)容量不足或系统配置限制。
  • 多进程同步问题:在 DP(数据并行)环境下,EngineCore 进程可能因其他进程挂起而无法获取广播块。

该 Issue 中未提供明确的环境输出(python collect_env.py 的结果被占位符替代),因此无法进一步确定具体原因。

环境排查

  • vLLM 版本:v0.16.1rc1.dev48+ga572baff5(从 dump 日志确认)
  • 模型路径:确认模型文件是否正确加载至磁盘,推荐使用 Hugging Face 官方仓库路径
  • GPU 配置:H200,tensor_parallel_size=8,data_parallel_size=1
  • dtype:torch.bfloat16
  • 共享内存容量:检查 /dev/shm 的可用空间(推荐至少 64GB 以上,视模型大小调整)
  • 编译模式:compilation_config 使用了 VLLM_COMPILE mode 3,包含多个自定义算子(如 unified_attention、unified_mla_attention 等),可能导致首次推理时编译耗时过长

解决步骤

  1. 增加共享内存容量:在 Docker 或宿主机中,通过 --shm-size 参数设置更大的共享内存。例如 Docker 启动时添加 --shm-size 256g。如果已运行,可 先尝试停止服务并重新使用更大的 shm-size 启动
  2. 禁用或调整 compile 配置:将此作为可优先尝试的方案。在 vLLM 启动参数中添加 --enforce-eager 以禁用图编译,或设置 --compilation-config '{"level": null}' 来避免首次编译阻塞。如果问题解决,再按需重新启用编译优化。
  3. 禁用 prefix caching 或 chunked prefill:可优先尝试。在启动时移除 --enable-prefix-caching--enable-chunked-prefill,以简化推理流程,观察是否仍有超时。
  4. 调整 GPU 通信配置:检查是否启用了 --disable-custom-all-reduce。如果当前未启用,可尝试添加该参数,避免自定义 all-reduce 与共享内存冲突。
  5. 监控进程状态:在再次启动请求前,使用 nvidia-smihtop 检查是否有进程(如编译、量化)长期占用资源。可等待这些任务完成后再发送请求。

验证方法

完成上述步骤后,重新启动 vLLM 服务,并再次执行 curl 请求:

curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Qwen/Qwen3.5-397B-A17B",
    "messages": [
      {"role": "user", "content": "hello"}
    ],
    "temperature": 0.7,
    "max_tokens": 512
  }'

如果服务正常返回 JSON 格式的响应(包含 idchoices 等字段),并且 EngineCore 日志中不再出现共享内存超时或 RPC timeout 错误,则说明问题已被解决。同时可多次发送请求,确保系统稳定。

参考来源

vllm-project/vllm #35496

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 9629

发表回复

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