Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
101 changes: 79 additions & 22 deletions tensorrt_llm/_torch/pyexecutor/_util.py
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,7 @@
use_py_mamba_cache_manager)
from .llm_request import ExecutorResponse, LlmRequestState
from .model_engine import PyTorchModelEngine
from .py_executor import PyExecutor
from .py_executor import PyExecutor, PyExecutorResources
from .resource_manager import (KVCacheCompressionManager, KVCacheManager,
PeftCacheManager, ResourceManager,
ResourceManagerType)
Expand Down Expand Up @@ -1840,7 +1840,7 @@ def configure_kv_cache_capacity(self,
kv_stats_draft.allocated_bytes
if kv_stats_draft is not None else 0)
py_executor.is_warmup = False
py_executor.shutdown()
py_executor.release_resources()
py_executor.enable_iter_perf_stats = origin_iter_stats
py_executor.set_gather_responses(False)

Expand Down Expand Up @@ -4087,22 +4087,16 @@ def validate_seq_slot_pool_covers_admission(max_num_sequences: int,
"shortfall means one of them was re-derived from max_batch_size.")


def create_py_executor_instance(
def create_py_executor_resources(
*,
dist,
resources,
mapping,
llm_args,
ctx_chunk_config,
model_engine,
start_worker,
sampler,
drafter,
guided_decoder: Optional[GuidedDecoder] = None,
lora_config: Optional[LoraConfig] = None,
garbage_collection_gen0_threshold: Optional[int] = None,
kv_connector_manager: Optional[KvCacheConnectorManager] = None,
resource_governor_queue=None,
max_seq_len: Optional[int] = None,
max_batch_size: Optional[int] = None,
max_beam_width: Optional[int] = None,
Expand All @@ -4114,14 +4108,13 @@ def create_py_executor_instance(
execution_stream: Optional[torch.cuda.Stream] = None,
dwdp_manager: Optional[DwdpManager] = None,
max_num_sequences: Optional[int] = None,
) -> PyExecutor:
) -> PyExecutorResources:
"""Build the resource graph shared by initial execution and rebinding."""
set_low_latency_dispatch(
getattr(llm_args, 'enable_low_latency_host_dispatch', False))

kv_cache_manager = resources.get(ResourceManagerType.KV_CACHE_MANAGER, None)

spec_config = model_engine.spec_config

is_disagg = is_disagg_enabled(cache_transceiver_config)

max_num_sequences = resolve_max_num_sequences(
Expand Down Expand Up @@ -4489,14 +4482,78 @@ def create_py_executor_instance(
executor_max_seq_len = min(executor_max_seq_len,
int(decoder_position_limit))

return PyExecutorResources(
resource_manager=resource_manager,
scheduler=scheduler,
kv_cache_transceiver=kv_cache_transceiver,
peft_cache_config=peft_cache_config,
virtual_memory_pools=virtual_memory_pools,
kv_connector_manager=kv_connector_manager,
dwdp_manager=dwdp_manager,
max_seq_len=executor_max_seq_len,
max_num_sequences=max_num_sequences,
waiting_queue_policy=waiting_queue_policy,
)


def create_py_executor_instance(
*,
dist,
resources,
mapping,
llm_args,
ctx_chunk_config,
model_engine,
start_worker,
sampler,
drafter,
guided_decoder: Optional[GuidedDecoder] = None,
lora_config: Optional[LoraConfig] = None,
garbage_collection_gen0_threshold: Optional[int] = None,
kv_connector_manager: Optional[KvCacheConnectorManager] = None,
resource_governor_queue=None,
max_seq_len: Optional[int] = None,
max_batch_size: Optional[int] = None,
max_beam_width: Optional[int] = None,
max_num_tokens: Optional[int] = None,
peft_cache_config: Optional[PeftCacheConfig] = None,
scheduler_config: Optional[SchedulerConfig] = None,
cache_transceiver_config: Optional[CacheTransceiverConfig] = None,
virtual_memory_pools: Optional[dict] = None,
execution_stream: Optional[torch.cuda.Stream] = None,
dwdp_manager: Optional[DwdpManager] = None,
max_num_sequences: Optional[int] = None,
) -> PyExecutor:
execution_resources = create_py_executor_resources(
dist=dist,
resources=resources,
mapping=mapping,
llm_args=llm_args,
ctx_chunk_config=ctx_chunk_config,
model_engine=model_engine,
lora_config=lora_config,
kv_connector_manager=kv_connector_manager,
max_seq_len=max_seq_len,
max_batch_size=max_batch_size,
max_beam_width=max_beam_width,
max_num_tokens=max_num_tokens,
peft_cache_config=peft_cache_config,
scheduler_config=scheduler_config,
cache_transceiver_config=cache_transceiver_config,
virtual_memory_pools=virtual_memory_pools,
execution_stream=execution_stream,
dwdp_manager=dwdp_manager,
max_num_sequences=max_num_sequences,
)
spec_config = model_engine.spec_config
return PyExecutor(
resource_manager,
scheduler,
execution_resources.resource_manager,
execution_resources.scheduler,
model_engine=model_engine,
sampler=sampler,
drafter=drafter,
dist=dist,
max_num_sequences=max_num_sequences,
max_num_sequences=execution_resources.max_num_sequences,
disable_overlap_scheduler=llm_args.disable_overlap_scheduler,
enable_early_first_token_response=llm_args.
enable_early_first_token_response,
Expand All @@ -4506,18 +4563,18 @@ def create_py_executor_instance(
if spec_config is not None else 0,
max_total_draft_tokens=(spec_config.tokens_per_gen_step -
1) if spec_config is not None else 0,
kv_cache_transceiver=kv_cache_transceiver,
kv_cache_transceiver=execution_resources.kv_cache_transceiver,
guided_decoder=guided_decoder,
start_worker=start_worker,
garbage_collection_gen0_threshold=garbage_collection_gen0_threshold,
kv_connector_manager=kv_connector_manager,
kv_connector_manager=execution_resources.kv_connector_manager,
resource_governor_queue=resource_governor_queue,
max_seq_len=executor_max_seq_len,
peft_cache_config=peft_cache_config,
virtual_memory_pools=virtual_memory_pools,
max_seq_len=execution_resources.max_seq_len,
peft_cache_config=execution_resources.peft_cache_config,
virtual_memory_pools=execution_resources.virtual_memory_pools,
execution_stream=execution_stream,
waiting_queue_policy=waiting_queue_policy,
dwdp_manager=dwdp_manager,
waiting_queue_policy=execution_resources.waiting_queue_policy,
dwdp_manager=execution_resources.dwdp_manager,
enable_kv_pool_rebalance=llm_args.kv_cache_config.
enable_kv_pool_rebalance,
kv_pool_rebalance_check_interval=llm_args.kv_cache_config.
Expand Down
Loading
Loading