
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 权重的匹配关系。
解决步骤
- 升级到已修复版本: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 或更高版本。 - 如果无法升级,可手动打补丁:对
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 的代码变更。 - 临时规避方案:如果仅需测试基础功能,可尝试设置
--tensor-parallel-size 1以绕过 TP 相关的形状不匹配问题。但此举可能影响性能,并且无法解决 AutoRound 模型下的_get_lora_device问题。 - 确认环境配置:检查
--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 layer 或 RuntimeError: inputs.size(1) must match lora_b_weights.size(-1) 报错。



