RuntimeError: Error in function ‘aligned_alloc’ at /workspace/include/flashinfer/allocator.h:49:

该报错通常出现在 vLLM 启动阶段,使用 FlashInfer 作为 attention backend 且开启 CUDA graph capture 时,FlashInfer workspace buffer 不够用导致 aligned_alloc 失败。优先排查是否命中 FlashInfer

快速结论:该报错通常出现在 vLLM 启动阶段,使用 FlashInfer 作为 attention backend 且开启 CUDA graph capture 时,FlashInfer workspace buffer 不够用导致 aligned_alloc 失败。优先排查是否命中 FlashInfer 的 prefill split-KV scratch buffer 申请过大的已知问题,并尝试调大 workspace buffer 或等待 FlashInfer 修复。

适用环境:Issue 已确认环境为 vLLM 0.19.1rc1.dev231+g9dd5ee011.cu130、模型 nvidia/Qwen3.5-397B-A17B-NVFP4、硬件 B300,attention backend 为 FLASHINFER,并启用 --async-scheduling。复现者还在 RTX 6000 Ada 上用相同 shape 复现了 planner 的请求,但完整 server 启动未在 B300/GB10 上测试。

最快修复方案:在修复落地前,可优先尝试设置环境变量 VLLM_FLASHINFER_WORKSPACE_BUFFER_SIZE=1073741824(即 1 GB)来规避崩溃;代价是额外占用相应 GPU 显存。Issue 中提到的根因修复位于 flashinfer-ai/flashinfer#5177。

注意事项:调大 workspace buffer 只是规避手段,并未修复 FlashInfer 规划逻辑;它可能挤占其他 GPU 显存用途。FlashInfer 侧修复尚未合并进 vLLM 发布版本时,完整 server 启动在 B300 上的实际效果未由报告者验证。

问题场景

用户使用 vLLM 启动 OpenAI 兼容 API server,模型为 nvidia/Qwen3.5-397B-A17B-NVFP4,指定 --attention-backend FLASHINFER,并启用 --async-scheduling--enable-expert-parallel--data-parallel-size 8--max-num-seqs 528 等参数。服务在启动阶段、CUDA graph capture 期间直接崩溃,尚未进入正常推理服务状态。

报错原文

RuntimeError: Error in function 'aligned_alloc' at /workspace/include/flashinfer/allocator.h:49:
  Buffer overflow when allocating memory for batch_prefill_tmp_v
  with size 536346624 and alignment 16,
  but only 413138944 bytes available in AlignedAllocator.
  Increase the workspace buffer size.

原因分析

根据 Issue 讨论,根因在 FlashInfer:其 prefill plan 在计算 split-KV scratch buffer 大小时,错误地按“每个 query head 都需要独立一行”来估算。Qwen3.5 的 full-attention 层是 32 个 query heads 对 2 个 KV heads,因此 buffer 被请求得比实际需要大约 16 倍。在为 512 条序列做 CUDA graph capture 时,这个超额请求超过了 vLLM 默认的 workspace 大小,从而触发 Buffer overflow

从数据上看,修复前 batch_prefill_tmp_v 请求约 511 MB(536,346,624 bytes),而 vLLM workspace 约 394 MB;采用 flashinfer#5177 后请求降至约 32 MB,394 MB workspace 即可容纳。

环境排查

  • 确认 vLLM 版本是否为 0.19.1rc1.dev231+g9dd5ee011.cu130 或相近的 0.19.x 开发版。
  • 确认 attention backend 是否为 FLASHINFER
  • 确认是否启用 CUDA graph capture,以及 --max-num-seqs 是否达到或超过 528。
  • 确认模型是否为 nvidia/Qwen3.5-397B-A17B-NVFP4,或具有类似 query heads / KV heads 比例的 Qwen3.5 full-attention 架构。
  • 确认是否启用 --async-scheduling--enable-expert-parallel
  • 确认并行配置:Issue 中 -tp 1 -dp 2/4/8 -pp 1 --enable-expert-parallel-tp 2 -dp 1 -pp 1-tp 2 -dp 1 -pp 1 --enable-expert-parallel 均会触发;-tp 4 -dp 1 -pp 1-tp 8 -dp 1 -pp 1 未受影响。
  • 确认 FlashInfer 版本是否已包含 flashinfer-ai/flashinfer#5177 的修复。

解决步骤

  1. 先确认是否命中该问题:查看启动日志中是否出现 batch_prefill_tmp_valigned_alloc buffer overflow,并确认 attention backend 为 FLASHINFER、序列数达到 512 以上。
  2. 在不改动代码的前提下,可优先尝试设置 VLLM_FLASHINFER_WORKSPACE_BUFFER_SIZE=1073741824 后再启动 server,观察是否能越过启动阶段的 CUDA graph capture。
  3. 如果可行且显存允许,保持该环境变量作为临时规避;如果显存紧张,需要权衡该设置带来的额外 GPU 内存占用。
  4. 关注 FlashInfer 侧修复 flashinfer-ai/flashinfer#5177 的合入情况,待其进入所使用的 FlashInfer/vLLM 版本后,移除临时 workspace 放大设置并重新验证。
  5. 若不需要 FlashInfer 后端,也可以评估切换到其他 attention backend,但这不属于 Issue 中已验证的方案。

验证方法

使用相同模型、并行配置和 --max-num-seqs 528 重新启动 vLLM server。如果不再出现 RuntimeError: Error in function 'aligned_alloc',并且 server 能完成启动、进入监听状态,则说明规避生效。若采用 FlashInfer 修复,可观察日志中 batch_prefill_tmp_v 请求大小是否从约 511 MB 降至约 32 MB。

参考来源

vllm-project/vllm #40023

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 23167

发表回复

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