@tduncan / Nvidia-Optimization-Stack-VLLM Mirror · read-only / commits / 3a6acad431
Fork 0

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