Skip to content

Commit c1378b8

Browse files
[BugFix] qwen3 no load (#179)
qwen3 no load
1 parent 41f99b4 commit c1378b8

File tree

3 files changed

+39
-14
lines changed

3 files changed

+39
-14
lines changed

vllm/model_executor/models/qwen3_vl.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,9 @@
8282
from .qwen2_vl import Qwen2VLProcessingInfo
8383
from .qwen3 import Qwen3ForCausalLM, Qwen3Model
8484
from .utils import (AutoWeightsLoader, PPMissingLayer, WeightsMapper,
85-
maybe_prefix, merge_multimodal_embeddings)
85+
maybe_init_language_model, maybe_prefix,
86+
maybe_skip_language_model_prefix,
87+
merge_multimodal_embeddings)
8688
from .vision import get_vit_attn_backend, run_dp_sharded_mrope_vision_model
8789

8890
logger = init_logger(__name__)
@@ -1138,13 +1140,14 @@ def __init__(self, *, vllm_config: VllmConfig, prefix: str = "model"):
11381140
use_data_parallel=self.use_data_parallel,
11391141
)
11401142

1141-
self.language_model = Qwen3LLMForCausalLM(vllm_config=vllm_config,
1142-
prefix=maybe_prefix(
1143-
prefix,
1144-
"language_model"))
1143+
self.language_model = maybe_init_language_model(
1144+
lambda: Qwen3LLMForCausalLM(vllm_config=vllm_config,
1145+
prefix=maybe_prefix(
1146+
prefix, "language_model")))
11451147

1146-
self.make_empty_intermediate_tensors = (
1147-
self.language_model.make_empty_intermediate_tensors)
1148+
if self.language_model is not None:
1149+
self.make_empty_intermediate_tensors = (
1150+
self.language_model.make_empty_intermediate_tensors)
11481151

11491152
self.use_deepstack = hasattr(config.vision_config,
11501153
'deepstack_visual_indexes')
@@ -1599,6 +1602,7 @@ def load_weights(self, weights: Iterable[tuple[str,
15991602
skip_prefixes = []
16001603
if self.visual is None:
16011604
skip_prefixes.extend(["visual."])
1605+
maybe_skip_language_model_prefix(self, skip_prefixes, "language_model")
16021606
loader = AutoWeightsLoader(self, skip_prefixes=skip_prefixes)
16031607
return loader.load_weights(weights, mapper=self.hf_to_vllm_mapper)
16041608

vllm/model_executor/models/qwen3_vl_moe.py

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@
4646
from .qwen3_vl import (Qwen3_VisionTransformer, Qwen3VLDummyInputsBuilder,
4747
Qwen3VLForConditionalGeneration,
4848
Qwen3VLMultiModalProcessor, Qwen3VLProcessingInfo)
49-
from .utils import is_pp_missing_parameter, maybe_prefix
49+
from .utils import (is_pp_missing_parameter, maybe_init_language_model,
50+
maybe_prefix)
5051

5152
logger = init_logger(__name__)
5253

@@ -331,13 +332,14 @@ def __init__(self, *, vllm_config: VllmConfig, prefix: str = ""):
331332
use_data_parallel=self.use_data_parallel,
332333
)
333334

334-
self.language_model = Qwen3MoeLLMForCausalLM(vllm_config=vllm_config,
335-
prefix=maybe_prefix(
336-
prefix,
337-
"language_model"))
335+
self.language_model = maybe_init_language_model(
336+
lambda: Qwen3MoeLLMForCausalLM(vllm_config=vllm_config,
337+
prefix=maybe_prefix(
338+
prefix, "language_model")))
338339

339-
self.make_empty_intermediate_tensors = (
340-
self.language_model.make_empty_intermediate_tensors)
340+
if self.language_model is not None:
341+
self.make_empty_intermediate_tensors = (
342+
self.language_model.make_empty_intermediate_tensors)
341343

342344
self.use_deepstack = hasattr(config.vision_config,
343345
'deepstack_visual_indexes')

vllm/model_executor/models/utils.py

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,25 @@ def apply_dict(self, values: dict[str, Any]) -> dict[str, Any]:
8282
}
8383

8484

85+
# Skip language model in Encoder instance
86+
def maybe_init_language_model(init_fn):
87+
if has_ec_transfer() and get_ec_transfer().is_producer:
88+
return None
89+
return init_fn()
90+
91+
92+
# Skiped language model prefix
93+
def maybe_skip_language_model_prefix(
94+
module: nn.Module,
95+
skip_prefixes: list[str],
96+
language_attr: str = "language_model",
97+
):
98+
if (has_ec_transfer() and get_ec_transfer().is_producer
99+
and hasattr(module, language_attr)
100+
and getattr(module, language_attr) is None):
101+
skip_prefixes.append(f"{language_attr}.")
102+
103+
85104
class AutoWeightsLoader:
86105
"""
87106
Helper class to load weights into a [`torch.nn.Module`][]. It is able

0 commit comments

Comments
 (0)