A high-throughput and memory-efficient inference and serving engine for LLMs
Mirrored from https://github.com/tduncan-lum/Nvidia-Optimization-Stack---VLLM.git
Synced Nov 14, 05:30 UTC
[V0 Deprecation][Models] Remove all V0 condition for mm embeddings merge (#25331)
Signed-off-by: Isotr0py <mozf@mail2.sysu.edu.cn> Signed-off-by: isotr0py <2037008807@qq.com>
Isotr0py committed
Sep 29, 2025 at 14:09 UTC
bd51f78e39e0ea80b1d3bfbb17d24f40b1f62f6c
42 files changed
+13
-809
vllm/model_executor/models/aya_vision.py
-11
@@ -427,17 +427,6 @@ class AyaVisionForConditionalGeneration(nn.Module, SupportsMultiModal,
427
if intermediate_tensors is not None:
428
inputs_embeds = None
429
430
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
431
- # condition is for v0 compatibility.
432
- elif inputs_embeds is None:
433
- vision_embeddings = self.get_multimodal_embeddings(**kwargs)
434
- inputs_embeds = self.get_input_embeddings(
435
- input_ids,
436
- vision_embeddings,
437
- is_multimodal=input_ids == self.config.image_token_index,
438
- )
439
- input_ids = None
440
-
430
hidden_states = self.language_model.model(
431
input_ids=input_ids,
432
positions=positions,
vllm/model_executor/models/blip2.py
-11
@@ -672,17 +672,6 @@ class Blip2ForConditionalGeneration(nn.Module, SupportsMultiModal, SupportsPP,
672
if intermediate_tensors is not None:
673
inputs_embeds = None
674
675
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
676
- # condition is for v0 compatibility.
677
- elif inputs_embeds is None:
678
- vision_embeddings = self.get_multimodal_embeddings(**kwargs)
679
- inputs_embeds = self.get_input_embeddings(
680
- input_ids,
681
- vision_embeddings,
682
- is_multimodal=input_ids == _IMAGE_TOKEN_ID,
683
- )
684
- input_ids = None
685
-
675
hidden_states = self.language_model.model(input_ids,
676
positions,
677
intermediate_tensors,
vllm/model_executor/models/chameleon.py
-12
@@ -1014,18 +1014,6 @@ class ChameleonForConditionalGeneration(nn.Module, SupportsMultiModal,
1014
if intermediate_tensors is not None:
1015
inputs_embeds = None
1016
1017
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
1018
- # condition is for v0 compatibility.
1019
- elif inputs_embeds is None:
1020
- vision_embeddings = self.get_multimodal_embeddings(**kwargs)
1021
- image_token_id = self.model.vocabulary_mapping.image_token_id
1022
- inputs_embeds = self.get_input_embeddings(
1023
- input_ids,
1024
- vision_embeddings,
1025
- is_multimodal=input_ids == image_token_id,
1026
- )
1027
- input_ids = None
1028
-
1017
hidden_states = self.model(input_ids,
1018
positions,
1019
intermediate_tensors,
vllm/model_executor/models/cohere2_vision.py
-11
@@ -440,17 +440,6 @@ class Cohere2VisionForConditionalGeneration(nn.Module, SupportsMultiModal,
440
if intermediate_tensors is not None:
441
inputs_embeds = None
442
443
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
444
- # condition is for v0 compatibility.
445
- elif inputs_embeds is None:
446
- vision_embeddings = self.get_multimodal_embeddings(**kwargs)
447
- inputs_embeds = self.get_input_embeddings(
448
- input_ids,
449
- vision_embeddings,
450
- is_multimodal=input_ids == self.config.image_token_id,
451
- )
452
- input_ids = None
453
-
443
hidden_states = self.language_model.model(
444
input_ids=input_ids,
445
positions=positions,
vllm/model_executor/models/deepseek_vl2.py
-11
@@ -614,17 +614,6 @@ class DeepseekVLV2ForCausalLM(nn.Module, SupportsMultiModal, SupportsPP):
614
if intermediate_tensors is not None:
615
inputs_embeds = None
616
617
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
618
- # condition is for v0 compatibility
619
- elif inputs_embeds is None:
620
- vision_embeddings = self.get_multimodal_embeddings(**kwargs)
621
- inputs_embeds = self.get_input_embeddings(
622
- input_ids,
623
- vision_embeddings,
624
- is_multimodal=input_ids == self.image_token_id,
625
- )
626
- input_ids = None
627
-
617
hidden_states = self.language_model(input_ids,
618
positions,
619
intermediate_tensors,
vllm/model_executor/models/fuyu.py
-11
@@ -352,17 +352,6 @@ class FuyuForCausalLM(nn.Module, SupportsMultiModal, SupportsPP):
352
if intermediate_tensors is not None:
353
inputs_embeds = None
354
355
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
356
- # condition is for v0 compatibility.
357
- elif inputs_embeds is None:
358
- vision_embeddings = self.get_multimodal_embeddings(**kwargs)
359
- inputs_embeds = self.get_input_embeddings(
360
- input_ids,
361
- vision_embeddings,
362
- is_multimodal=input_ids == _IMAGE_TOKEN_ID,
363
- )
364
- input_ids = None
365
-
355
hidden_states = self.language_model(
356
input_ids=input_ids,
357
positions=positions,
vllm/model_executor/models/gemma3_mm.py
-19
@@ -596,25 +596,6 @@ class Gemma3ForConditionalGeneration(nn.Module, SupportsMultiModal, SupportsPP,
596
if intermediate_tensors is not None:
597
inputs_embeds = None
598
599
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
600
- # condition is for v0 compatibility.
601
- elif inputs_embeds is None:
602
- vision_embeddings = self.get_multimodal_embeddings(**kwargs)
603
-
604
- inputs_embeds = self.get_input_embeddings(
605
- input_ids,
606
- vision_embeddings,
607
- is_multimodal=input_ids == self.config.image_token_index,
608
- )
609
- if (vision_embeddings is not None) and len(vision_embeddings) != 0:
610
- kwargs = self.prepare_attn_masks(
611
- input_ids,
612
- positions,
613
- mask_dtype=self.dtype,
614
- **kwargs,
615
- )
616
- input_ids = None
617
-
599
hidden_states = self.language_model.model(input_ids,
600
positions,
601
intermediate_tensors,
vllm/model_executor/models/glm4_1v.py
+1
-49
@@ -71,7 +71,6 @@ from vllm.multimodal.processing import (BaseMultiModalProcessor,
71
from vllm.multimodal.profiling import BaseDummyInputsBuilder
72
from vllm.platforms import _Backend
73
from vllm.sequence import IntermediateTensors
74
-from vllm.transformers_utils.config import uses_mrope
74
from vllm.utils.tensor_schema import TensorSchema, TensorShape
75
76
from ..layers.activation import SiluAndMul
@@ -80,8 +79,7 @@ from .interfaces import (MultiModalEmbeddings, SupportsLoRA,
79
from .qwen2_vl import (_create_qwen2vl_field_factory,
80
apply_rotary_pos_emb_vision)
81
from .utils import (AutoWeightsLoader, WeightsMapper,
83
- init_vllm_registered_model, maybe_prefix,
84
- merge_multimodal_embeddings)
82
+ init_vllm_registered_model, maybe_prefix)
83
from .vision import get_vit_attn_backend, run_dp_sharded_mrope_vision_model
84
85
logger = init_logger(__name__)
@@ -1552,32 +1550,6 @@ class Glm4vForConditionalGeneration(nn.Module, SupportsMultiModal,
1550
multimodal_embeddings += video_embeddings
1551
return multimodal_embeddings
1552
1555
- def get_input_embeddings_v0(
1556
- self,
1557
- input_ids: torch.Tensor,
1558
- image_input: Optional[Glm4vImageInputs] = None,
1559
- video_input: Optional[Glm4vVideoInputs] = None,
1560
- ) -> torch.Tensor:
1561
- inputs_embeds = self.get_input_embeddings(input_ids)
1562
- if image_input is not None:
1563
- image_embeds = self._process_image_input(image_input)
1564
- inputs_embeds = merge_multimodal_embeddings(
1565
- input_ids,
1566
- inputs_embeds,
1567
- image_embeds,
1568
- placeholder_token_id=self.config.image_token_id,
1569
- )
1570
-
1571
- if video_input is not None:
1572
- video_embeds = self._process_video_input(video_input)
1573
- inputs_embeds = merge_multimodal_embeddings(
1574
- input_ids,
1575
- inputs_embeds,
1576
- video_embeds,
1577
- placeholder_token_id=self.config.video_token_id,
1578
- )
1579
- return inputs_embeds
1580
-
1553
def forward(
1554
self,
1555
input_ids: torch.Tensor,
@@ -1604,26 +1576,6 @@ class Glm4vForConditionalGeneration(nn.Module, SupportsMultiModal,
1576
if intermediate_tensors is not None:
1577
inputs_embeds = None
1578
1607
- # NOTE: In v1, inputs_embeds is always generated at model runner from
1608
- # `get_multimodal_embeddings` and `get_input_embeddings`, this
1609
- # condition is only for v0 compatibility.
1610
- elif inputs_embeds is None:
1611
- image_input = self._parse_and_validate_image_input(**kwargs)
1612
- video_input = self._parse_and_validate_video_input(**kwargs)
1613
-
1614
- if image_input is None and video_input is None:
1615
- inputs_embeds = None
1616
- else:
1617
- if uses_mrope(self.config):
1618
- assert positions.ndim == 2 and positions.size(0) == 3, (
1619
- "multimodal section rotary embedding requires "
1620
- f"(3, seq_len) positions, but got {positions.size()}")
1621
- inputs_embeds = self.get_input_embeddings_v0(
1622
- input_ids,
1623
- image_input=image_input,
1624
- video_input=video_input)
1625
- input_ids = None
1626
-
1579
hidden_states = self.language_model.model(
1580
input_ids=input_ids,
1581
positions=positions,
vllm/model_executor/models/glm4v.py
+1
-16
@@ -43,7 +43,7 @@ from vllm.utils.tensor_schema import TensorSchema, TensorShape
43
from .chatglm import ChatGLMBaseModel, ChatGLMModel
44
from .interfaces import (MultiModalEmbeddings, SupportsLoRA,
45
SupportsMultiModal, SupportsPP)
46
-from .utils import flatten_bn, isin_list
46
+from .utils import flatten_bn
47
48
49
class GLMVImagePixelInputs(TensorSchema):
@@ -618,21 +618,6 @@ class GLM4VForCausalLM(ChatGLMBaseModel, SupportsLoRA, SupportsPP,
618
if intermediate_tensors is not None:
619
inputs_embeds = None
620
621
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
622
- # condition is for v0 compatibility.
623
- elif inputs_embeds is None:
624
- vision_embeddings = self.get_multimodal_embeddings(**kwargs)
625
- inputs_embeds = self.get_input_embeddings(
626
- input_ids,
627
- vision_embeddings,
628
- is_multimodal=isin_list(input_ids, [
629
- self.config.boi_token_id,
630
- self.config.pad_token_id,
631
- self.config.eoi_token_id,
632
- ]),
633
- )
634
- input_ids = None
635
-
621
hidden_states = self.transformer(input_ids, positions,
622
intermediate_tensors, inputs_embeds)
623
vllm/model_executor/models/granite_speech.py
-11
@@ -765,17 +765,6 @@ class GraniteSpeechForConditionalGeneration(
765
if intermediate_tensors is not None:
766
inputs_embeds = None
767
768
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
769
- # condition is for v0 compatibility.
770
- elif inputs_embeds is None:
771
- audio_embeds = self.get_multimodal_embeddings(**kwargs)
772
- inputs_embeds = self.get_input_embeddings(
773
- input_ids,
774
- audio_embeds,
775
- is_multimodal=input_ids == self.config.audio_token_index,
776
- )
777
- input_ids = None
778
-
768
model_output = self.language_model(input_ids, positions,
769
intermediate_tensors, inputs_embeds)
770
return model_output
vllm/model_executor/models/hyperclovax_vision.py
+1
-14
@@ -45,8 +45,7 @@ from vllm.sequence import IntermediateTensors
45
from .clip import CLIPVisionModel
46
from .interfaces import MultiModalEmbeddings, SupportsMultiModal, SupportsPP
47
from .siglip import SiglipVisionModel
48
-from .utils import (AutoWeightsLoader, init_vllm_registered_model, isin_list,
49
- maybe_prefix)
48
+from .utils import AutoWeightsLoader, init_vllm_registered_model, maybe_prefix
49
from .vision import get_vision_encoder_info
50
51
EOT = "<|endofturn|>"
@@ -747,18 +746,6 @@ class HCXVisionForCausalLM(nn.Module, SupportsMultiModal, SupportsPP):
746
if intermediate_tensors is not None:
747
inputs_embeds = None
748
750
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
751
- # condition is for v0 compatibility.
752
- elif inputs_embeds is None:
753
- multimodal_embeddings = self.get_multimodal_embeddings(**kwargs)
754
- inputs_embeds = self.get_input_embeddings(
755
- input_ids,
756
- multimodal_embeddings,
757
- is_multimodal=isin_list(
758
- input_ids,
759
- [self.config.image_token_id, self.config.video_token_id]),
760
- )
761
- input_ids = None
749
hidden_states = self.language_model.model(input_ids,
750
positions,
751
intermediate_tensors,
vllm/model_executor/models/idefics3.py
-11
@@ -702,17 +702,6 @@ class Idefics3ForConditionalGeneration(nn.Module, SupportsMultiModal,
702
if intermediate_tensors is not None:
703
inputs_embeds = None
704
705
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
706
- # condition is for v0 compatibility.
707
- elif inputs_embeds is None:
708
- vision_embeddings = self.get_multimodal_embeddings(**kwargs)
709
- inputs_embeds = self.get_input_embeddings(
710
- input_ids,
711
- vision_embeddings,
712
- is_multimodal=input_ids == self.config.image_token_id,
713
- )
714
- input_ids = None
715
-
705
hidden_states = self.model.text_model(input_ids,
706
positions,
707
intermediate_tensors,
vllm/model_executor/models/interns1.py
+1
-17
@@ -40,7 +40,7 @@ from vllm.utils.tensor_schema import TensorSchema, TensorShape
40
from .interfaces import (MultiModalEmbeddings, SupportsLoRA,
41
SupportsMultiModal, SupportsPP)
42
from .utils import (AutoWeightsLoader, WeightsMapper, flatten_bn,
43
- init_vllm_registered_model, isin_list, maybe_prefix)
43
+ init_vllm_registered_model, maybe_prefix)
44
45
46
class InternS1MultiModalProjector(nn.Module):
@@ -798,22 +798,6 @@ class InternS1ForConditionalGeneration(nn.Module, SupportsMultiModal,
798
input_ids = None
799
inputs_embeds = None
800
801
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
802
- # condition is for v0 compatibility.
803
- elif inputs_embeds is None:
804
- context_token_ids = [
805
- token_id for token_id in (self.img_context_token_id,
806
- self.video_context_token_id)
807
- if token_id is not None
808
- ]
809
- vision_embeddings = self.get_multimodal_embeddings(**kwargs)
810
- inputs_embeds = self.get_input_embeddings(
811
- input_ids,
812
- vision_embeddings,
813
- is_multimodal=isin_list(input_ids, context_token_ids),
814
- )
815
- input_ids = None
816
-
801
forward_kwargs = {
802
"input_ids": input_ids,
803
"positions": positions,
vllm/model_executor/models/internvl.py
+1
-17
@@ -43,7 +43,7 @@ from vllm.utils.tensor_schema import TensorSchema, TensorShape
43
from .interfaces import (MultiModalEmbeddings, SupportsLoRA,
44
SupportsMultiModal, SupportsPP)
45
from .utils import (AutoWeightsLoader, flatten_bn, init_vllm_registered_model,
46
- isin_list, maybe_prefix)
46
+ maybe_prefix)
47
48
IMG_START = '<img>'
49
IMG_END = '</img>'
@@ -1371,22 +1371,6 @@ class InternVLChatModel(nn.Module, SupportsMultiModal, SupportsPP,
1371
input_ids = None
1372
inputs_embeds = None
1373
1374
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
1375
- # condition is for v0 compatibility.
1376
- elif inputs_embeds is None:
1377
- context_token_ids = [
1378
- token_id for token_id in (self.img_context_token_id,
1379
- self.video_context_token_id)
1380
- if token_id is not None
1381
- ]
1382
- vision_embeddings = self.get_multimodal_embeddings(**kwargs)
1383
- inputs_embeds = self.get_input_embeddings(
1384
- input_ids,
1385
- vision_embeddings,
1386
- is_multimodal=isin_list(input_ids, context_token_ids),
1387
- )
1388
- input_ids = None
1389
-
1374
forward_kwargs = {
1375
"input_ids": input_ids,
1376
"positions": positions,
vllm/model_executor/models/kimi_vl.py
-16
@@ -433,22 +433,6 @@ class KimiVLForConditionalGeneration(nn.Module, SupportsMultiModal,
433
) -> IntermediateTensors:
434
if intermediate_tensors is not None:
435
inputs_embeds = None
436
- # NOTE: In v1, inputs_embeds is always generated at model runner from
437
- # `get_multimodal_embeddings` and `get_input_embeddings`, this
438
- # condition is only for v0 compatibility.
439
- elif inputs_embeds is None:
440
- image_input = self._parse_and_validate_image_input(**kwargs)
441
- if image_input is None:
442
- inputs_embeds = None
443
- else:
444
- image_embeds = self._process_image_input(image_input)
445
- inputs_embeds = self.get_input_embeddings(
446
- input_ids,
447
- image_embeds,
448
- is_multimodal=input_ids ==
449
- self.config.media_placeholder_token_id,
450
- )
451
- input_ids = None
436
437
hidden_states = self.language_model(
438
input_ids=input_ids,
vllm/model_executor/models/llava.py
-11
@@ -723,17 +723,6 @@ class LlavaForConditionalGeneration(nn.Module, SupportsMultiModal, SupportsPP):
723
if intermediate_tensors is not None:
724
inputs_embeds = None
725
726
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
727
- # condition is for v0 compatibility.
728
- elif inputs_embeds is None:
729
- vision_embeddings = self.get_multimodal_embeddings(**kwargs)
730
- inputs_embeds = self.get_input_embeddings(
731
- input_ids,
732
- vision_embeddings,
733
- is_multimodal=input_ids == self.config.image_token_index,
734
- )
735
- input_ids = None
736
-
726
hidden_states = self.language_model.model(input_ids,
727
positions,
728
intermediate_tensors,
vllm/model_executor/models/llava_next.py
-11
@@ -547,17 +547,6 @@ model_executor.models.llava_next.LlavaNextProcessingInfo.get_num_image_tokens].
547
if intermediate_tensors is not None:
548
inputs_embeds = None
549
550
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
551
- # condition is for v0 compatibility.
552
- elif inputs_embeds is None:
553
- vision_embeddings = self.get_multimodal_embeddings(**kwargs)
554
- inputs_embeds = self.get_input_embeddings(
555
- input_ids,
556
- vision_embeddings,
557
- is_multimodal=input_ids == self.config.image_token_index,
558
- )
559
- input_ids = None
560
-
550
hidden_states = self.language_model.model(input_ids,
551
positions,
552
intermediate_tensors,
vllm/model_executor/models/llava_next_video.py
-11
@@ -431,17 +431,6 @@ class LlavaNextVideoForConditionalGeneration(nn.Module, SupportsMultiModal,
431
if intermediate_tensors is not None:
432
inputs_embeds = None
433
434
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
435
- # condition is for v0 compatibility.
436
- elif inputs_embeds is None:
437
- vision_embeddings = self.get_multimodal_embeddings(**kwargs)
438
- inputs_embeds = self.get_input_embeddings(
439
- input_ids,
440
- vision_embeddings,
441
- is_multimodal=input_ids == self.config.video_token_index,
442
- )
443
- input_ids = None
444
-
434
hidden_states = self.language_model.model(input_ids,
435
positions,
436
intermediate_tensors,
vllm/model_executor/models/llava_onevision.py
+1
-45
@@ -30,8 +30,7 @@ from .llava_next import (BaseLlavaNextMultiModalProcessor, LlavaNextLikeConfig,
30
LlavaNextProcessingInfo)
31
from .siglip import SiglipVisionModel
32
from .utils import (AutoWeightsLoader, WeightsMapper, flatten_bn,
33
- init_vllm_registered_model, maybe_prefix,
34
- merge_multimodal_embeddings)
33
+ init_vllm_registered_model, maybe_prefix)
34
35
# For profile run
36
_MAX_FRAMES_PER_VIDEO = 16
@@ -850,33 +849,6 @@ class LlavaOnevisionForConditionalGeneration(nn.Module, SupportsMultiModal,
849
850
return multimodal_embeddings
851
853
- def get_input_embeddings_v0(
854
- self,
855
- input_ids: torch.Tensor,
856
- image_input: Optional[LlavaOnevisionImagePixelInputs] = None,
857
- video_input: Optional[LlavaOnevisionVideoPixelInputs] = None,
858
- ) -> torch.Tensor:
859
- inputs_embeds = self.get_input_embeddings(input_ids)
860
- if image_input is not None:
861
- image_embeds = self._process_image_input(image_input)
862
- inputs_embeds = merge_multimodal_embeddings(
863
- input_ids,
864
- inputs_embeds,
865
- image_embeds,
866
- placeholder_token_id=self.config.image_token_index,
867
- )
868
-
869
- if video_input is not None:
870
- video_embeds = self._process_video_pixels(video_input)
871
- inputs_embeds = merge_multimodal_embeddings(
872
- input_ids,
873
- inputs_embeds,
874
- video_embeds,
875
- placeholder_token_id=self.config.video_token_index,
876
- )
877
-
878
- return inputs_embeds
879
-
852
def forward(
853
self,
854
input_ids: torch.Tensor,
@@ -894,22 +866,6 @@ class LlavaOnevisionForConditionalGeneration(nn.Module, SupportsMultiModal,
866
if intermediate_tensors is not None:
867
inputs_embeds = None
868
897
- # NOTE: In v1, inputs_embeds is always generated at model runner from
898
- # `get_multimodal_embeddings` and `get_input_embeddings`, this
899
- # condition is only for v0 compatibility.
900
- elif inputs_embeds is None:
901
- image_input = self._parse_and_validate_image_input(**kwargs)
902
- video_input = self._parse_and_validate_video_input(**kwargs)
903
-
904
- if image_input is None and video_input is None:
905
- inputs_embeds = None
906
- else:
907
- inputs_embeds = self.get_input_embeddings_v0(
908
- input_ids,
909
- image_input=image_input,
910
- video_input=video_input)
911
- input_ids = None
912
-
869
hidden_states = self.language_model.model(input_ids,
870
positions,
871
intermediate_tensors,
vllm/model_executor/models/minicpmv.py
+1
-14
@@ -71,7 +71,7 @@ from vllm.utils.tensor_schema import TensorSchema, TensorShape
71
from .idefics2_vision_model import Idefics2VisionTransformer
72
from .interfaces import (MultiModalEmbeddings, SupportsLoRA,
73
SupportsMultiModal, SupportsPP)
74
-from .utils import AutoWeightsLoader, flatten_bn, isin_list, maybe_prefix
74
+from .utils import AutoWeightsLoader, flatten_bn, maybe_prefix
75
76
# For profile run
77
_MAX_FRAMES_PER_VIDEO = 16
@@ -1154,19 +1154,6 @@ class MiniCPMVBaseModel(nn.Module, SupportsMultiModal, SupportsPP):
1154
if intermediate_tensors is not None:
1155
inputs_embeds = None
1156
1157
- # NOTE: In v1, inputs_embeds is always generated at model runner from
1158
- # `get_multimodal_embeddings` and `get_input_embeddings`, this
1159
- # condition is only for v0 compatibility.
1160
- elif inputs_embeds is None:
1161
- vision_embeddings = self.get_multimodal_embeddings(**kwargs)
1162
-
1163
- inputs_embeds = self.get_input_embeddings(
1164
- input_ids,
1165
- vision_embeddings,
1166
- is_multimodal=isin_list(input_ids, list(self.mm_token_ids)),
1167
- )
1168
- input_ids = None
1169
-
1157
hidden_states = self.llm.model(
1158
input_ids=input_ids,
1159
positions=positions,
vllm/model_executor/models/mistral3.py
-11
@@ -571,17 +571,6 @@ class Mistral3ForConditionalGeneration(nn.Module, SupportsLoRA,
571
if intermediate_tensors is not None:
572
inputs_embeds = None
573
574
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
575
- # condition is for v0 compatibility.
576
- elif inputs_embeds is None:
577
- vision_embeddings = self.get_multimodal_embeddings(**kwargs)
578
- inputs_embeds = self.get_input_embeddings(
579
- input_ids,
580
- vision_embeddings,
581
- is_multimodal=input_ids == self.config.image_token_index,
582
- )
583
- input_ids = None
584
-
574
hidden_states = self.language_model.model(input_ids,
575
positions,
576
intermediate_tensors,
vllm/model_executor/models/mllama4.py
-11
@@ -823,17 +823,6 @@ class Llama4ForConditionalGeneration(nn.Module, SupportsMultiModal,
823
if intermediate_tensors is not None:
824
inputs_embeds = None
825
826
- # NOTE: In v1, inputs_embeds is always generated at model runner,
827
- # this condition is for v0 compatibility.
828
- elif inputs_embeds is None:
829
- vision_embeddings = self.get_multimodal_embeddings(**kwargs)
830
- inputs_embeds = self.get_input_embeddings(
831
- input_ids,
832
- vision_embeddings,
833
- is_multimodal=input_ids == self.config.image_token_index,
834
- )
835
- input_ids = None
836
-
826
return self.language_model(input_ids, positions, intermediate_tensors,
827
inputs_embeds)
828
vllm/model_executor/models/molmo.py
-11
@@ -1490,17 +1490,6 @@ class MolmoForCausalLM(nn.Module, SupportsMultiModal, SupportsPP, SupportsLoRA,
1490
if intermediate_tensors is not None:
1491
inputs_embeds = None
1492
1493
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
1494
- # condition is for v0 compatibility.
1495
- elif inputs_embeds is None:
1496
- vision_embeddings = self.get_multimodal_embeddings(**kwargs)
1497
- inputs_embeds = self.get_input_embeddings(
1498
- input_ids,
1499
- vision_embeddings,
1500
- is_multimodal=input_ids == self.img_patch_id,
1501
- )
1502
- input_ids = None
1503
-
1493
hidden_states = self.model(input_ids,
1494
positions,
1495
intermediate_tensors,
vllm/model_executor/models/nano_nemotron_vl.py
+1
-17
@@ -35,7 +35,7 @@ from vllm.model_executor.models.nemotron_h import NemotronHForCausalLM
35
from vllm.model_executor.models.radio import RadioModel
36
from vllm.model_executor.models.utils import (flatten_bn,
37
init_vllm_registered_model,
38
- isin_list, maybe_prefix)
38
+ maybe_prefix)
39
from vllm.multimodal import MULTIMODAL_REGISTRY
40
from vllm.multimodal.inputs import (MultiModalDataDict, MultiModalFieldConfig,
41
MultiModalKwargs, MultiModalKwargsItems,
@@ -1135,22 +1135,6 @@ class NemotronH_Nano_VL_V2(nn.Module, HasInnerState, IsHybrid,
1135
input_ids = None
1136
inputs_embeds = None
1137
1138
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
1139
- # condition is for v0 compatibility.
1140
- elif inputs_embeds is None:
1141
- context_token_ids = [
1142
- token_id for token_id in (self.img_context_token_id,
1143
- self.video_context_token_id)
1144
- if token_id is not None
1145
- ]
1146
- vision_embeddings = self.get_multimodal_embeddings(**kwargs)
1147
- inputs_embeds = self.get_input_embeddings(
1148
- input_ids,
1149
- vision_embeddings,
1150
- is_multimodal=isin_list(input_ids, context_token_ids),
1151
- )
1152
- input_ids = None
1153
-
1138
hidden_states = self.language_model(
1139
input_ids=input_ids,
1140
positions=positions,
vllm/model_executor/models/nemotron_vl.py
-11
@@ -608,17 +608,6 @@ class LlamaNemotronVLChatModel(nn.Module, SupportsMultiModal, SupportsPP,
608
input_ids = None
609
inputs_embeds = None
610
611
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
612
- # condition is for v0 compatibility.
613
- elif inputs_embeds is None:
614
- vision_embeddings = self.get_multimodal_embeddings(**kwargs)
615
- inputs_embeds = self.get_input_embeddings(
616
- input_ids,
617
- vision_embeddings,
618
- is_multimodal=input_ids == self.img_context_token_id,
619
- )
620
- input_ids = None
621
-
611
forward_kwargs = {
612
"input_ids": input_ids,
613
"positions": positions,
vllm/model_executor/models/ovis.py
-11
@@ -511,17 +511,6 @@ class Ovis(nn.Module, SupportsMultiModal, SupportsPP):
511
if intermediate_tensors is not None:
512
inputs_embeds = None
513
514
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
515
- # condition is for v0 compatibility.
516
- elif inputs_embeds is None:
517
- vision_embeddings = self.get_multimodal_embeddings(**kwargs)
518
- inputs_embeds = self.get_input_embeddings(
519
- input_ids,
520
- vision_embeddings,
521
- is_multimodal=input_ids == self.image_pad_token_id,
522
- )
523
- input_ids = None
524
-
514
# up until here we have an inputs_embeds 100% numerical identity
515
# between the OG HF Transformers implementation and ours
516
hidden_states = self.llm(
vllm/model_executor/models/ovis2_5.py
-12
@@ -596,18 +596,6 @@ class Ovis2_5(nn.Module, SupportsMultiModal, SupportsPP):
596
if intermediate_tensors is not None:
597
inputs_embeds = None
598
599
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
600
- # condition is for v0 compatibility.
601
- elif inputs_embeds is None:
602
- vision_embeddings = self.get_multimodal_embeddings(**kwargs)
603
-
604
- inputs_embeds = self.get_input_embeddings(
605
- input_ids,
606
- vision_embeddings,
607
- is_multimodal=input_ids == self.image_pad_token_id,
608
- )
609
- input_ids = None
610
-
599
# up until here we have a inputs_embeds 100% numerical identity
600
# between the OG HF Transformers implementation and ours
601
hidden_states = self.llm(
vllm/model_executor/models/paligemma.py
-11
@@ -370,17 +370,6 @@ class PaliGemmaForConditionalGeneration(nn.Module, SupportsMultiModal,
370
if intermediate_tensors is not None:
371
inputs_embeds = None
372
373
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
374
- # condition is for v0 compatibility.
375
- elif inputs_embeds is None:
376
- vision_embeddings = self.get_multimodal_embeddings(**kwargs)
377
- inputs_embeds = self.get_input_embeddings(
378
- input_ids,
379
- vision_embeddings,
380
- is_multimodal=input_ids == self.config.image_token_index,
381
- )
382
- input_ids = None
383
-
373
hidden_states = self.language_model.model(input_ids,
374
positions,
375
intermediate_tensors,
vllm/model_executor/models/phi3v.py
-11
@@ -679,17 +679,6 @@ class Phi3VForCausalLM(nn.Module, SupportsMultiModal, SupportsPP,
679
if intermediate_tensors is not None:
680
inputs_embeds = None
681
682
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
683
- # condition is for v0 compatibility
684
- elif inputs_embeds is None:
685
- vision_embeddings = self.get_multimodal_embeddings(**kwargs)
686
- inputs_embeds = self.get_input_embeddings(
687
- input_ids,
688
- vision_embeddings,
689
- is_multimodal=self.image_token_id,
690
- )
691
- input_ids = None
692
-
682
hidden_states = self.language_model.model(input_ids,
683
positions,
684
intermediate_tensors,
vllm/model_executor/models/phi4_multimodal.py
-16
@@ -1411,22 +1411,6 @@ class Phi4MultimodalForCausalLM(nn.Module, SupportsLoRA, SupportsMultiModal):
1411
if intermediate_tensors is not None:
1412
inputs_embeds = None
1413
1414
- # NOTE: In v1, inputs_embeds is always generated at model runner from
1415
- # `get_multimodal_embeddings` and `get_input_embeddings`, this
1416
- # condition is only for v0 compatibility.
1417
- elif inputs_embeds is None:
1418
- image_input = self._parse_and_validate_image_input(**kwargs)
1419
- audio_input = self._parse_and_validate_audio_input(**kwargs)
1420
-
1421
- if image_input is None and audio_input is None:
1422
- inputs_embeds = None
1423
- else:
1424
- inputs_embeds = self.get_input_embeddings_v0(
1425
- input_ids,
1426
- image_input=image_input,
1427
- audio_input=audio_input)
1428
- input_ids = None
1429
-
1414
hidden_states = self.language_model(
1415
input_ids,
1416
positions,
vllm/model_executor/models/phi4mm.py
+1
-47
@@ -35,8 +35,7 @@ from vllm.utils.tensor_schema import TensorSchema, TensorShape
35
from .idefics2_vision_model import Idefics2VisionTransformer
36
from .interfaces import MultiModalEmbeddings, SupportsLoRA, SupportsMultiModal
37
from .phi4mm_audio import AudioEmbedding
38
-from .utils import (AutoWeightsLoader, WeightsMapper, flatten_bn, maybe_prefix,
39
- merge_multimodal_embeddings)
38
+from .utils import AutoWeightsLoader, WeightsMapper, flatten_bn, maybe_prefix
39
40
# <|endoftext10|> (see vocab.json in hf model)
41
_IMAGE_PLACEHOLDER_TOKEN_ID = 200010
@@ -1174,35 +1173,6 @@ class Phi4MMForCausalLM(nn.Module, SupportsLoRA, SupportsMultiModal):
1173
1174
return multimodal_embeddings
1175
1177
- def get_input_embeddings_v0(
1178
- self,
1179
- input_ids: torch.Tensor,
1180
- image_input: Optional[Phi4MMImagePixelInputs] = None,
1181
- audio_input: Optional[Phi4MMAudioFeatureInputs] = None,
1182
- ) -> torch.Tensor:
1183
- audio_projection_mode = 'speech'
1184
- inputs_embeds = self.get_input_embeddings(input_ids)
1185
- if image_input is not None:
1186
- image_embeds = self._process_image_input(image_input)
1187
- inputs_embeds = merge_multimodal_embeddings(
1188
- input_ids,
1189
- inputs_embeds,
1190
- image_embeds,
1191
- placeholder_token_id=_IMAGE_PLACEHOLDER_TOKEN_ID,
1192
- )
1193
- audio_projection_mode = 'vision'
1194
-
1195
- if audio_input is not None:
1196
- audio_embeds = self._process_audio_input(
1197
- audio_input, audio_projection_mode=audio_projection_mode)
1198
- inputs_embeds = merge_multimodal_embeddings(
1199
- input_ids,
1200
- inputs_embeds,
1201
- audio_embeds,
1202
- placeholder_token_id=_AUDIO_PLACEHOLDER_TOKEN_ID,
1203
- )
1204
- return inputs_embeds
1205
-
1176
def forward(
1177
self,
1178
input_ids: torch.Tensor,
@@ -1214,22 +1184,6 @@ class Phi4MMForCausalLM(nn.Module, SupportsLoRA, SupportsMultiModal):
1184
if intermediate_tensors is not None:
1185
inputs_embeds = None
1186
1217
- # NOTE: In v1, inputs_embeds is always generated at model runner from
1218
- # `get_multimodal_embeddings` and `get_input_embeddings`, this
1219
- # condition is only for v0 compatibility.
1220
- elif inputs_embeds is None:
1221
- image_input = self._parse_and_validate_image_input(**kwargs)
1222
- audio_input = self._parse_and_validate_audio_input(**kwargs)
1223
-
1224
- if image_input is None and audio_input is None:
1225
- inputs_embeds = None
1226
- else:
1227
- inputs_embeds = self.get_input_embeddings_v0(
1228
- input_ids,
1229
- image_input=image_input,
1230
- audio_input=audio_input)
1231
- input_ids = None
1232
-
1187
hidden_states = self.model(
1188
input_ids,
1189
positions,
vllm/model_executor/models/pixtral.py
-11
@@ -444,17 +444,6 @@ class PixtralForConditionalGeneration(nn.Module, SupportsMultiModal,
444
if intermediate_tensors is not None:
445
inputs_embeds = None
446
447
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
448
- # condition is for v0 compatibility.
449
- elif inputs_embeds is None:
450
- vision_embeddings = self.get_multimodal_embeddings(**kwargs)
451
- inputs_embeds = self.get_input_embeddings(
452
- input_ids,
453
- vision_embeddings,
454
- is_multimodal=input_ids == self.vision_args.image_token_id,
455
- )
456
- input_ids = None
457
-
447
hidden_states = self.language_model.model(input_ids,
448
positions,
449
intermediate_tensors,
vllm/model_executor/models/qwen2_5_omni_thinker.py
+1
-30
@@ -69,8 +69,7 @@ from vllm.utils.tensor_schema import TensorSchema, TensorShape
69
from .interfaces import (MultiModalEmbeddings, SupportsLoRA,
70
SupportsMultiModal, SupportsPP)
71
from .utils import (AutoWeightsLoader, WeightsMapper,
72
- init_vllm_registered_model, maybe_prefix,
73
- merge_multimodal_embeddings)
72
+ init_vllm_registered_model, maybe_prefix)
73
74
try:
75
import flash_attn
@@ -908,26 +907,6 @@ class Qwen2_5OmniThinkerForConditionalGeneration(
907
multimodal_embeddings.append((video_embeds, "video"))
908
return multimodal_embeddings
909
911
- def get_input_embeddings_v0(
912
- self,
913
- input_ids: torch.Tensor,
914
- multimodal_embeddings: Optional[NestedTensors] = None,
915
- ) -> torch.Tensor:
916
- inputs_embeds = self.language_model.get_input_embeddings(input_ids)
917
- if multimodal_embeddings is None or len(multimodal_embeddings) == 0:
918
- return inputs_embeds
919
-
920
- for embeddings, modality in multimodal_embeddings:
921
- if modality == "audio":
922
- placeholder_token_id = self.config.audio_token_index
923
- if modality == "image":
924
- placeholder_token_id = self.config.image_token_index
925
- if modality == "video":
926
- placeholder_token_id = self.config.video_token_index
927
- inputs_embeds = merge_multimodal_embeddings(
928
- input_ids, inputs_embeds, embeddings, placeholder_token_id)
929
- return inputs_embeds
930
-
910
def forward(
911
self,
912
input_ids: torch.Tensor,
@@ -939,14 +918,6 @@ class Qwen2_5OmniThinkerForConditionalGeneration(
918
if intermediate_tensors is not None:
919
inputs_embeds = None
920
942
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
943
- # condition is for v0 compatibility.
944
- elif inputs_embeds is None:
945
- multimodal_embeddings = self.get_multimodal_embeddings_v0(**kwargs)
946
- inputs_embeds = self.get_input_embeddings_v0(
947
- input_ids, multimodal_embeddings)
948
- input_ids = None
949
-
921
hidden_states = self.language_model.model(input_ids,
922
positions,
923
intermediate_tensors,
vllm/model_executor/models/qwen2_5_vl.py
+1
-57
@@ -64,7 +64,6 @@ from vllm.multimodal.parse import MultiModalDataItems
64
from vllm.multimodal.processing import PromptReplacement, PromptUpdate
65
from vllm.platforms import _Backend
66
from vllm.sequence import IntermediateTensors
67
-from vllm.transformers_utils.config import uses_mrope
67
from vllm.utils import is_pin_memory_available
68
from vllm.utils.tensor_schema import TensorSchema, TensorShape
69
@@ -75,8 +74,7 @@ from .qwen2_vl import Qwen2VLDummyInputsBuilder as Qwen2_5_VLDummyInputsBuilder
74
from .qwen2_vl import (Qwen2VLMultiModalProcessor, Qwen2VLProcessingInfo,
75
apply_rotary_pos_emb_vision)
76
from .utils import (AutoWeightsLoader, WeightsMapper, cast_overflow_tensors,
78
- init_vllm_registered_model, maybe_prefix,
79
- merge_multimodal_embeddings)
77
+ init_vllm_registered_model, maybe_prefix)
78
from .vision import get_vit_attn_backend, run_dp_sharded_mrope_vision_model
79
80
logger = init_logger(__name__)
@@ -1365,40 +1363,6 @@ class Qwen2_5_VLForConditionalGeneration(nn.Module, SupportsMultiModal,
1363
multimodal_embeddings += video_embeddings
1364
return multimodal_embeddings
1365
1368
- def get_input_embeddings_v0(
1369
- self,
1370
- input_ids: torch.Tensor,
1371
- image_input: Optional[Qwen2_5_VLImageInputs] = None,
1372
- video_input: Optional[Qwen2_5_VLVideoInputs] = None,
1373
- ) -> torch.Tensor:
1374
- inputs_embeds = self.get_input_embeddings(input_ids)
1375
- if image_input is not None:
1376
- image_embeds = self._process_image_input(image_input)
1377
- if self.is_multimodal_pruning_enabled:
1378
- image_embeds = self._postprocess_image_embeds_evs(
1379
- image_embeds, image_input
1380
- )
1381
- inputs_embeds = merge_multimodal_embeddings(
1382
- input_ids,
1383
- inputs_embeds,
1384
- image_embeds,
1385
- placeholder_token_id=self.config.image_token_id,
1386
- )
1387
-
1388
- if video_input is not None:
1389
- video_embeds = self._process_video_input(video_input)
1390
- if self.is_multimodal_pruning_enabled:
1391
- video_embeds = self._postprocess_video_embeds_evs(
1392
- video_embeds, video_input
1393
- )
1394
- inputs_embeds = merge_multimodal_embeddings(
1395
- input_ids,
1396
- inputs_embeds,
1397
- video_embeds,
1398
- placeholder_token_id=self.config.video_token_id,
1399
- )
1400
- return inputs_embeds
1401
-
1366
def forward(
1367
self,
1368
input_ids: torch.Tensor,
@@ -1421,26 +1385,6 @@ class Qwen2_5_VLForConditionalGeneration(nn.Module, SupportsMultiModal,
1385
if intermediate_tensors is not None:
1386
inputs_embeds = None
1387
1424
- # NOTE: In v1, inputs_embeds is always generated at model runner from
1425
- # `get_multimodal_embeddings` and `get_input_embeddings`, this
1426
- # condition is only for v0 compatibility.
1427
- elif inputs_embeds is None:
1428
- image_input = self._parse_and_validate_image_input(**kwargs)
1429
- video_input = self._parse_and_validate_video_input(**kwargs)
1430
-
1431
- if image_input is None and video_input is None:
1432
- inputs_embeds = None
1433
- else:
1434
- if uses_mrope(self.config):
1435
- assert positions.ndim == 2 and positions.size(0) == 3, (
1436
- "multimodal section rotary embedding requires "
1437
- f"(3, seq_len) positions, but got {positions.size()}")
1438
- inputs_embeds = self.get_input_embeddings_v0(
1439
- input_ids,
1440
- image_input=image_input,
1441
- video_input=video_input)
1442
- input_ids = None
1443
-
1388
hidden_states = self.language_model.model(
1389
input_ids=input_ids,
1390
positions=positions,
vllm/model_executor/models/qwen2_audio.py
-11
@@ -449,17 +449,6 @@ class Qwen2AudioForConditionalGeneration(nn.Module, SupportsMultiModal,
449
if intermediate_tensors is not None:
450
inputs_embeds = None
451
452
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
453
- # condition is for v0 compatibility.
454
- elif inputs_embeds is None:
455
- multimodal_embeddings = self.get_multimodal_embeddings(**kwargs)
456
- inputs_embeds = self.get_input_embeddings(
457
- input_ids,
458
- multimodal_embeddings,
459
- is_multimodal=input_ids == self.config.audio_token_index,
460
- )
461
- input_ids = None
462
-
452
hidden_states = self.language_model.model(input_ids,
453
positions,
454
intermediate_tensors,
vllm/model_executor/models/qwen2_vl.py
+1
-49
@@ -65,15 +65,13 @@ from vllm.multimodal.processing import (BaseMultiModalProcessor,
65
from vllm.multimodal.profiling import BaseDummyInputsBuilder
66
from vllm.platforms import _Backend, current_platform
67
from vllm.sequence import IntermediateTensors
68
-from vllm.transformers_utils.config import uses_mrope
68
from vllm.transformers_utils.tokenizer import AnyTokenizer
69
from vllm.utils.tensor_schema import TensorSchema, TensorShape
70
71
from .interfaces import (MultiModalEmbeddings, SupportsLoRA, SupportsMRoPE,
72
SupportsMultiModal, SupportsPP)
73
from .utils import (AutoWeightsLoader, WeightsMapper,
75
- init_vllm_registered_model, maybe_prefix,
76
- merge_multimodal_embeddings)
74
+ init_vllm_registered_model, maybe_prefix)
75
from .vision import get_vit_attn_backend, run_dp_sharded_mrope_vision_model
76
77
logger = init_logger(__name__)
@@ -1464,32 +1462,6 @@ class Qwen2VLForConditionalGeneration(nn.Module, SupportsMultiModal,
1462
1463
return multimodal_embeddings
1464
1467
- def get_input_embeddings_v0(
1468
- self,
1469
- input_ids: torch.Tensor,
1470
- image_input: Optional[Qwen2VLImagePixelInputs] = None,
1471
- video_input: Optional[Qwen2VLVideoPixelInputs] = None,
1472
- ) -> torch.Tensor:
1473
- inputs_embeds = self.get_input_embeddings(input_ids)
1474
- if image_input is not None:
1475
- image_embeds = self._process_image_input(image_input)
1476
- inputs_embeds = merge_multimodal_embeddings(
1477
- input_ids,
1478
- inputs_embeds,
1479
- image_embeds,
1480
- placeholder_token_id=self.config.image_token_id,
1481
- )
1482
-
1483
- if video_input is not None:
1484
- video_embeds = self._process_video_input(video_input)
1485
- inputs_embeds = merge_multimodal_embeddings(
1486
- input_ids,
1487
- inputs_embeds,
1488
- video_embeds,
1489
- placeholder_token_id=self.config.video_token_id,
1490
- )
1491
- return inputs_embeds
1492
-
1465
def forward(
1466
self,
1467
input_ids: torch.Tensor,
@@ -1515,26 +1487,6 @@ class Qwen2VLForConditionalGeneration(nn.Module, SupportsMultiModal,
1487
if intermediate_tensors is not None:
1488
inputs_embeds = None
1489
1518
- # NOTE: In v1, inputs_embeds is always generated at model runner from
1519
- # `get_multimodal_embeddings` and `get_input_embeddings`, this
1520
- # condition is only for v0 compatibility.
1521
- elif inputs_embeds is None:
1522
- image_input = self._parse_and_validate_image_input(**kwargs)
1523
- video_input = self._parse_and_validate_video_input(**kwargs)
1524
-
1525
- if image_input is None and video_input is None:
1526
- inputs_embeds = None
1527
- else:
1528
- if uses_mrope(self.config):
1529
- assert positions.ndim == 2 and positions.size(0) == 3, (
1530
- "multimodal section rotary embedding requires "
1531
- f"(3, seq_len) positions, but got {positions.size()}")
1532
- inputs_embeds = self.get_input_embeddings_v0(
1533
- input_ids,
1534
- image_input=image_input,
1535
- video_input=video_input)
1536
- input_ids = None
1537
-
1490
hidden_states = self.language_model.model(
1491
input_ids=input_ids,
1492
positions=positions,
vllm/model_executor/models/qwen3_vl.py
+1
-92
@@ -68,7 +68,6 @@ from vllm.multimodal.processing import (BaseMultiModalProcessor,
68
from vllm.multimodal.profiling import BaseDummyInputsBuilder
69
from vllm.platforms import _Backend
70
from vllm.sequence import IntermediateTensors
71
-from vllm.transformers_utils.config import uses_mrope
71
from vllm.utils import is_list_of
72
73
from .interfaces import (MultiModalEmbeddings, SupportsLoRA,
@@ -82,8 +81,7 @@ from .qwen2_5_vl import (Qwen2_5_VisionAttention,
81
from .qwen2_vl import Qwen2VLProcessingInfo
82
from .qwen3 import Qwen3ForCausalLM, Qwen3Model
83
from .utils import (AutoWeightsLoader, PPMissingLayer, WeightsMapper,
85
- _merge_multimodal_embeddings, maybe_prefix,
86
- merge_multimodal_embeddings)
84
+ _merge_multimodal_embeddings, maybe_prefix)
85
from .vision import get_vit_attn_backend, run_dp_sharded_mrope_vision_model
86
87
logger = init_logger(__name__)
@@ -1464,75 +1462,6 @@ class Qwen3VLForConditionalGeneration(nn.Module, SupportsMultiModal,
1462
1463
return inputs_embeds
1464
1467
- def get_input_embeddings_v0(
1468
- self,
1469
- input_ids: torch.Tensor,
1470
- image_input: Optional[Qwen2_5_VLImageInputs] = None,
1471
- video_input: Optional[Qwen2_5_VLVideoInputs] = None,
1472
- ) -> torch.Tensor:
1473
- inputs_embeds = self.get_input_embeddings(input_ids)
1474
-
1475
- if self.use_deepstack:
1476
- visual_dim = inputs_embeds.shape[-1]
1477
- deepstack_input_embeds = None
1478
- if image_input is not None or video_input is not None:
1479
- deepstack_input_embeds = torch.zeros_like(
1480
- inputs_embeds).unsqueeze(1).repeat(
1481
- 1, self.deepstack_num_level, 1).flatten(1)
1482
-
1483
- if image_input is not None:
1484
- image_embeds = self._process_image_input(image_input)
1485
- if self.use_deepstack:
1486
- image_embeds = torch.cat(image_embeds)
1487
-
1488
- image_embeds, image_embeds_multiscale = image_embeds.split(
1489
- [visual_dim, visual_dim * self.deepstack_num_level],
1490
- dim=-1)
1491
-
1492
- deepstack_input_embeds = merge_multimodal_embeddings(
1493
- input_ids,
1494
- deepstack_input_embeds,
1495
- image_embeds_multiscale,
1496
- placeholder_token_id=self.config.image_token_id,
1497
- )
1498
-
1499
- inputs_embeds = merge_multimodal_embeddings(
1500
- input_ids,
1501
- inputs_embeds,
1502
- image_embeds,
1503
- placeholder_token_id=self.config.image_token_id,
1504
- )
1505
-
1506
- if video_input is not None:
1507
- video_embeds = self._process_video_input(video_input)
1508
- if self.use_deepstack:
1509
- video_embeds = torch.cat(video_embeds)
1510
-
1511
- video_embeds, video_embeds_multiscale = video_embeds.split(
1512
- [visual_dim, visual_dim * self.deepstack_num_level],
1513
- dim=-1)
1514
-
1515
- deepstack_input_embeds = merge_multimodal_embeddings(
1516
- input_ids,
1517
- deepstack_input_embeds,
1518
- video_embeds_multiscale,
1519
- placeholder_token_id=self.config.video_token_id,
1520
- )
1521
-
1522
- inputs_embeds = merge_multimodal_embeddings(
1523
- input_ids,
1524
- inputs_embeds,
1525
- video_embeds,
1526
- placeholder_token_id=self.config.video_token_id,
1527
- )
1528
-
1529
- if self.use_deepstack and deepstack_input_embeds is not None:
1530
- deepstack_input_embeds = deepstack_input_embeds.view(
1531
- inputs_embeds.shape[0], self.deepstack_num_level,
1532
- visual_dim).permute(1, 0, 2).contiguous()
1533
- self._set_deepstack_input_embeds(deepstack_input_embeds)
1534
- return inputs_embeds
1535
-
1465
def forward(
1466
self,
1467
input_ids: torch.Tensor,
@@ -1568,26 +1497,6 @@ class Qwen3VLForConditionalGeneration(nn.Module, SupportsMultiModal,
1497
if intermediate_tensors is not None:
1498
inputs_embeds = None
1499
1571
- # NOTE: In v1, inputs_embeds is always generated at model runner from
1572
- # `get_multimodal_embeddings` and `get_input_embeddings`, this
1573
- # condition is only for v0 compatibility.
1574
- elif inputs_embeds is None:
1575
- image_input = self._parse_and_validate_image_input(**kwargs)
1576
- video_input = self._parse_and_validate_video_input(**kwargs)
1577
-
1578
- if image_input is None and video_input is None:
1579
- inputs_embeds = None
1580
- else:
1581
- if uses_mrope(self.config):
1582
- assert positions.ndim == 2 and positions.size(0) == 3, (
1583
- "multimodal section rotary embedding requires "
1584
- f"(3, seq_len) positions, but got {positions.size()}")
1585
- inputs_embeds = self.get_input_embeddings_v0(
1586
- input_ids,
1587
- image_input=image_input,
1588
- video_input=video_input)
1589
- input_ids = None
1590
-
1500
if self.use_deepstack and inputs_embeds is not None and get_pp_group(
1501
).is_first_rank:
1502
deepstack_input_embeds = self._get_deepstack_input_embeds(
vllm/model_executor/models/qwen_vl.py
-12
@@ -767,18 +767,6 @@ class QwenVLForConditionalGeneration(QWenBaseModel, SupportsPP, SupportsLoRA,
767
if intermediate_tensors is not None:
768
inputs_embeds = None
769
770
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
771
- # condition is for v0 compatibility.
772
- elif inputs_embeds is None:
773
- vision_embeddings = self.get_multimodal_embeddings(**kwargs)
774
- inputs_embeds = self.get_input_embeddings(
775
- input_ids,
776
- vision_embeddings,
777
- is_multimodal=input_ids ==
778
- self.transformer.visual.image_pad_id,
779
- )
780
- input_ids = None
781
-
770
hidden_states = self.transformer(input_ids, positions,
771
intermediate_tensors, inputs_embeds)
772
return hidden_states
vllm/model_executor/models/skyworkr1v.py
-11
@@ -874,17 +874,6 @@ class SkyworkR1VChatModel(nn.Module, SupportsMultiModal, SupportsPP):
874
input_ids = None
875
inputs_embeds = None
876
877
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
878
- # condition is for v0 compatibility.
879
- elif inputs_embeds is None:
880
- vision_embeddings = self.get_multimodal_embeddings(**kwargs)
881
- inputs_embeds = self.get_input_embeddings(
882
- input_ids,
883
- vision_embeddings,
884
- is_multimodal=input_ids == self.img_context_token_id,
885
- )
886
- input_ids = None
887
-
877
forward_kwargs = {
878
"input_ids": input_ids,
879
"positions": positions,
vllm/model_executor/models/transformers.py
-13
@@ -881,19 +881,6 @@ class TransformersForMultimodalLM(TransformersForCausalLM, SupportsMultiModal):
881
inputs_embeds: Optional[torch.Tensor] = None,
882
**kwargs: object,
883
) -> Union[torch.Tensor, IntermediateTensors]:
884
- # NOTE: In v1, inputs_embeds is always generated at model runner from
885
- # `get_multimodal_embeddings` and `get_input_embeddings`, this
886
- # condition is only for v0 compatibility.
887
- if inputs_embeds is None:
888
- multimodal_embeds = self.get_multimodal_embeddings(**kwargs)
889
- if multimodal_embeds is not None:
890
- inputs_embeds = self.get_input_embeddings(
891
- input_ids,
892
- multimodal_embeds,
893
- is_multimodal=input_ids == self.config.image_token_id,
894
- )
895
- input_ids = None
896
-
884
model_output = super().forward(input_ids, positions,
885
intermediate_tensors, inputs_embeds)
886
return model_output
vllm/model_executor/models/ultravox.py
-12
@@ -597,18 +597,6 @@ class UltravoxModel(nn.Module, SupportsMultiModal, SupportsPP, SupportsLoRA):
597
if intermediate_tensors is not None:
598
inputs_embeds = None
599
600
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
601
- # condition is for v0 compatibility.
602
- elif inputs_embeds is None:
603
- multimodal_embeddings = self.get_multimodal_embeddings(**kwargs)
604
-
605
- inputs_embeds = self.get_input_embeddings(
606
- input_ids,
607
- multimodal_embeddings,
608
- is_multimodal=input_ids == self.config.audio_token_index,
609
- )
610
- input_ids = None
611
-
600
language_model = self.language_model
601
if hasattr(language_model, "language_model"):
602
language_model = language_model.language_model
vllm/model_executor/models/voxtral.py
-13
@@ -371,19 +371,6 @@ class VoxtralForConditionalGeneration(nn.Module, SupportsMultiModal,
371
if intermediate_tensors is not None:
372
inputs_embeds = None
373
374
- # NOTE: In v1, inputs_embeds is always generated at model runner, this
375
- # condition is for v0 compatibility.
376
- elif inputs_embeds is None:
377
- audio_encoder = self.tokenizer.instruct.audio_encoder
378
- audio_tok_id = audio_encoder.audio_token
379
- audio_embeddings = self.get_multimodal_embeddings(**kwargs)
380
- inputs_embeds = self.get_input_embeddings(
381
- input_ids,
382
- audio_embeddings,
383
- is_multimodal=input_ids == audio_tok_id,
384
- )
385
- input_ids = None
386
-
374
hidden_states = self.language_model.model(input_ids,
375
positions,
376
intermediate_tensors,