RuntimeError: inputs.size(1) must match lora_b_weights.size(-1)

用户在 Intel Arc Pro B70 (Battlemage) XPU 上使用 vLLM 0.24.0 源码构建版本,加载 Intel/Qwen3.6-27B-int4-AutoRound 模型并启用 --enable-lora --tensor-parallel-size 2 时,服务启动崩

RuntimeError: inputs.size(1) must match lora_b_weights.size(-1)

RuntimeError: inputs.size(1) must match lora_b_weights.size(-1)

快速结论:此报错通常发生在 vLLM 在 int4 AutoRound(INC WNA16)模型上启用 --enable-lora 时,主要原因是 LoRA 权重尺寸不匹配。优先排查是否使用了 TP>1 且 LoRA 未分片(non-sharded),或者是否遭遇了 _get_lora_device 对 AutoRound 模型不支持的 bug。

问题场景

用户在 Intel Arc Pro B70 (Battlemage) XPU 上使用 vLLM 0.24.0 源码构建版本,加载 Intel/Qwen3.6-27B-int4-AutoRound 模型并启用 --enable-lora --tensor-parallel-size 2 时,服务启动崩溃。此问题涉及两个独立 bug,分别影响 AutoRound int4 模型的 LoRA 初始化和 TP>1 场景下的 LoRA 应用。

报错原文

RuntimeError: inputs.size(1) must match lora_b_weights.size(-1)

此外,还存在以下前置报错:

  File ".../vllm/lora/layers/base_linear.py", line 80, in __init__
    self.device = _get_lora_device(self.base_layer)
  File ".../vllm/lora/layers/utils.py", line 70, in _get_lora_device
    raise ValueError(f"Unsupported base layer: {base_layer}")
ValueError: Unsupported base layer: MergedColumnParallelLinear(
  in_features=5120, output_features=8192, bias=False, tp_size=2, gather_output=False
  (ark_linear): QuantLinear(in_features=5120, out_features=8192, bias=True, w_bit=4, group_size=128)
)

原因分析

此问题由两个独立 bug 导致:

  • Bug 1 – AutoRound 模型兼容性:_get_lora_device 函数未识别 INC/AutoRound 的 ark_linear 布局。AutoRound 量化后,权重被重新打包到 ark_linear 子模块中,原始 qweight/qzeros/scales 被删除,导致 _get_lora_device 无法找到可用权重张量,抛出 ValueError。这是启动时崩溃的直接原因。
  • Bug 2 – 非分片 LoRA 与 TP>1 冲突:在修复 Bug 1 后,TP>1 场景下 _mcp_apply 中无条件执行 tensor_model_parallel_all_gather,对非分片(默认)LoRA 造成 rank 维度形状不匹配,触发 RuntimeError: inputs.size(1) must match lora_b_weights.size(-1)。此 bug 并非 XPU 专属,但用户在 v0.24.0 上验证并修复。

注意:Issue 作者已关闭问题,两个 bug 均在上游修复。但用户提供的 RuntimeError 报错可能与 Bug 2 相关,也可能是其他配置下的类似尺寸不匹配问题。

环境排查

  • vLLM 版本:0.24.0+xpu(源码构建)
  • PyTorch 版本:2.12.0+xpu(XPU runtime 20250302, oneAPI 2025.3.3)
  • GPU:2× Intel Arc Pro B70 (Battlemage G31),TP=2
  • 模型:Intel/Qwen3.6-27B-int4-AutoRound(W4A16, group_size=128)
  • 关键启动参数:--tensor-parallel-size 2 --enforce-eager --max-model-len 32768 --enable-lora --max-lora-rank 64 --max-loras 2
  • 额外环境变量(oneCCL):CCL_ENABLE_SYCL_KERNELS=0, CCL_ATL_TRANSPORT=ofi, CCL_ZE_IPC_EXCHANGE=sockets, CCL_TOPO_FABRIC_VERTEX_CONNECTION_CHECK=0, SYCL_UR_USE_LEVEL_ZERO_V2=0
  • 操作系统:Ubuntu 26.04 LTS,内核 7.0.0-27-generic,xe 驱动

如果遇到尺寸不匹配报错,还需要确认 LoRA adapter 的 rank 设置、模型 hidden_size 与 LoRA 权重的匹配关系。

解决步骤

  1. 升级到已修复版本:Bug 2(_mcp_apply 无条件 all_gather)已在 v0.25.1 中修复(合并于 #45715)。Bug 1(_get_lora_device 对 AutoRound 模型不支持)已在 #47690 中修复(合并于 2026-07-12),但该修复未包含在 v0.25 分支中,需等待下一个小版本。建议直接升级到 v0.25.1 或更高版本。
  2. 如果无法升级,可手动打补丁:vllm/lora/layers/utils.py 中的 _get_lora_device 函数,添加 ark_linear 分支以支持 AutoRound 模型:
        # AutoRound ark QuantLinear (INC WNA16 scheme): quantized tensors are
        # repacked into the `ark_linear` submodule and the originals are deleted
        # from the parallel layer after weight loading.
        elif hasattr(base_layer, "ark_linear"):
            return base_layer.ark_linear.qweight.device

    对于 Bug 2,需要修改 _mcp_apply 函数,使 tensor_model_parallel_all_gather 仅在 LoRA 被分片时执行。具体补丁请参考 Issue 评论或 #45715 的代码变更。

  3. 临时规避方案:如果仅需测试基础功能,可尝试设置 --tensor-parallel-size 1 以绕过 TP 相关的形状不匹配问题。但此举可能影响性能,并且无法解决 AutoRound 模型下的 _get_lora_device 问题。
  4. 确认环境配置:检查 --max-lora-rank 是否与加载的 LoRA adapter 实际 rank 一致,确保 lora_b_weights 的最后一维尺寸与输入的第二维尺寸匹配。

验证方法

启动 vLLM 服务后,检查能否正常加载 LoRA adapter(例如通过 /v1/load_lora_adapter API),并验证推理请求是否正常返回结果。可尝试使用零权重 LoRA adapter(lora_B = 0)验证输出是否与基础模型在 temperature=0 时完全一致,以确认补丁或升级未引入回归。另外,检查日志中是否不再出现 ValueError: Unsupported base layerRuntimeError: inputs.size(1) must match lora_b_weights.size(-1) 报错。

参考来源

vllm-project/vllm #47650

GamsGo AI

AI 工具推荐

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

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

了解 GamsGo AI

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

celebrityanime
celebrityanime
文章: 13278

发表回复

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