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 9, 10:00 UTC
[Chore] Remove `use_data_parallel` kwargs from ViT implementation (#33310)
Signed-off-by: Isotr0py <mozf@mail2.sysu.edu.cn>
Isotr0py committed
Jan 29, 2026 at 18:20 UTC
5400014d55b4cb388fdf7dbaab6c90d2161e2764
9 files changed
+36
-89
vllm/model_executor/models/idefics2_vision_model.py
+5
-11
@@ -39,7 +39,7 @@ from vllm.model_executor.layers.linear import (
39
from vllm.model_executor.layers.quantization import QuantizationConfig
40
from vllm.model_executor.model_loader.weight_utils import default_weight_loader
41
42
-from .vision import run_dp_sharded_vision_model
42
+from .vision import is_vit_use_data_parallel, run_dp_sharded_vision_model
43
44
45
class Idefics2VisionEmbeddings(nn.Module):
@@ -126,9 +126,9 @@ class Idefics2VisionAttention(nn.Module):
126
config: Idefics2VisionConfig,
127
quant_config: QuantizationConfig | None = None,
128
prefix: str = "",
129
- use_data_parallel: bool = False,
129
) -> None:
130
super().__init__()
131
+ use_data_parallel = is_vit_use_data_parallel()
132
self.config = config
133
self.embed_dim = config.hidden_size
134
self.num_heads = config.num_attention_heads
@@ -187,11 +187,12 @@ class Idefics2VisionMLP(nn.Module):
187
config: Idefics2VisionConfig,
188
quant_config: QuantizationConfig | None = None,
189
prefix: str = "",
190
- use_data_parallel: bool = False,
190
) -> None:
191
super().__init__()
192
self.config = config
193
self.activation_fn = get_act_fn(config.hidden_act)
194
+
195
+ use_data_parallel = is_vit_use_data_parallel()
196
self.fc1 = ColumnParallelLinear(
197
config.hidden_size,
198
config.intermediate_size,
@@ -222,7 +223,6 @@ class Idefics2EncoderLayer(nn.Module):
223
config: Idefics2Config,
224
quant_config: QuantizationConfig | None = None,
225
prefix: str = "",
225
- use_data_parallel: bool = False,
226
) -> None:
227
super().__init__()
228
self.embed_dim = config.hidden_size
@@ -230,14 +230,12 @@ class Idefics2EncoderLayer(nn.Module):
230
config,
231
quant_config=quant_config,
232
prefix=f"{prefix}.self_attn",
233
- use_data_parallel=use_data_parallel,
233
)
234
self.layer_norm1 = nn.LayerNorm(self.embed_dim, eps=config.layer_norm_eps)
235
self.mlp = Idefics2VisionMLP(
236
config,
237
quant_config=quant_config,
238
prefix=f"{prefix}.mlp",
240
- use_data_parallel=use_data_parallel,
239
)
240
self.layer_norm2 = nn.LayerNorm(self.embed_dim, eps=config.layer_norm_eps)
241
@@ -279,7 +277,6 @@ class Idefics2Encoder(nn.Module):
277
*,
278
num_hidden_layers_override: int | None = None,
279
prefix: str = "",
282
- use_data_parallel: bool = False,
280
) -> None:
281
super().__init__()
282
@@ -296,7 +293,6 @@ class Idefics2Encoder(nn.Module):
293
config,
294
quant_config=quant_config,
295
prefix=f"{prefix}.layers.{layer_idx}",
299
- use_data_parallel=use_data_parallel,
296
)
297
for layer_idx in range(num_hidden_layers)
298
]
@@ -331,20 +327,18 @@ class Idefics2VisionTransformer(nn.Module):
327
num_hidden_layers_override: int | None = None,
328
require_post_norm: bool = True,
329
prefix: str = "",
334
- use_data_parallel: bool = False,
330
) -> None:
331
super().__init__()
332
333
embed_dim = config.hidden_size
334
self.config = config
340
- self.use_data_parallel = use_data_parallel
335
+ self.use_data_parallel = is_vit_use_data_parallel()
336
self.embeddings = Idefics2VisionEmbeddings(config)
337
self.encoder = Idefics2Encoder(
338
config,
339
quant_config=quant_config,
340
num_hidden_layers_override=num_hidden_layers_override,
341
prefix=f"{prefix}.encoder",
347
- use_data_parallel=use_data_parallel,
342
)
343
344
num_hidden_layers = config.num_hidden_layers
vllm/model_executor/models/intern_vit.py
+10
-25
@@ -34,7 +34,7 @@ from vllm.model_executor.layers.linear import (
34
from vllm.model_executor.layers.quantization import QuantizationConfig
35
from vllm.model_executor.model_loader.weight_utils import default_weight_loader
36
37
-from .vision import run_dp_sharded_vision_model
37
+from .vision import is_vit_use_data_parallel, run_dp_sharded_vision_model
38
39
NORM2FN = {
40
"rms_norm": RMSNorm,
@@ -148,7 +148,6 @@ class InternParallelAttention(nn.Module):
148
*,
149
num_dummy_heads: int = 0,
150
prefix: str = "",
151
- use_data_parallel: bool = False,
151
) -> None:
152
super().__init__()
153
@@ -163,9 +162,14 @@ class InternParallelAttention(nn.Module):
162
f" {self.num_heads})."
163
)
164
166
- self.tp_size = (
167
- 1 if use_data_parallel else get_tensor_model_parallel_world_size()
165
+ use_data_parallel = is_vit_use_data_parallel()
166
+ # if the number of heads is not divisible by tp_size,
167
+ # we also disable Attention's TP
168
+ tp_size = 1 if use_data_parallel else get_tensor_model_parallel_world_size()
169
+ use_data_parallel = (
170
+ use_data_parallel or (self.num_heads + num_dummy_heads) % tp_size != 0
171
)
172
+ self.tp_size = 1 if use_data_parallel else tp_size
173
self.tp_rank = 0 if use_data_parallel else get_tensor_model_parallel_rank()
174
175
# Additional dummy heads are used to enable TP for common GPU counts.
@@ -242,12 +246,12 @@ class InternMLP(nn.Module):
246
config: PretrainedConfig,
247
quant_config: QuantizationConfig | None = None,
248
prefix: str = "",
245
- use_data_parallel: bool = False,
249
) -> None:
250
super().__init__()
251
252
self.config = config
253
self.activation_fn = get_act_fn(config.hidden_act)
254
+ use_data_parallel = is_vit_use_data_parallel()
255
self.fc1 = ColumnParallelLinear(
256
config.hidden_size,
257
config.intermediate_size,
@@ -281,11 +285,9 @@ class InternVisionEncoderLayer(nn.Module):
285
*,
286
num_dummy_heads: int = 0,
287
prefix: str = "",
284
- use_data_parallel: bool = False,
288
attn_cls: type[InternParallelAttention] = InternParallelAttention,
289
) -> None:
290
super().__init__()
288
-
291
self.embed_dim = config.hidden_size
292
self.intermediate_size = config.intermediate_size
293
self.norm_type = config.norm_type
@@ -296,14 +298,12 @@ class InternVisionEncoderLayer(nn.Module):
298
quant_config,
299
num_dummy_heads=num_dummy_heads,
300
prefix=f"{prefix}.attn",
299
- use_data_parallel=use_data_parallel,
301
)
302
303
self.mlp = InternMLP(
304
config,
305
quant_config=quant_config,
306
prefix=f"{prefix}.mlp",
306
- use_data_parallel=use_data_parallel,
307
)
308
self.norm1 = NORM2FN[self.norm_type](self.embed_dim, eps=config.layer_norm_eps)
309
self.norm2 = NORM2FN[self.norm_type](self.embed_dim, eps=config.layer_norm_eps)
@@ -318,23 +318,12 @@ class InternVisionEncoderLayer(nn.Module):
318
*,
319
num_dummy_heads: int,
320
prefix: str = "",
321
- use_data_parallel: bool = False,
321
):
323
- # fallback to sdpa attention if tp unavailable
324
- tp_size = 1 if use_data_parallel else get_tensor_model_parallel_world_size()
325
- num_heads = config.num_attention_heads
326
-
327
- # if the number of heads is not divisible by tp_size,
328
- # we also disable Attention's TP
329
- use_data_parallel = (
330
- use_data_parallel or (num_heads + num_dummy_heads) % tp_size != 0
331
- )
322
return self.attn_cls(
323
config,
324
quant_config=quant_config,
325
num_dummy_heads=num_dummy_heads,
326
prefix=prefix,
337
- use_data_parallel=use_data_parallel,
327
)
328
329
def forward(
@@ -357,7 +346,6 @@ class InternVisionEncoder(nn.Module):
346
num_hidden_layers_override: int | None = None,
347
num_dummy_heads: int = 0,
348
prefix: str = "",
360
- use_data_parallel: bool = False,
349
layer_cls: type[InternVisionEncoderLayer] = InternVisionEncoderLayer,
350
):
351
super().__init__()
@@ -377,7 +365,6 @@ class InternVisionEncoder(nn.Module):
365
quant_config,
366
num_dummy_heads=num_dummy_heads,
367
prefix=f"{prefix}.layers.{layer_idx}",
380
- use_data_parallel=use_data_parallel,
368
)
369
for layer_idx in range(num_hidden_layers)
370
]
@@ -404,12 +391,11 @@ class InternVisionModel(nn.Module):
391
num_hidden_layers_override: int | None = None,
392
num_dummy_heads: int = 0,
393
prefix: str = "",
407
- use_data_parallel: bool = False,
394
) -> None:
395
super().__init__()
396
397
self.config = config
412
- self.use_data_parallel = use_data_parallel
398
+ self.use_data_parallel = is_vit_use_data_parallel()
399
400
self.embeddings = InternVisionEmbeddings(config)
401
self.encoder = InternVisionEncoder(
@@ -418,7 +404,6 @@ class InternVisionModel(nn.Module):
404
num_hidden_layers_override=num_hidden_layers_override,
405
num_dummy_heads=num_dummy_heads,
406
prefix=f"{prefix}.encoder",
421
- use_data_parallel=use_data_parallel,
407
)
408
409
def get_input_embeddings(self):
vllm/model_executor/models/internvl.py
-1
@@ -1153,7 +1153,6 @@ class InternVLChatModel(nn.Module, SupportsMultiModal, SupportsPP, SupportsLoRA)
1153
quant_config=quant_config,
1154
num_hidden_layers_override=num_hidden_layers,
1155
prefix=prefix,
1156
- use_data_parallel=self.use_data_parallel,
1156
)
1157
else:
1158
return InternVisionPatchModel(config.vision_config)
vllm/model_executor/models/kimi_vl.py
+5
-4
@@ -81,7 +81,7 @@ from vllm.transformers_utils.configs import KimiVLConfig, MoonViTConfig
81
from vllm.utils.tensor_schema import TensorSchema, TensorShape
82
83
from .utils import AutoWeightsLoader, init_vllm_registered_model, maybe_prefix
84
-from .vision import run_dp_sharded_mrope_vision_model
84
+from .vision import is_vit_use_data_parallel, run_dp_sharded_mrope_vision_model
85
86
87
# For dummy input only
@@ -93,10 +93,12 @@ class MaxImageTokenMeta:
93
94
class KimiVLMultiModalProjector(nn.Module):
95
def __init__(
96
- self, config: KimiVLConfig, use_data_parallel: bool = False, prefix: str = ""
96
+ self,
97
+ config: KimiVLConfig,
98
+ prefix: str = "",
99
):
100
super().__init__()
99
- self.use_data_parallel = use_data_parallel
101
+ self.use_data_parallel = is_vit_use_data_parallel()
102
103
self.hidden_size = (
104
config.vision_config.hidden_size
@@ -321,7 +323,6 @@ class KimiVLForConditionalGeneration(nn.Module, SupportsMultiModal, SupportsPP):
323
)
324
self.multi_modal_projector = KimiVLMultiModalProjector(
325
config=config,
324
- use_data_parallel=self.use_data_parallel,
326
prefix=maybe_prefix(prefix, "multi_modal_projector"),
327
)
328
vllm/model_executor/models/lfm2_vl.py
+5
-3
@@ -57,6 +57,7 @@ from .utils import (
57
init_vllm_registered_model,
58
maybe_prefix,
59
)
60
+from .vision import is_vit_use_data_parallel
61
62
63
class Lfm2VLImagePixelInputs(TensorSchema):
@@ -426,10 +427,12 @@ class Lfm2VLMultiModalProcessor(BaseMultiModalProcessor[Lfm2VLProcessingInfo]):
427
428
class Lfm2VLMultiModalProjector(nn.Module):
429
def __init__(
429
- self, config: Lfm2VlConfig, use_data_parallel: bool = False, prefix: str = ""
430
+ self,
431
+ config: Lfm2VlConfig,
432
+ prefix: str = "",
433
):
434
super().__init__()
432
- self.use_data_parallel = use_data_parallel
435
+ self.use_data_parallel = is_vit_use_data_parallel()
436
437
in_channels = config.vision_config.hidden_size * (config.downsample_factor**2)
438
self.factor = config.downsample_factor
@@ -607,7 +610,6 @@ class Lfm2VLForConditionalGeneration(
610
611
self.multi_modal_projector = Lfm2VLMultiModalProjector(
612
config=config,
610
- use_data_parallel=self.use_data_parallel,
613
prefix=maybe_prefix(prefix, "multi_modal_projector"),
614
)
615
vllm/model_executor/models/minicpmv.py
-4
@@ -1335,7 +1335,6 @@ class MiniCPMV2_5(MiniCPMVBaseModel, SupportsLoRA):
1335
config.vision_config,
1336
quant_config=quant_config,
1337
prefix=prefix,
1338
- use_data_parallel=self.use_data_parallel,
1338
)
1339
if self.config.drop_vision_last_layer:
1340
model.encoder.layers = model.encoder.layers[:-1]
@@ -1428,7 +1427,6 @@ class MiniCPMV2_6(MiniCPMVBaseModel, SupportsLoRA):
1427
config.vision_config,
1428
quant_config=quant_config,
1429
prefix=prefix,
1431
- use_data_parallel=self.use_data_parallel,
1430
)
1431
if self.config.drop_vision_last_layer:
1432
model.encoder.layers = model.encoder.layers[:-1]
@@ -1526,7 +1524,6 @@ class MiniCPMV4_0(MiniCPMVBaseModel, SupportsLoRA):
1524
config.vision_config,
1525
quant_config=quant_config,
1526
prefix=prefix,
1529
- use_data_parallel=self.use_data_parallel,
1527
)
1528
if self.config.drop_vision_last_layer:
1529
model.encoder.layers = model.encoder.layers[:-1]
@@ -1624,7 +1621,6 @@ class MiniCPMV4_5(MiniCPMVBaseModel, SupportsLoRA):
1621
config.vision_config,
1622
quant_config=quant_config,
1623
prefix=prefix,
1627
- use_data_parallel=self.use_data_parallel,
1624
)
1625
if self.config.drop_vision_last_layer:
1626
model.encoder.layers = model.encoder.layers[:-1]
vllm/model_executor/models/mllama4.py
+4
-16
@@ -79,7 +79,7 @@ from .interfaces import (
79
)
80
from .llama4 import Llama4ForCausalLM
81
from .utils import AutoWeightsLoader, StageMissingLayer, maybe_prefix
82
-from .vision import run_dp_sharded_vision_model
82
+from .vision import is_vit_use_data_parallel, run_dp_sharded_vision_model
83
84
85
class Llama4ImagePatchInputs(TensorSchema):
@@ -124,9 +124,9 @@ class Llama4VisionMLP(nn.Module):
124
output_activation: bool,
125
quant_config: QuantizationConfig | None = None,
126
prefix: str = "",
127
- use_data_parallel: bool = False,
127
):
128
super().__init__()
129
+ use_data_parallel = is_vit_use_data_parallel()
130
self.fc1 = ColumnParallelLinear(
131
input_size=input_size,
132
output_size=intermediate_size,
@@ -208,7 +208,6 @@ class Llama4VisionPixelShuffleMLP(nn.Module):
208
config,
209
quant_config: QuantizationConfig | None = None,
210
prefix: str = "",
211
- use_data_parallel: bool = False,
211
):
212
super().__init__()
213
self.pixel_shuffle_ratio = config.pixel_shuffle_ratio
@@ -224,7 +223,6 @@ class Llama4VisionPixelShuffleMLP(nn.Module):
223
output_activation=True,
224
quant_config=quant_config,
225
prefix=f"{prefix}.mlp",
227
- use_data_parallel=use_data_parallel,
226
)
227
228
def forward(self, encoded_patches: torch.Tensor) -> torch.Tensor:
@@ -238,10 +236,10 @@ class Llama4VisionAttention(nn.Module):
236
config: Llama4VisionConfig,
237
quant_config: QuantizationConfig | None,
238
prefix: str = "",
241
- use_data_parallel: bool = False,
239
):
240
super().__init__()
241
self.config = config
242
+ use_data_parallel = is_vit_use_data_parallel()
243
self.tp_size = (
244
1 if use_data_parallel else get_tensor_model_parallel_world_size()
245
)
@@ -336,7 +334,6 @@ class Llama4VisionEncoderLayer(nn.Module):
334
config: Llama4VisionConfig,
335
quant_config: QuantizationConfig | None,
336
prefix: str = "",
339
- use_data_parallel: bool = False,
337
):
338
super().__init__()
339
self.hidden_size = config.hidden_size
@@ -347,7 +344,6 @@ class Llama4VisionEncoderLayer(nn.Module):
344
config,
345
quant_config=quant_config,
346
prefix=f"{prefix}.self_attn",
350
- use_data_parallel=use_data_parallel,
347
)
348
self.mlp = Llama4VisionMLP(
349
input_size=config.hidden_size,
@@ -357,7 +353,6 @@ class Llama4VisionEncoderLayer(nn.Module):
353
output_activation=False,
354
quant_config=quant_config,
355
prefix=f"{prefix}.mlp",
360
- use_data_parallel=use_data_parallel,
356
)
357
358
self.input_layernorm = nn.LayerNorm(config.hidden_size)
@@ -389,7 +384,6 @@ class Llama4VisionEncoder(nn.Module):
384
config: Llama4VisionConfig,
385
quant_config: QuantizationConfig | None,
386
prefix: str = "",
392
- use_data_parallel: bool = False,
387
):
388
super().__init__()
389
self.config = config
@@ -399,7 +393,6 @@ class Llama4VisionEncoder(nn.Module):
393
config,
394
quant_config=quant_config,
395
prefix=f"{prefix}.layers.{layer_idx}",
402
- use_data_parallel=use_data_parallel,
396
)
397
for layer_idx in range(config.num_hidden_layers)
398
]
@@ -432,13 +425,13 @@ class Llama4UnfoldConvolution(nn.Module):
425
config: Llama4VisionConfig,
426
quant_config: QuantizationConfig | None = None,
427
prefix: str = "",
435
- use_data_parallel: bool = False,
428
):
429
super().__init__()
430
kernel_size = config.patch_size
431
if isinstance(kernel_size, int):
432
kernel_size = (kernel_size, kernel_size)
433
self.unfold = torch.nn.Unfold(kernel_size=kernel_size, stride=config.patch_size)
434
+ use_data_parallel = is_vit_use_data_parallel()
435
self.linear = ColumnParallelLinear(
436
input_size=config.num_channels * kernel_size[0] * kernel_size[1],
437
output_size=config.hidden_size,
@@ -465,7 +458,6 @@ class Llama4VisionModel(nn.Module):
458
config: Llama4VisionConfig,
459
quant_config: QuantizationConfig | None = None,
460
prefix: str = "",
468
- use_data_parallel: bool = False,
461
):
462
super().__init__()
463
self.config = config
@@ -481,7 +473,6 @@ class Llama4VisionModel(nn.Module):
473
config,
474
quant_config=quant_config,
475
prefix=f"{prefix}.patch_embedding",
484
- use_data_parallel=use_data_parallel,
476
)
477
478
self.class_embedding = nn.Parameter(self.scale * torch.randn(self.hidden_size))
@@ -498,14 +489,12 @@ class Llama4VisionModel(nn.Module):
489
config,
490
quant_config=quant_config,
491
prefix=f"{prefix}.model",
501
- use_data_parallel=use_data_parallel,
492
)
493
494
self.vision_adapter = Llama4VisionPixelShuffleMLP(
495
config,
496
quant_config,
497
prefix=f"{prefix}.vision_adapter",
508
- use_data_parallel=use_data_parallel,
498
)
499
500
def forward(
@@ -780,7 +769,6 @@ class Llama4ForConditionalGeneration(
769
config=config.vision_config,
770
quant_config=None,
771
prefix=maybe_prefix(prefix, "vision_model"),
783
- use_data_parallel=self.use_data_parallel,
772
)
773
774
self.multi_modal_projector = Llama4MultiModalProjector(
vllm/model_executor/models/step3_vl.py
+4
-14
@@ -54,7 +54,7 @@ from .utils import (
54
init_vllm_registered_model,
55
maybe_prefix,
56
)
57
-from .vision import run_dp_sharded_vision_model
57
+from .vision import is_vit_use_data_parallel, run_dp_sharded_vision_model
58
59
60
class Step3VLImagePixelInputs(TensorSchema):
@@ -724,7 +724,6 @@ class Step3VisionAttention(nn.Module):
724
config,
725
quant_config: QuantizationConfig | None = None,
726
prefix: str = "",
727
- use_data_parallel: bool = False,
727
):
728
super().__init__()
729
self.config = config
@@ -734,6 +733,7 @@ class Step3VisionAttention(nn.Module):
733
734
self.scale = self.head_dim**-0.5
735
736
+ use_data_parallel = is_vit_use_data_parallel()
737
tp_size = 1 if use_data_parallel else get_tensor_model_parallel_world_size()
738
assert self.total_num_heads % tp_size == 0
739
self.num_heads = self.total_num_heads // tp_size
@@ -786,11 +786,11 @@ class Step3VisionMLP(nn.Module):
786
config,
787
quant_config: QuantizationConfig | None = None,
788
prefix: str = "",
789
- use_data_parallel: bool = False,
789
):
790
super().__init__()
791
self.config = config
792
self.activation_fn = get_act_fn(config.hidden_act)
793
+ use_data_parallel = is_vit_use_data_parallel()
794
self.fc1 = ColumnParallelLinear(
795
config.hidden_size,
796
config.intermediate_size,
@@ -821,23 +821,19 @@ class Step3VisionEncoderLayer(nn.Module):
821
config: Step3VisionEncoderConfig,
822
quant_config: QuantizationConfig | None = None,
823
prefix: str = "",
824
- use_data_parallel: bool = False,
824
):
825
super().__init__()
827
- self.use_data_parallel = use_data_parallel
826
self.embed_dim = config.hidden_size
827
self.self_attn = Step3VisionAttention(
828
config,
829
quant_config,
830
prefix=f"{prefix}.self_attn",
833
- use_data_parallel=self.use_data_parallel,
831
)
832
self.layer_norm1 = nn.LayerNorm(self.embed_dim, eps=config.layer_norm_eps)
833
self.mlp = Step3VisionMLP(
834
config,
835
quant_config,
836
prefix=f"{prefix}.mlp",
840
- use_data_parallel=self.use_data_parallel,
837
)
838
self.layer_norm2 = nn.LayerNorm(self.embed_dim, eps=config.layer_norm_eps)
839
@@ -856,18 +852,15 @@ class Step3VisionEncoder(nn.Module):
852
config: Step3VisionEncoderConfig,
853
quant_config: QuantizationConfig | None = None,
854
prefix: str = "",
859
- use_data_parallel: bool = False,
855
):
856
super().__init__()
857
self.config = config
863
- self.use_data_parallel = use_data_parallel
858
self.layers = nn.ModuleList(
859
[
860
Step3VisionEncoderLayer(
861
config,
862
quant_config,
863
prefix=f"{prefix}.layers.{i}",
870
- use_data_parallel=self.use_data_parallel,
864
)
865
for i in range(config.num_hidden_layers)
866
]
@@ -889,18 +882,16 @@ class Step3VisionTransformer(nn.Module):
882
config: Step3VisionEncoderConfig,
883
quant_config: QuantizationConfig | None = None,
884
prefix: str = "",
892
- use_data_parallel: bool = False,
885
):
886
super().__init__()
887
self.config = config
896
- self.use_data_parallel = use_data_parallel
888
+ self.use_data_parallel = is_vit_use_data_parallel()
889
self.image_size = config.image_size
890
self.embeddings = Step3VisionEmbeddings(config)
891
self.transformer = Step3VisionEncoder(
892
config,
893
quant_config,
894
prefix=f"{prefix}.transformer",
903
- use_data_parallel=self.use_data_parallel,
895
)
896
897
def forward(
@@ -952,7 +943,6 @@ class Step3VLForConditionalGeneration(nn.Module, SupportsMultiModal, SupportsPP)
943
config.vision_config,
944
None,
945
prefix=maybe_prefix(prefix, "vision_model"),
955
- use_data_parallel=self.use_data_parallel,
946
)
947
self.vit_downsampler = Conv2dLayer(
948
config.vision_config.hidden_size,
vllm/model_executor/models/step_vl.py
+3
-11
@@ -24,7 +24,7 @@ from vllm.model_executor.layers.quantization import QuantizationConfig
24
25
from .step3_vl import Step3VLForConditionalGeneration
26
from .utils import WeightsMapper, init_vllm_registered_model, maybe_prefix
27
-from .vision import run_dp_sharded_vision_model
27
+from .vision import is_vit_use_data_parallel, run_dp_sharded_vision_model
28
29
_DEFAULT_NORM_LAYER = partial(nn.LayerNorm, eps=1e-5)
30
@@ -151,9 +151,9 @@ class PerceptionEncoderMLP(nn.Module):
151
act_layer: Callable[[], nn.Module],
152
quant_config: QuantizationConfig | None = None,
153
prefix: str = "",
154
- use_data_parallel: bool = False,
154
):
155
super().__init__()
156
+ use_data_parallel = is_vit_use_data_parallel()
157
self.fc1 = ColumnParallelLinear(
158
input_dim,
159
hidden_dim,
@@ -189,7 +189,6 @@ class PerceptionEncoderVisionAttention(nn.Module):
189
use_cls_token: bool = False,
190
quant_config: QuantizationConfig | None = None,
191
prefix: str = "",
192
- use_data_parallel: bool = False,
192
):
193
super().__init__()
194
self.embed_dim = embed_dim
@@ -197,6 +196,7 @@ class PerceptionEncoderVisionAttention(nn.Module):
196
self.head_dim = embed_dim // num_heads
197
self.scale = self.head_dim**-0.5
198
199
+ use_data_parallel = is_vit_use_data_parallel()
200
tp_size = 1 if use_data_parallel else get_tensor_model_parallel_world_size()
201
assert self.total_num_heads % tp_size == 0, (
202
"embed_dim must be divisible by num_heads"
@@ -258,7 +258,6 @@ class PerceptionEncoderVisionBlock(nn.Module):
258
use_cls_token: bool = False,
259
quant_config: QuantizationConfig | None = None,
260
prefix: str = "",
261
- use_data_parallel: bool = False,
261
):
262
super().__init__()
263
self.attn = PerceptionEncoderVisionAttention(
@@ -269,7 +268,6 @@ class PerceptionEncoderVisionBlock(nn.Module):
268
use_cls_token=use_cls_token,
269
quant_config=quant_config,
270
prefix=f"{prefix}.attn",
272
- use_data_parallel=use_data_parallel,
271
)
272
self.ls_1 = (
273
PerceptionEncoderLayerScale(d_model, ls_init_value)
@@ -290,7 +288,6 @@ class PerceptionEncoderVisionBlock(nn.Module):
288
act_layer,
289
quant_config=quant_config,
290
prefix=f"{prefix}.mlp",
293
- use_data_parallel=use_data_parallel,
291
)
292
293
def forward(self, x: torch.Tensor, grid_hw: tuple[int, int]):
@@ -314,7 +311,6 @@ class PerceptionEncoderVisionTransformer(nn.Module):
311
use_cls_token: bool = False,
312
quant_config: QuantizationConfig | None = None,
313
prefix: str = "",
317
- use_data_parallel: bool = False,
314
):
315
super().__init__()
316
self.width = width
@@ -333,7 +329,6 @@ class PerceptionEncoderVisionTransformer(nn.Module):
329
use_cls_token=use_cls_token,
330
quant_config=quant_config,
331
prefix=f"{prefix}.resblocks.{i}",
336
- use_data_parallel=use_data_parallel,
332
)
333
for i in range(layers)
334
]
@@ -353,7 +348,6 @@ class PerceptionEncoder(nn.Module):
348
norm_layer: Callable = _DEFAULT_NORM_LAYER,
349
quant_config: QuantizationConfig | None = None,
350
prefix: str = "",
356
- use_data_parallel: bool = False,
351
):
352
super().__init__()
353
self.patch_size = config.patch_size
@@ -394,7 +388,6 @@ class PerceptionEncoder(nn.Module):
388
use_cls_token=self.use_cls_token,
389
quant_config=quant_config,
390
prefix=f"{prefix}.transformer",
397
- use_data_parallel=use_data_parallel,
391
)
392
393
self.vit_downsampler1 = Conv2dLayer(
@@ -511,7 +504,6 @@ class StepVLForConditionalGeneration(Step3VLForConditionalGeneration):
504
get_act_fn(config.vision_config.hidden_act),
505
quant_config=quant_config,
506
prefix=maybe_prefix(prefix, "vision_model"),
514
- use_data_parallel=self.use_data_parallel,
507
)
508
self.vit_large_projector = ColumnParallelLinear(
509
config.vision_config.width * 4,