Move get_draft_kv_pool to mem_cache.kv_cache_builder (#25602)
This commit is contained in:
@@ -185,6 +185,7 @@ from sglang.srt.managers.scheduler_update_weights_mixin import (
|
|||||||
SchedulerUpdateWeightsMixin,
|
SchedulerUpdateWeightsMixin,
|
||||||
)
|
)
|
||||||
from sglang.srt.managers.utils import GenerationBatchResult, validate_input_length
|
from sglang.srt.managers.utils import GenerationBatchResult, validate_input_length
|
||||||
|
from sglang.srt.mem_cache import kv_cache_builder
|
||||||
from sglang.srt.mem_cache.cache_init_params import CacheInitParams
|
from sglang.srt.mem_cache.cache_init_params import CacheInitParams
|
||||||
from sglang.srt.mem_cache.common import maybe_cache_unfinished_req, release_kv_cache
|
from sglang.srt.mem_cache.common import maybe_cache_unfinished_req, release_kv_cache
|
||||||
from sglang.srt.mem_cache.radix_cache import RadixCache
|
from sglang.srt.mem_cache.radix_cache import RadixCache
|
||||||
@@ -998,37 +999,12 @@ class Scheduler(
|
|||||||
embedding_cache_size = envs.SGLANG_VLM_CACHE_SIZE_MB.get()
|
embedding_cache_size = envs.SGLANG_VLM_CACHE_SIZE_MB.get()
|
||||||
init_mm_embedding_cache(embedding_cache_size * 1024 * 1024)
|
init_mm_embedding_cache(embedding_cache_size * 1024 * 1024)
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def get_draft_kv_pool(
|
|
||||||
*,
|
|
||||||
draft_worker: "BaseTpWorker",
|
|
||||||
spec_algorithm: SpeculativeAlgorithm,
|
|
||||||
server_args: ServerArgs,
|
|
||||||
enable_overlap: bool,
|
|
||||||
):
|
|
||||||
"""Return (draft_token_to_kv_pool, draft_model_config) for the current
|
|
||||||
draft worker, or (None, None) when no draft KV pool is available."""
|
|
||||||
if draft_worker is None or spec_algorithm.is_ngram():
|
|
||||||
return None, None
|
|
||||||
|
|
||||||
if spec_algorithm.supports_spec_v2() and enable_overlap:
|
|
||||||
if server_args.enable_multi_layer_eagle:
|
|
||||||
draft_runner = draft_worker.draft_worker.draft_runner_list[0]
|
|
||||||
else:
|
|
||||||
draft_runner = draft_worker.draft_worker.draft_runner
|
|
||||||
return draft_runner.token_to_kv_pool, draft_runner.model_config
|
|
||||||
|
|
||||||
return (
|
|
||||||
draft_worker.model_runner.token_to_kv_pool,
|
|
||||||
draft_worker.model_config,
|
|
||||||
)
|
|
||||||
|
|
||||||
def _maybe_register_hicache_draft(self) -> None:
|
def _maybe_register_hicache_draft(self) -> None:
|
||||||
"""Register draft KV pool with HiCacheController for piggyback L2/L3 ops."""
|
"""Register draft KV pool with HiCacheController for piggyback L2/L3 ops."""
|
||||||
if not self.enable_hierarchical_cache:
|
if not self.enable_hierarchical_cache:
|
||||||
return
|
return
|
||||||
|
|
||||||
draft_kv_pool, _ = Scheduler.get_draft_kv_pool(
|
draft_kv_pool, _ = kv_cache_builder.get_draft_kv_pool(
|
||||||
draft_worker=self.draft_worker,
|
draft_worker=self.draft_worker,
|
||||||
spec_algorithm=self.spec_algorithm,
|
spec_algorithm=self.spec_algorithm,
|
||||||
server_args=self.server_args,
|
server_args=self.server_args,
|
||||||
@@ -1228,7 +1204,7 @@ class Scheduler(
|
|||||||
)
|
)
|
||||||
|
|
||||||
# todo: should we fix this when enabling mtp or it doesn't matter since we only enable mtp in decode node thus we don't transfer draft kvs between P and D?
|
# todo: should we fix this when enabling mtp or it doesn't matter since we only enable mtp in decode node thus we don't transfer draft kvs between P and D?
|
||||||
draft_token_to_kv_pool, model_config = Scheduler.get_draft_kv_pool(
|
draft_token_to_kv_pool, model_config = kv_cache_builder.get_draft_kv_pool(
|
||||||
draft_worker=self.draft_worker,
|
draft_worker=self.draft_worker,
|
||||||
spec_algorithm=self.spec_algorithm,
|
spec_algorithm=self.spec_algorithm,
|
||||||
server_args=self.server_args,
|
server_args=self.server_args,
|
||||||
|
|||||||
@@ -0,0 +1,34 @@
|
|||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
|
from typing import TYPE_CHECKING
|
||||||
|
|
||||||
|
if TYPE_CHECKING:
|
||||||
|
|
||||||
|
from sglang.srt.managers.tp_worker import BaseTpWorker
|
||||||
|
from sglang.srt.server_args import ServerArgs
|
||||||
|
from sglang.srt.speculative.spec_info import SpeculativeAlgorithm
|
||||||
|
|
||||||
|
|
||||||
|
def get_draft_kv_pool(
|
||||||
|
*,
|
||||||
|
draft_worker: "BaseTpWorker",
|
||||||
|
spec_algorithm: SpeculativeAlgorithm,
|
||||||
|
server_args: ServerArgs,
|
||||||
|
enable_overlap: bool,
|
||||||
|
):
|
||||||
|
"""Return (draft_token_to_kv_pool, draft_model_config) for the current
|
||||||
|
draft worker, or (None, None) when no draft KV pool is available."""
|
||||||
|
if draft_worker is None or spec_algorithm.is_ngram():
|
||||||
|
return None, None
|
||||||
|
|
||||||
|
if spec_algorithm.supports_spec_v2() and enable_overlap:
|
||||||
|
if server_args.enable_multi_layer_eagle:
|
||||||
|
draft_runner = draft_worker.draft_worker.draft_runner_list[0]
|
||||||
|
else:
|
||||||
|
draft_runner = draft_worker.draft_worker.draft_runner
|
||||||
|
return draft_runner.token_to_kv_pool, draft_runner.model_config
|
||||||
|
|
||||||
|
return (
|
||||||
|
draft_worker.model_runner.token_to_kv_pool,
|
||||||
|
draft_worker.model_config,
|
||||||
|
)
|
||||||
Reference in New Issue
Block a user