From 9a48eef89a777fc7039d9765fb2f6fc618216948 Mon Sep 17 00:00:00 2001 From: Alejandro Paredes La Torre <99832715+AlejandroParedesLT@users.noreply.github.com> Date: Sat, 11 Jul 2026 17:13:50 -0700 Subject: [PATCH] [Bugfix][LoRA] Support ark_linear base layer in _get_lora_device (#47690) Signed-off-by: AlejandroParedesLT --- tests/lora/test_layers_utils.py | 39 +++++++++++++++++++++++++++++++++ vllm/lora/layers/utils.py | 3 +++ 2 files changed, 42 insertions(+) create mode 100644 tests/lora/test_layers_utils.py diff --git a/tests/lora/test_layers_utils.py b/tests/lora/test_layers_utils.py new file mode 100644 index 0000000000..0087519a33 --- /dev/null +++ b/tests/lora/test_layers_utils.py @@ -0,0 +1,39 @@ +# SPDX-License-Identifier: Apache-2.0 +# SPDX-FileCopyrightText: Copyright contributors to the vLLM project + +import pytest +import torch +from torch import nn + +from vllm.lora.layers.utils import _get_lora_device + +pytestmark = pytest.mark.skip_global_cleanup + + +def _param() -> nn.Parameter: + return nn.Parameter(torch.empty(1), requires_grad=False) + + +def test_get_lora_device_unquantized(): + base_layer = nn.Module() + base_layer.weight = _param() + assert _get_lora_device(base_layer) == base_layer.weight.device + + +def test_get_lora_device_gptq_awq(): + base_layer = nn.Module() + base_layer.qweight = _param() + assert _get_lora_device(base_layer) == base_layer.qweight.device + + +def test_get_lora_device_ark_linear(): + base_layer = nn.Module() + base_layer.ark_linear = nn.Module() + base_layer.ark_linear.qweight = _param() + assert _get_lora_device(base_layer) == base_layer.ark_linear.qweight.device + + +def test_get_lora_device_unsupported_raises(): + base_layer = nn.Module() + with pytest.raises(ValueError, match="Unsupported base layer"): + _get_lora_device(base_layer) diff --git a/vllm/lora/layers/utils.py b/vllm/lora/layers/utils.py index 17c21d36f5..b4cde2564b 100644 --- a/vllm/lora/layers/utils.py +++ b/vllm/lora/layers/utils.py @@ -57,6 +57,9 @@ def _get_lora_device(base_layer: nn.Module) -> torch.device: # GPTQ/AWQ elif hasattr(base_layer, "qweight"): return base_layer.qweight.device + # INC WNA16 (AutoRound) + elif hasattr(base_layer, "ark_linear"): + return base_layer.ark_linear.qweight.device # MoE layer elif hasattr(base_layer, "w2_weight"): return base_layer.w2_weight.device