ValueError: The buffer size in the given workspace is insufficient for the given problem size. Buffer: 1179648 bytes, Required: 3932160 bytes.

用户在使用 vLLM 0.23.1rc1 或更新 nightly 版本(2026-07-01 之后)部署单节点 8×H200 GPU,运行 zai-org/GLM-5.2-FP8(753B MoE)模型,设置 --tensor-parallel-size 8 时触发。报错出现在 CUDA graph

快速结论:该报错通常出现在 vLLM 单节点多卡(TP8)部署 MoE 模型(如 GLM-5.2-FP8)时,因 FlashInfer 的 mnnvl allreduce 后端在 CUDA graph 捕获阶段缓冲区分配不足所致。优先尝试设置环境变量 VLLM_FLASHINFER_ALLREDUCE_BACKEND=trtllm 切换回 trtllm 后端。

问题场景

用户在使用 vLLM 0.23.1rc1 或更新 nightly 版本(2026-07-01 之后)部署单节点 8×H200 GPU,运行 zai-org/GLM-5.2-FP8(753B MoE)模型,设置 --tensor-parallel-size 8 时触发。报错出现在 CUDA graph 捕获阶段,FlashInfer 的 allreduce 后端由之前的 trtllm 变更为 mnnvl(来自 PR #47219 的默认值更改)。

报错原文

(Worker_TP0 pid=689) ERROR 07-01 09:45:05 [multiproc_executor.py:1004]   File "/usr/local/lib/python3.12/dist-packages/flashinfer/comm/allreduce.py", line 967, in allreduce_fusion
(Worker_TP0 pid=689) ERROR 07-01 09:45:05 [multiproc_executor.py:1004]     norm_result, residual_result = trtllm_mnnvl_fused_allreduce_add_rmsnorm(
(Worker_TP0 pid=689) ERROR 07-01 09:45:05 [multiproc_executor.py:1004]                                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
(Worker_TP0 pid=689) ERROR 07-01 09:45:05 [multiproc_executor.py:1004]   File "/usr/local/lib/python3.12/dist-packages/flashinfer/comm/trtllm_mnnvl_ar.py", line 544, in trtllm_mnnvl_fused_allreduce_add_rmsnorm
(Worker_TP0 pid=689) ERROR 07-01 09:45:05 [multiproc_executor.py:1004]     raise ValueError(
(Worker_TP0 pid=689) ERROR 07-01 09:45:05 [multiproc_executor.py:1004] ValueError: The buffer size in the given workspace is insufficient for the given problem size. Buffer: 1179648 bytes, Required: 3932160 bytes.

原因分析

可能原因:vLLM 与 FlashInfer 之间关于 oneshot allreduce 策略的阈值不匹配。

  • vLLM 侧allreduce_rms_fusion.py:180-187):oneshot 策略的阈值为 2 MB(针对每 rank 张量大小 N * hidden * elem_size)。
  • FlashInfer 侧MNNVLAllReduceFusionWorkspace.__init__):oneshot 策略的阈值为 1 MB(针对总通信大小 N * hidden * TP * elem_size)。

这两个阈值度量的是不同维度:vLLM 可能认为 use_oneshot=True,但 FlashInfer 的 workspace 仅按 twoshot 模式分配(约 4.1 MB),而运行时实际请求的 oneshot 缓冲区需求达到了 16.5 MB,从而导致 buffer size 不足错误。根据 Issue 讨论,部分用户即使在有 NVSwitch 的节点上提高 --max-num-batched-tokens 后也会遇到同样的错误。

环境排查

  • vLLM 版本:v0.23.1rc1.dev672+g93d8f834d 或更新的 nightly 版本(2026-07-01 后)。注意 vLLM v0.23.0 中此问题不存在。
  • FlashInfer 版本:0.6.13(与 mnnvl 后端兼容的版本)。
  • GPU 配置:单节点多卡,TP8,无 NVSwitch multicast 支持(如 H200,但 Issue 指出 B300 TP8 也可能复现)。
  • 模型配置:MoE 模型(如 GLM-5.2-FP8、GLM-5.2 AWQ),--moe-backend deep_gemm
  • 依赖项:确认 VLLM_FLASHINFER_ALLREDUCE_BACKEND 环境变量是否被设置或保持默认。

解决步骤

  1. 切换 allreduce 后端为 trtllm(已验证有效)

    在启动 vLLM 前设置环境变量:

    export VLLM_FLASHINFER_ALLREDUCE_BACKEND=trtllm

    然后正常启动 vLLM serve。Issue 提交者确认用此 env var 后部署成功并能正常处理请求。

  2. 回退 vLLM 版本(备选方案)

    如果无法使用 trtllm 后端,可考虑将 vLLM 回退到 v0.23.0(或更早版本),该版本中默认 allreduce 后端为 trtllm,不会触发此错误。

  3. 检查 FlashInfer 版本兼容性

    如果必须使用 mnnvl 后端,可尝试升级或降级 FlashInfer 版本,确认与当前 vLLM 版本兼容。但 Issue 中未提供其他 FlashInfer 版本的验证结果。

验证方法

重新启动 vLLM 服务后,观察启动日志是否仍有 ValueError: The buffer size in the given workspace is insufficient for the given problem size 错误。使用模型发起测试请求(如 curl http://localhost:8000/v1/completions -d '{"prompt": "Hello", "max_tokens": 32}'),确认返回正常结果且无缓冲区相关异常。

参考来源

vllm-project/vllm #47284

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 16357

发表回复

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