Support start up LoRA server without initial adapters (#8019)
This commit is contained in:
@@ -264,7 +264,7 @@ class CudaGraphRunner:
|
||||
if self.enable_torch_compile:
|
||||
set_torch_compile_config()
|
||||
|
||||
if self.model_runner.server_args.lora_paths is not None:
|
||||
if self.model_runner.server_args.enable_lora:
|
||||
self.model_runner.lora_manager.init_cuda_graph_batch_info(self.max_bs)
|
||||
|
||||
# Graph inputs
|
||||
@@ -510,11 +510,10 @@ class CudaGraphRunner:
|
||||
spec_info.capture_hidden_mode if spec_info else CaptureHiddenMode.NULL
|
||||
)
|
||||
|
||||
if self.model_runner.server_args.lora_paths is not None:
|
||||
# Currently, if the lora_path in `lora_paths` is None, the lora backend will use a
|
||||
# different logic to handle lora, so we need to set `lora_paths` to a list of non-None
|
||||
# values if lora is enabled.
|
||||
lora_paths = [next(iter(self.model_runner.server_args.lora_paths))] * bs
|
||||
if self.model_runner.server_args.enable_lora:
|
||||
# It is safe to capture CUDA graph using empty LoRA path, as the LoRA kernels will always be launched whenever
|
||||
# `--enable-lora` is set to True (and return immediately if the LoRA path is empty for perf optimization).
|
||||
lora_paths = [None] * bs
|
||||
else:
|
||||
lora_paths = None
|
||||
|
||||
|
||||
@@ -418,7 +418,7 @@ class ForwardBatch:
|
||||
ret._compute_mrope_positions(model_runner, batch)
|
||||
|
||||
# Init lora information
|
||||
if model_runner.server_args.lora_paths is not None:
|
||||
if model_runner.server_args.enable_lora:
|
||||
model_runner.lora_manager.prepare_lora_batch(ret)
|
||||
|
||||
TboForwardBatchPreparer.prepare(
|
||||
|
||||
@@ -304,11 +304,7 @@ class ModelRunner:
|
||||
self.apply_torch_tp()
|
||||
|
||||
# Init lora
|
||||
# TODO (lifuhuang): when we support dynamic LoRA loading / unloading, we should add
|
||||
# a new server arg `enable_lora` to control whether to init LoRA manager to be more
|
||||
# explicit, as it is perfectly valid to start a server with an empty lora_paths and
|
||||
# load LoRA adapters dynamically later.
|
||||
if server_args.lora_paths is not None:
|
||||
if server_args.enable_lora:
|
||||
self.init_lora_manager()
|
||||
|
||||
# Init memory pool and attention backends
|
||||
@@ -895,7 +891,7 @@ class ModelRunner:
|
||||
max_lora_rank=self.server_args.max_lora_rank,
|
||||
target_modules=self.server_args.lora_target_modules,
|
||||
)
|
||||
result = self.lora_manager.load_lora_adapters(self.server_args.lora_paths)
|
||||
result = self.lora_manager.load_lora_adapters(self.server_args.lora_paths or {})
|
||||
if result.success:
|
||||
logger.info(
|
||||
f"LoRA manager ready. Loaded LoRA adapters: {', '.join(result.loaded_adapters)}"
|
||||
|
||||
Reference in New Issue
Block a user