Skip to content
Open
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
12 changes: 10 additions & 2 deletions fastdeploy/engine/sched/resource_manager_v1.py
Original file line number Diff line number Diff line change
Expand Up @@ -1063,9 +1063,12 @@ def _allocate_decode_and_extend():
self.cache_manager.num_cpu_blocks > 0
or self.config.cache_config.kvcache_storage_backend
):
if not self.cache_manager.can_allocate_gpu_blocks(
can_schedule_block_num_threshold = self._get_can_schedule_prefill_threshold_block(
(request.need_prefill_tokens + self.config.cache_config.block_size - 1)
// self.config.cache_config.block_size
)
if not self.cache_manager.can_allocate_gpu_blocks(
can_schedule_block_num_threshold
): # to prevent block allocation for matching in hierarchical cache and cause dead lock
break
success = self.get_prefix_cached_blocks(request)
Expand Down Expand Up @@ -1124,6 +1127,7 @@ def _allocate_decode_and_extend():
self.req_dict[request.request_id] = allocated_position
llm_logger.debug(f"req_id:{request.request_id} allocate pos end")
else:
# Warning: _free_blocks before update_cache_blocks may cause storage blocks leak
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

❓ 疑问 新增 Warning 注释说明 _free_blocksupdate_cache_blocks 之前调用可能导致 storage block 泄漏,但紧接着的代码仍然执行 self._free_blocks(request),并未修复该顺序问题。

PR 标题为 "AS block leaks",请作者说明:

  1. 此处 _free_blocks before update_cache_blocks 的调用顺序是否就是本次要修复的 AS block 泄漏根因?
  2. 若是,应在此处补充修复逻辑(例如先调用 update_cache_blocks 再调用 _free_blocks,或跳过 _free_blocks);若不是,建议在 PR 描述中补充对应 issue 编号,说明此 Warning 何时跟进修复。

if self.config.cache_config.enable_prefix_caching:
self._free_blocks(request)
break
Expand All @@ -1139,9 +1143,12 @@ def _allocate_decode_and_extend():
self.cache_manager.num_cpu_blocks > 0
or self.config.cache_config.kvcache_storage_backend
):
if not self.cache_manager.can_allocate_gpu_blocks(
can_schedule_block_num_threshold = self._get_can_schedule_prefill_threshold_block(
(request.need_prefill_tokens + self.config.cache_config.block_size - 1)
// self.config.cache_config.block_size
)
if not self.cache_manager.can_allocate_gpu_blocks(
can_schedule_block_num_threshold
): # to prevent block allocation for matching in hierarchical cache and cause dead lock
break
success = self.get_prefix_cached_blocks(request)
Expand Down Expand Up @@ -1186,6 +1193,7 @@ def _allocate_decode_and_extend():
)
request.status = RequestStatus.RUNNING_PREFILL
else:
# Warning: _free_blocks before update_cache_blocks may cause storage blocks leak
if self.config.cache_config.enable_prefix_caching:
self._free_blocks(request)
break
Expand Down
Loading