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
[Core] Modify the initialization parameters of the lora manager (#25249)
Signed-off-by: Jee Jee Li <pandaleefree@gmail.com>
Jee Jee Li committed
Sep 20, 2025 at 02:01 UTC
2821986450bc31869714885ed4203650a42f3cb0
10 files changed
+51
-52
tests/lora/test_lora_manager.py
+28
-8
@@ -8,11 +8,12 @@ import torch
8
from safetensors.torch import load_file
9
from torch import nn
10
11
+from vllm.config import ModelConfig, VllmConfig
12
from vllm.config.lora import LoRAConfig
13
from vllm.lora.layers import (ColumnParallelLinearWithLoRA,
14
MergedColumnParallelLinearWithLoRA,
15
RowParallelLinearWithLoRA)
15
-from vllm.lora.lora import LoRALayerWeights, PackedLoRALayerWeights
16
+from vllm.lora.lora_weights import LoRALayerWeights, PackedLoRALayerWeights
17
from vllm.lora.models import (LoRAMapping, LoRAModel, LoRAModelManager,
18
LRUCacheLoRAModelManager)
19
from vllm.lora.peft_helper import PEFTHelper
@@ -435,10 +436,19 @@ def test_lru_cache_worker_adapter_manager(dist_init, dummy_model, device,
436
target_modules=["layer1.dense1", "dense2"],
437
lora_dtype=DEFAULT_DTYPE,
438
)
439
+
440
+ model_config = ModelConfig(max_model_len=16)
441
+ vllm_config = VllmConfig(model_config=model_config,
442
+ lora_config=lora_config)
443
+
444
+ vllm_config.scheduler_config.max_num_seqs = 4
445
+ vllm_config.scheduler_config.max_num_batched_tokens = 2
446
worker_adapter_manager = LRUCacheWorkerLoRAManager(
439
- 4, 2,
440
- dummy_model.unpadded_vocab_size - lora_config.lora_extra_vocab_size,
441
- lora_config, device, EMBEDDING_MODULES, EMBEDDING_PADDING_MODULES)
447
+ vllm_config, device, EMBEDDING_MODULES, EMBEDDING_PADDING_MODULES)
448
+
449
+ worker_adapter_manager.max_num_seqs = 4
450
+ worker_adapter_manager.max_num_batched_tokens = 2
451
+
452
worker_adapter_manager.create_lora_manager(dummy_model)
453
454
mapping = LoRAMapping([], [])
@@ -517,10 +527,20 @@ def test_worker_adapter_manager(dist_init, dummy_model_gate_up, device,
527
max_cpu_loras=4,
528
max_loras=4,
529
lora_dtype=DEFAULT_DTYPE)
520
- worker_adapter_manager = WorkerLoRAManager(
521
- 4, 2, dummy_model_gate_up.unpadded_vocab_size -
522
- lora_config.lora_extra_vocab_size, lora_config, device,
523
- EMBEDDING_MODULES, EMBEDDING_PADDING_MODULES)
530
+
531
+ model_config = ModelConfig(max_model_len=16)
532
+ vllm_config = VllmConfig(model_config=model_config,
533
+ lora_config=lora_config)
534
+
535
+ vllm_config.scheduler_config.max_num_seqs = 4
536
+ vllm_config.scheduler_config.max_num_batched_tokens = 2
537
+
538
+ worker_adapter_manager = WorkerLoRAManager(vllm_config, device,
539
+ EMBEDDING_MODULES,
540
+ EMBEDDING_PADDING_MODULES)
541
+ worker_adapter_manager.vocab_size = (
542
+ dummy_model_gate_up.unpadded_vocab_size -
543
+ lora_config.lora_extra_vocab_size)
544
worker_adapter_manager.create_lora_manager(dummy_model_gate_up)
545
546
dummy_lora_files = f"{tmp_path}/lora_adapter"
tests/lora/utils.py
+1
-1
@@ -9,7 +9,7 @@ from typing import Optional, Union
9
import torch
10
from safetensors.torch import save_file
11
12
-from vllm.lora.lora import LoRALayerWeights, PackedLoRALayerWeights
12
+from vllm.lora.lora_weights import LoRALayerWeights, PackedLoRALayerWeights
13
14
15
class DummyLoRAManager:
vllm/lora/lora_weights.py
renamed
vllm/lora/models.py
+1
-1
@@ -14,7 +14,7 @@ from torch import nn
14
from vllm.config.lora import LoRAConfig
15
from vllm.logger import init_logger
16
from vllm.lora.layers import BaseLayerWithLoRA, LoRAMapping
17
-from vllm.lora.lora import LoRALayerWeights, PackedLoRALayerWeights
17
+from vllm.lora.lora_weights import LoRALayerWeights, PackedLoRALayerWeights
18
from vllm.lora.peft_helper import PEFTHelper
19
from vllm.lora.punica_wrapper import get_punica_wrapper
20
from vllm.lora.utils import (from_layer, from_layer_logits_processor,
vllm/lora/worker_manager.py
+12
-11
@@ -6,7 +6,7 @@ from typing import Any, Literal, Optional, Union
6
7
import torch
8
9
-from vllm.config.lora import LoRAConfig
9
+from vllm.config import VllmConfig
10
from vllm.logger import init_logger
11
from vllm.lora.models import (LoRAModel, LoRAModelManager,
12
LRUCacheLoRAModelManager, create_lora_manager)
@@ -27,25 +27,26 @@ class WorkerLoRAManager:
27
28
def __init__(
29
self,
30
- max_num_seqs: int,
31
- max_num_batched_tokens: int,
32
- vocab_size: int,
33
- lora_config: LoRAConfig,
30
+ vllm_config: VllmConfig,
31
device: torch.device,
32
embedding_modules: dict[str, str],
33
embedding_padding_modules: list[str],
34
lora_model_cls: type[LoRAModel] = LoRAModel,
38
- max_position_embeddings: Optional[int] = None,
35
):
36
self._lora_model_cls = lora_model_cls
37
self.embedding_modules = embedding_modules
38
self.embedding_padding_modules = embedding_padding_modules
39
self._cached_dummy_lora: Union[None, Literal[False], LoRAModel] = False
44
- self.max_num_seqs = max_num_seqs
45
- self.max_num_batched_tokens = max_num_batched_tokens
46
- self.vocab_size = vocab_size
47
- self.lora_config = lora_config
48
- self.max_position_embeddings = max_position_embeddings
40
+ self.max_num_seqs = vllm_config.scheduler_config.max_num_seqs
41
+ self.max_num_batched_tokens = (
42
+ vllm_config.scheduler_config.max_num_batched_tokens)
43
+ self.vocab_size = vllm_config.model_config.get_vocab_size()
44
+ self.lora_config = vllm_config.lora_config
45
+
46
+ # Use get_text_config() in case of multimodal models
47
+ text_config = vllm_config.model_config.hf_config.get_text_config()
48
+
49
+ self.max_position_embeddings = text_config.max_position_embeddings
50
self.device = device
51
# Lazily initialized by create_lora_manager.
52
self._adapter_manager: LoRAModelManager
vllm/v1/worker/cpu_model_runner.py
+2
-3
@@ -107,9 +107,8 @@ class CPUModelRunner(GPUModelRunner):
107
self.model = get_model(vllm_config=self.vllm_config)
108
109
if self.lora_config:
110
- self.model = self.load_lora_model(self.model, self.model_config,
111
- self.scheduler_config,
112
- self.lora_config, self.device)
110
+ self.model = self.load_lora_model(self.model, self.vllm_config,
111
+ self.device)
112
113
def get_model(self) -> nn.Module:
114
return self.model
vllm/v1/worker/gpu_model_runner.py
+1
-4
@@ -2552,10 +2552,7 @@ class GPUModelRunner(LoRAModelRunnerMixin, KVConnectorModelRunnerMixin):
2552
self.model = model_loader.load_model(
2553
vllm_config=self.vllm_config, model_config=self.model_config)
2554
if self.lora_config:
2555
- self.model = self.load_lora_model(self.model,
2556
- self.model_config,
2557
- self.scheduler_config,
2558
- self.lora_config,
2555
+ self.model = self.load_lora_model(self.model, self.vllm_config,
2556
self.device)
2557
if hasattr(self, "drafter"):
2558
logger.info("Loading drafter model...")
vllm/v1/worker/lora_model_runner_mixin.py
+3
-12
@@ -11,7 +11,7 @@ import numpy as np
11
import torch
12
import torch.nn as nn
13
14
-from vllm.config import ModelConfig, SchedulerConfig
14
+from vllm.config import VllmConfig
15
from vllm.config.lora import LoRAConfig
16
from vllm.logger import init_logger
17
from vllm.lora.layers import LoRAMapping
@@ -31,9 +31,7 @@ class LoRAModelRunnerMixin:
31
32
LORA_WARMUP_RANK = 8
33
34
- def load_lora_model(self, model: nn.Module, model_config: ModelConfig,
35
- scheduler_config: SchedulerConfig,
36
- lora_config: LoRAConfig,
34
+ def load_lora_model(self, model: nn.Module, vllm_config: VllmConfig,
35
device: torch.device) -> nn.Module:
36
37
if not supports_lora(model):
@@ -44,19 +42,12 @@ class LoRAModelRunnerMixin:
42
logger.warning("Regarding multimodal models, vLLM currently "
43
"only supports adding LoRA to language model.")
44
47
- # Use get_text_config() in case of multimodal models
48
- text_config = model_config.hf_config.get_text_config()
49
-
45
# Add LoRA Manager to the Model Runner
46
self.lora_manager = LRUCacheWorkerLoRAManager(
52
- scheduler_config.max_num_seqs,
53
- scheduler_config.max_num_batched_tokens,
54
- model_config.get_vocab_size(),
55
- lora_config,
47
+ vllm_config,
48
device,
49
model.embedding_modules,
50
model.embedding_padding_modules,
59
- max_position_embeddings=text_config.max_position_embeddings,
51
)
52
return self.lora_manager.create_lora_manager(model)
53
vllm/v1/worker/tpu_model_runner.py
+1
-3
@@ -1178,9 +1178,7 @@ class TPUModelRunner(LoRAModelRunnerMixin, KVConnectorModelRunnerMixin):
1178
"or sharding the weights on more chips. "
1179
f"See the detailed error: {e}") from e
1180
if self.lora_config is not None:
1181
- model = self.load_lora_model(model, self.model_config,
1182
- self.scheduler_config,
1183
- self.lora_config, self.device)
1181
+ model = self.load_lora_model(model, self.vllm_config, self.device)
1182
replace_set_lora(model)
1183
1184
# Sync all pending XLA execution during model initialization and weight
vllm/worker/model_runner.py
+2
-9
@@ -1078,20 +1078,13 @@ class GPUModelRunnerBase(ModelRunnerBase[TModelInputForGPU]):
1078
"Regarding multimodal models, vLLM currently "
1079
"only supports adding LoRA to language model.")
1080
1081
- # Use get_text_config() in case of multimodal models
1082
- text_config = self.model_config.hf_config.get_text_config()
1083
-
1081
self.lora_manager = LRUCacheWorkerLoRAManager(
1085
- self.scheduler_config.max_num_seqs,
1086
- self.scheduler_config.max_num_batched_tokens,
1087
- self.vocab_size,
1088
- self.lora_config,
1082
+ self.vllm_config,
1083
self.device,
1084
self.model.embedding_modules,
1085
self.model.embedding_padding_modules,
1092
- max_position_embeddings=text_config.
1093
- max_position_embeddings,
1086
)
1087
+
1088
self.model = self.lora_manager.create_lora_manager(self.model)
1089
time_after_load = time.perf_counter()
1090