RuntimeError: Failed to infer device type, please set the environment variable VLLM_LOGGING_LEVEL=DEBUG to turn on verbose logging to help debug the issue.

用户使用 vLLM 在 Intel XPU(Arc GPU)的 Docker 容器中运行 vllm serve 命令时出现此错误。复现环境:基于 Intel oneAPI / PyTorch 2.12.0+xpu 的 Docker 自定义镜像,Level Zero 驱动可正常检测到 2 张 GPU(

快速结论:此报错在 Intel XPU(Arc GPU)环境下因 torch.xpu.device_count() 返回 0 而触发,优先排查 Docker 镜像构建时 Intel oneAPI 的 setvars.sh 是否未在 vLLM 启动前正确 source。

问题场景

用户使用 vLLM 在 Intel XPU(Arc GPU)的 Docker 容器中运行 vllm serve 命令时出现此错误。复现环境:基于 Intel oneAPI / PyTorch 2.12.0+xpu 的 Docker 自定义镜像,Level Zero 驱动可正常检测到 2 张 GPU(zeDriverGet() == 1),但 torch.xpu.device_count() 返回 0。这是一个回归问题——之前可正常运行的同一镜像构建版本在升级 PyTorch/oneAPI 后出现此故障。

报错原文

RuntimeError: Failed to infer device type, please set the environment variable VLLM_LOGGING_LEVEL=DEBUG to turn on verbose logging to help debug the issue.

# 前置警告(用于环境排查参考):
/opt/venv/lib/python3.12/site-packages/torch/xpu/__init__.py:74: UserWarning:
XPU device count is zero! (Triggered internally at /pytorch/c10/xpu/XPUFunctions.cpp:113.)
return torch._C._xpu_getDeviceCount()
0

INFO 06-29 19:52:44 [importing.py:53] Triton is installed but 0 active driver(s) found (expected 1). Disabling Triton to prevent runtime errors.
INFO 06-29 19:52:44 [importing.py:88] Triton not installed or not compatible; certain GPU-related functions will not be available.

原因分析

最可能原因:vLLM 的 Intel XPU Docker 镜像构建过程未正确执行 Intel oneAPI 的 setvars.sh 来初始化 UR/Level-Zero loader 所依赖的环境变量。即使宿主机上的 Level Zero 驱动可用且 zeDriverGet() 成功(检测到 1 个驱动),但如果缺少 oneAPI 运行时环境变量(例如 ZE_AFFINITY_MASKSYCL_CACHE_PERSISTENT 等),torch.xpu.device_count() 会返回 0,导致 vLLM 启动时触发此 RuntimeError。

已确认:该问题与 #47578 PR 描述的根因一致,是在 Docker 镜像更新后因环境初始化缺失而引入的回归。

环境排查

  • Docker 容器环境:确认使用的 vLLM 版本(特别是 Intel XPU 相关 Docker 镜像构建日期或 commit)。
  • PyTorch 版本:检查是否为 2.12.0+xpu 或其他已更新版本。
  • Intel oneAPI 运行时:验证容器内是否已 source setvars.sh(路径通常为 /opt/intel/oneapi/setvars.sh 或 Dockerfile 中的自定义路径)。
  • Level Zero 驱动:执行 ldconfig -p | grep ze_intel 确认库文件存在。
  • torch.xpu 检测:在容器内单独运行 python -c "import torch; print(torch.xpu.device_count())" 确认返回是否 >0。
  • 关键环境变量:检查 ZE_AFFINITY_MASKSYCL_CACHE_PERSISTENTUR_L0_METRICS_ENABLED 等变量是否已正确设置。

解决步骤

  1. 验证根源(可优先尝试):在 Docker 容器内运行 python -c "import torch; print(torch.xpu.device_count())"。如果结果为 0,确认 oneAPI 环境未加载。
  2. 修复 Docker 镜像构建:确保在 Dockerfile 中 vLLM 服务启动前,source 了 Intel oneAPI 的 setvars.sh。例如(具体路径根据镜像实际情况调整):
    RUN . /opt/intel/oneapi/setvars.sh && vllm serve ...

    或将环境变量的设置固化到镜像中:在 Dockerfile 中手动设置 related environment variables(参考 PR #47578 的改动)。

  3. 临时验证方法:在容器启动命令(如 docker run / docker-compose)的 commandentrypoint 中,在 vllm serve 之前添加 . /opt/intel/oneapi/setvars.sh &&
  4. 应用 #47578 的修复:该 PR 已提交并等待合并。如果可能,将本地镜像中的 Dockerfile 同步该 PR 的修改,主要是在初始化阶段补充 oneAPI 环境变量。

验证方法

在修复后重新构建镜像并启动容器:

  • 运行 python -c "import torch; print(torch.xpu.device_count())" 应返回大于 0 的数字(如 2)。
  • 运行 vllm serve ... 不应再报 RuntimeError,且启动日志中应显示 GPU 设备被正确识别。

参考来源

vllm-project/vllm #47661

vllm-project/vllm #47578 (相关的已打开修复 PR)

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 16161

发表回复

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