No module named ‘vllm._C’

这个报错通常出现在使用 VLLM_TARGET_DEVICE=empty 构建的 vLLM v0.20.2 上,而 v0.20.2 默认启用 V1 engine,V1 engine 的模型初始化会调用未编译进 empty 构建的 C++ 扩展,从而抛出 No module named 'vllm._

快速结论:这个报错通常出现在使用 VLLM_TARGET_DEVICE=empty 构建的 vLLM v0.20.2 上,而 v0.20.2 默认启用 V1 engine,V1 engine 的模型初始化会调用未编译进 empty 构建的 C++ 扩展,从而抛出 No module named 'vllm._C' 相关错误。优先排查构建类型与 vLLM 版本是否匹配,新版本可能已修复。

适用环境:Issue 已确认环境为 vLLM v0.20.2、empty 构建(VLLM_TARGET_DEVICE=empty)、Kunlunxin P800 × 8、Python 3.10、PyTorch 2.9.0。后续评论验证使用当前 main 分支、empty 构建、平台解析为 UnspecifiedPlatform(未检测到 CUDA/ROCm/CPU/XPU)。

最快修复方案:暂无确认的一步修复方案。Issue 报告者未找到可行 workaround,只能改用包含 C++ 扩展的完整构建,或降级到 V1 成为默认引擎之前的 vLLM 版本。后续评论指出当前 main 分支已无法复现,可优先尝试升级到已包含 CustomOp dispatch 修复的较新版本。

注意事项:“升级到 main 已修复”来自评论者手动复现,并非官方针对性修复,相关改动可能源于 #32806 或 #30547 等无关的 CustomOp dispatch 变更,尚未在 v0.20.2 上验证。Issue 中未提供 v0.20.2 强制回退 V0 engine 的环境变量或参数。

问题场景

在 vLLM v0.20.2 上使用 empty 构建(VLLM_TARGET_DEVICE=empty),通过 python -m vllm.entrypoints.openai.api_server 启动 OpenAI 兼容服务,或直接调用 LLM() API 加载任意模型时触发。v0.20.2 默认使用 V1 engine(vllm.v1.engine.async_llm.AsyncLLM),而 empty 构建不编译 C++ 扩展,V1 engine 的模型初始化路径依赖 torch.ops._C.silu_and_mul 等 C++ 算子,导致初始化失败。

报错原文

WARNING: Failed to import from vllm._C: ModuleNotFoundError("No module named 'vllm._C'")
...
(EngineCore) self.act_fn = SiluAndMul()
(EngineCore) self.op = torch.ops._C.silu_and_mul
(EngineCore) AttributeError: '_OpNamespace' '_C' object has no attribute 'silu_and_mul'

原因分析

最可能的原因是三者的组合不兼容:

  1. vLLM v0.20.2 默认启用 V1 engine;
  2. empty 构建不编译 C++ 扩展,因此不存在 vllm._C 模块;
  3. V1 engine 的模型初始化依赖 torch.ops._C.silu_and_mul 等 C++ 算子。

调用链为 AsyncLLM.from_vllm_config()EngineCoreClient.make_async_mp_client()executor_class(vllm_config)driver_worker.load_model()initialize_model()Qwen3ForCausalLM.__init__()Qwen3MLP.__init__()SiluAndMul.__init__()self.op = torch.ops._C.silu_and_mul,最终在该行失败。Issue 报告者未找到强制使用 V0 engine 的环境变量或参数。

环境排查

  • 确认 vLLM 版本是否为 v0.20.2,以及是否使用默认 V1 engine。
  • 确认构建类型:是否设置了 VLLM_TARGET_DEVICE=empty
  • 确认是否安装了包含 C++ 扩展的完整构建,可以检查 vllm._C 模块是否存在。
  • 确认 Python 版本(Issue 为 3.10)与 PyTorch 版本(Issue 为 2.9.0)。
  • 确认硬件平台:Issue 为 Kunlunxin P800 × 8;后续评论中的空构建复现环境为 current_platform 解析到 UnspecifiedPlatform(未检测到 CUDA/ROCm/CPU/XPU)。
  • 确认当前代码分支或版本是否已包含 CustomOp dispatch 相关修复。

解决步骤

  1. 先确认问题是否与 empty 构建有关:检查运行环境中是否存在 vllm._C 模块,或日志中是否出现 Failed to import from vllm._C
  2. 如果必须使用 v0.20.2:该版本下 empty 构建与默认 V1 engine 不兼容。Issue 中未提供可用的强制 V0 engine 方案,报告者认为只能改用完整构建(包含 C++ 扩展),或降级到 V1 成为默认引擎之前的 vLLM 版本。
  3. 可优先尝试升级到较新版本:后续评论者在当前 main 分支(远晚于 v0.20.2)使用 empty 构建、平台解析为 UnspecifiedPlatform 时,直接实例化 SiluAndMul 不再触发 AttributeErrordispatch_forward 会在算子对当前平台未启用时回退到 forward_native,而不是默认走 forward_cuda
  4. 评论者推测该行为变化来自无关的 CustomOp dispatch 改动(可能为 #32806 或 #30547),并非针对本 Issue 的定向修复。升级后建议自行复现验证,确认所选版本确实包含相应改动。

验证方法

在目标版本上使用 empty 构建重新启动 vLLM 服务或调用 LLM() API 加载模型。如果不再出现 No module named 'vllm._C'AttributeError: '_OpNamespace' '_C' object has no attribute 'silu_and_mul',且模型能够正常完成初始化并推理,则说明问题已缓解或解决。由于后续验证仅覆盖手动设置 vllm_config 上下文后实例化 SiluAndMul 的场景,建议再跑一遍完整的 server 或 LLM() 加载流程确认。

参考来源

vllm-project/vllm #55856

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

这个方案解决了吗?

celebrityanime
celebrityanime
文章: 23228

发表回复

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