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
[Model] Enable encoder DP for MiniCPM-V (#23948)
Signed-off-by: zjy0516 <riverclouds.zhu@qq.com> Signed-off-by: Jiangyun Zhu <riverclouds.zhu@qq.com> Co-authored-by: Cyrus Leung <cyrus.tl.leung@gmail.com>
Jiangyun Zhu committed
Aug 30, 2025 at 21:31 UTC
3a6acad43177d612654082ed1d56fb8d2c442179
2 files changed
+30
-15
docs/configuration/optimization.md
+1
-1
@@ -175,7 +175,7 @@ Regardless, you need to set `mm_encoder_tp_mode="data"` in engine arguments to u
175
Known supported models:
176
177
- Llama4 (<gh-pr:18368>)
178
-- MiniCPM-V-4 (<gh-pr:23327>)
178
+- MiniCPM-V-2.5 or above (<gh-pr:23327>, <gh-pr:23948>)
179
- Qwen2.5-VL (<gh-pr:22742>)
180
- Step3 (<gh-pr:22697>)
181
vllm/model_executor/models/minicpmv.py
+29
-14
@@ -977,6 +977,8 @@ class MiniCPMVBaseModel(nn.Module, SupportsMultiModal, SupportsPP):
977
instantiated.
978
"""
979
980
+ supports_encoder_tp_data = True
981
+
982
@classmethod
983
def get_placeholder_str(cls, modality: str, i: int) -> Optional[str]:
984
if modality.startswith("image"):
@@ -990,6 +992,7 @@ class MiniCPMVBaseModel(nn.Module, SupportsMultiModal, SupportsPP):
992
config = vllm_config.model_config.hf_config
993
multimodal_config = vllm_config.model_config.multimodal_config
994
quant_config = vllm_config.quant_config
995
+ self.use_data_parallel = multimodal_config.mm_encoder_tp_mode == "data"
996
super().__init__()
997
# All MiniCPM-V models disable `tie_word_embeddings` but
998
# `PretrainedConfig.tie_word_embeddings` defaults to True; we cannot
@@ -1237,6 +1240,8 @@ class MiniCPMVBaseModel(nn.Module, SupportsMultiModal, SupportsPP):
1240
1241
class MiniCPMV2_0(MiniCPMVBaseModel):
1242
1243
+ supports_encoder_tp_data = False
1244
+
1245
def __init__(self, *, vllm_config: VllmConfig, prefix: str = ""):
1246
super().__init__(vllm_config=vllm_config, prefix=prefix)
1247
assert self.version == (2, 0)
@@ -1351,9 +1356,12 @@ class MiniCPMV2_5(MiniCPMVBaseModel, SupportsLoRA):
1356
quant_config: Optional[QuantizationConfig],
1357
prefix: str = "",
1358
) -> nn.Module:
1354
- model = Idefics2VisionTransformer(config.vision_config,
1355
- quant_config=quant_config,
1356
- prefix=prefix)
1359
+ model = Idefics2VisionTransformer(
1360
+ config.vision_config,
1361
+ quant_config=quant_config,
1362
+ prefix=prefix,
1363
+ use_data_parallel=self.use_data_parallel,
1364
+ )
1365
if self.config.drop_vision_last_layer:
1366
model.encoder.layers = model.encoder.layers[:-1]
1367
return model
@@ -1441,9 +1449,12 @@ class MiniCPMV2_6(MiniCPMVBaseModel, SupportsLoRA):
1449
quant_config: Optional[QuantizationConfig] = None,
1450
prefix: str = "",
1451
) -> nn.Module:
1444
- model = Idefics2VisionTransformer(config.vision_config,
1445
- quant_config=quant_config,
1446
- prefix=prefix)
1452
+ model = Idefics2VisionTransformer(
1453
+ config.vision_config,
1454
+ quant_config=quant_config,
1455
+ prefix=prefix,
1456
+ use_data_parallel=self.use_data_parallel,
1457
+ )
1458
if self.config.drop_vision_last_layer:
1459
model.encoder.layers = model.encoder.layers[:-1]
1460
return model
@@ -1521,8 +1532,6 @@ class MiniCPMV4_0(MiniCPMVBaseModel, SupportsLoRA):
1532
],
1533
}
1534
1524
- supports_encoder_tp_data = True
1525
-
1535
def __init__(self, *, vllm_config: VllmConfig, prefix: str = ""):
1536
super().__init__(vllm_config=vllm_config, prefix=prefix)
1537
assert self.version == (4, 0)
@@ -1546,9 +1555,12 @@ class MiniCPMV4_0(MiniCPMVBaseModel, SupportsLoRA):
1555
prefix: str = "",
1556
) -> nn.Module:
1557
quant_config = self._maybe_ignore_quant_config(quant_config)
1549
- model = Idefics2VisionTransformer(config.vision_config,
1550
- quant_config=quant_config,
1551
- prefix=prefix)
1558
+ model = Idefics2VisionTransformer(
1559
+ config.vision_config,
1560
+ quant_config=quant_config,
1561
+ prefix=prefix,
1562
+ use_data_parallel=self.use_data_parallel,
1563
+ )
1564
if self.config.drop_vision_last_layer:
1565
model.encoder.layers = model.encoder.layers[:-1]
1566
return model
@@ -1652,9 +1664,12 @@ class MiniCPMV4_5(MiniCPMVBaseModel, SupportsLoRA):
1664
prefix: str = "",
1665
) -> nn.Module:
1666
quant_config = self._maybe_ignore_quant_config(quant_config)
1655
- model = Idefics2VisionTransformer(config.vision_config,
1656
- quant_config=quant_config,
1657
- prefix=prefix)
1667
+ model = Idefics2VisionTransformer(
1668
+ config.vision_config,
1669
+ quant_config=quant_config,
1670
+ prefix=prefix,
1671
+ use_data_parallel=self.use_data_parallel,
1672
+ )
1673
if self.config.drop_vision_last_layer:
1674
model.encoder.layers = model.encoder.layers[:-1]
1675
return model