
No module named ‘libtpu’
快速结论:该报错通常在使用 ROCm 后端的 AMD GPU(如 RX 7800 XT)运行 Qwen2.5-VL / Qwen3-VL 多模态模型时触发,优先检查是否因 ROCm 的 F.scaled_dot_product_attention 实现缺陷导致显存分配异常。
问题场景
用户使用 vLLM 0.11.1rc6 加载 Qwen3-VL-2B-Instruct 多模态模型,设置 --dtype float16 和 --max-model-len 2048,在 AMD RX 7800 XT (gfx1101) 上启动时触发 OOM。即使已安装 flash_attn==2.8.3 和 aiter==0.1.5.dev157,问题仍然存在。
报错原文
RuntimeError: CUDA error: out of memory
原因分析
在 AMD ROCm 环境下,F.scaled_dot_product_attention 的 ROCm 后端实现可能存在缺陷。当多模态模块被激活时,该函数请求了约 256 GiB 的显存(即 251474432 字节,远大于 RX 7800 XT 的 16 GiB 显存),导致 OOM。虽然已尝试安装 flash-attention 和 aiter,但报错仍未解决,说明当前版本下 ROCm 的注意力计算后端(包括 FLASH_ATTN 和 AITER 后端的部分组合)可能存在兼容性问题。
环境排查
- 确认操作系统:Ubuntu 22.04.5 LTS
- 确认 Python 版本:3.12.12
- 确认 PyTorch 版本:2.9.0a0(ROCm 7.0 编译)
- 确认 GPU 型号:AMD RX 7800 XT(gfx1101),显存 16 GiB
- 确认 ROCm 版本:7.0.51831
- 确认已安装 flash_attn:2.8.3
- 确认已安装 aiter:0.1.5.dev157+g9716b1b81
- 确认 vLLM 版本:0.11.1rc6.dev14+ge5ef4dfc1
解决步骤
- 尝试切换注意力后端:使用环境变量
VLLM_ATTENTION_BACKEND强制指定后端,例如:VLLM_ATTENTION_BACKEND=FLASH_ATTN vllm serve Qwen/Qwen3-VL-2B-Instruct --dtype float16 --max-model-len 2048 --max-num-seqs 1 --max-num-batched-tokens 2048 --limit-mm-per-prompt '{"image":1,"video":0}' - 降低显存占用:尝试更小的
--max-model-len(如 1024)或更低的精度(如--dtype float32),但注意这不会根除注意力计算的异常分配。 - 更新 ROCm 或 vLLM:由于该问题与 ROCm 的注意力函数实现相关,可优先尝试升级到更新的 vLLM 版本(≥0.12.0 或 1.0.0),或等待 ROCm 7.1+ 的修复。
- 可优先尝试:从源码安装最新闪存注意力库(参考 Dockerfile.rocm_base 中的编译指南),而不是使用 pip 预编译包:
# 参考 https://github.com/vllm-project/vllm/blob/36960501d336a15cf0de7569e2662793ad9a4f3f/docker/Dockerfile.rocm_base#L81 git clone https://github.com/Dao-AILab/flash-attention cd flash-attention python setup.py install - 备选方案:如果问题持续,可以暂时禁用多模态功能(移除
--limit-mm-per-prompt或使用纯文本模型),以确认是否是多模态模块单独触发异常。
验证方法
运行 vllm serve 启动后,检查终端是否提示 CUDA error: out of memory。如果启动成功,再通过发送测试请求(如 curl 调用 /v1/chat/completions 传入图片)验证多模态推理正常。



