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 10, 20:15 UTC
feat: support LoRA for DeepSeek-OCR(Language Model part) (#31569)
Signed-off-by: zhima771 <15836938703@163.com> Co-authored-by: Cyrus Leung <tlleungac@connect.ust.hk> Co-authored-by: Jee Jee Li <pandaleefree@gmail.com>
zhima771 committed
Jan 2, 2026 at 11:32 UTC
27864a851c7430d20af0020562759c77bd85f1a8
2 files changed
+14
-2
docs/models/supported_models.md
+1
-1
@@ -677,7 +677,7 @@ These models primarily accept the [`LLM.generate`](./generative_models.md#llmgen
677
| `ChameleonForConditionalGeneration` | Chameleon | T + I | `facebook/chameleon-7b`, etc. | | ✅︎ |
678
| `Cohere2VisionForConditionalGeneration` | Command A Vision | T + I<sup>+</sup> | `CohereLabs/command-a-vision-07-2025`, etc. | | ✅︎ |
679
| `DeepseekVLV2ForCausalLM`<sup>^</sup> | DeepSeek-VL2 | T + I<sup>+</sup> | `deepseek-ai/deepseek-vl2-tiny`, `deepseek-ai/deepseek-vl2-small`, `deepseek-ai/deepseek-vl2`, etc. | | ✅︎ |
680
-| `DeepseekOCRForCausalLM` | DeepSeek-OCR | T + I<sup>+</sup> | `deepseek-ai/DeepSeek-OCR`, etc. | | ✅︎ |
680
+| `DeepseekOCRForCausalLM` | DeepSeek-OCR | T + I<sup>+</sup> | `deepseek-ai/DeepSeek-OCR`, etc. | ✅︎ | ✅︎ |
681
| `Ernie4_5_VLMoeForConditionalGeneration` | Ernie4.5-VL | T + I<sup>+</sup>/ V<sup>+</sup> | `baidu/ERNIE-4.5-VL-28B-A3B-PT`, `baidu/ERNIE-4.5-VL-424B-A47B-PT` | | ✅︎ |
682
| `FuyuForCausalLM` | Fuyu | T + I | `adept/fuyu-8b`, etc. | | ✅︎ |
683
| `Gemma3ForConditionalGeneration` | Gemma 3 | T + I<sup>E+</sup> | `google/gemma-3-4b-it`, `google/gemma-3-27b-it`, etc. | ✅︎ | ✅︎ |
vllm/model_executor/models/deepseek_ocr.py
+13
-1
@@ -14,9 +14,11 @@ from vllm.config import VllmConfig
14
from vllm.config.multimodal import BaseDummyOptions
15
from vllm.model_executor.models.interfaces import (
16
MultiModalEmbeddings,
17
+ SupportsLoRA,
18
SupportsMultiModal,
19
SupportsPP,
20
)
21
+from vllm.model_executor.models.module_mapping import MultiModelKeys
22
from vllm.model_executor.models.utils import (
23
AutoWeightsLoader,
24
WeightsMapper,
@@ -343,7 +345,7 @@ class DeepseekOCRMultiModalProcessor(
345
info=DeepseekOCRProcessingInfo,
346
dummy_inputs=DeepseekOCRDummyInputsBuilder,
347
)
346
-class DeepseekOCRForCausalLM(nn.Module, SupportsMultiModal, SupportsPP):
348
+class DeepseekOCRForCausalLM(nn.Module, SupportsMultiModal, SupportsPP, SupportsLoRA):
349
hf_to_vllm_mapper = WeightsMapper(
350
orig_to_new_prefix={
351
# map prefix for language backbone
@@ -589,3 +591,13 @@ class DeepseekOCRForCausalLM(nn.Module, SupportsMultiModal, SupportsPP):
591
loader = AutoWeightsLoader(self)
592
autoloaded_weights = loader.load_weights(weights, mapper=self.hf_to_vllm_mapper)
593
return autoloaded_weights
594
+
595
+ def get_mm_mapping(self) -> MultiModelKeys:
596
+ """
597
+ Get the module prefix in multimodal models
598
+ """
599
+ return MultiModelKeys.from_string_field(
600
+ language_model="language_model",
601
+ connector="projector",
602
+ tower_model=["sam_model", "vision_model"],
603
+ )