[feat] Support extra_buffer in Mamba2-based models (#15829)
Signed-off-by: Roi Koren <roik@nvidia.com>
This commit is contained in:
@@ -68,7 +68,6 @@ from sglang.srt.disaggregation.utils import FAKE_BOOTSTRAP_HOST, DisaggregationM
|
||||
from sglang.srt.distributed.parallel_state import get_tensor_model_parallel_rank
|
||||
from sglang.srt.dllm.mixin.req import ReqDllmMixin
|
||||
from sglang.srt.environ import envs
|
||||
from sglang.srt.layers.attention.fla.chunk_delta_h import CHUNK_SIZE as FLA_CHUNK_SIZE
|
||||
from sglang.srt.managers.embed_types import PositionalEmbeds
|
||||
from sglang.srt.managers.scheduler_components.new_token_ratio_tracker import (
|
||||
NewTokenRatioTracker,
|
||||
@@ -2090,18 +2089,19 @@ class ScheduleBatch(ScheduleBatchDisaggregationDecodeMixin):
|
||||
self,
|
||||
req: Req,
|
||||
) -> "_MambaRadixCacheV2TrackEntry":
|
||||
mamba_cache_chunk_size = get_global_server_args().mamba_cache_chunk_size
|
||||
|
||||
def _force_track_h(i: int) -> int:
|
||||
assert i % FLA_CHUNK_SIZE == 0
|
||||
assert i % mamba_cache_chunk_size == 0
|
||||
# There are 3 cases for mamba_track_seqlen passed to mamba_track_seqlens_cpu:
|
||||
# 1) aligned with FLA_CHUNK_SIZE-> retrieve from last_recurrent_state
|
||||
# 1) aligned with mamba_cache_chunk_size-> retrieve from last_recurrent_state
|
||||
# a) is the last position -> retrieve from last_recurrent_state
|
||||
# b) is NOT the last position -> retrieve from h
|
||||
# 2) unaligned with FLA_CHUNK_SIZE -> retrieve from h
|
||||
# 2) unaligned with mamba_cache_chunk_size -> retrieve from h
|
||||
# Currently, the math calculation only supports case 1a and 2. So for 1b, we need to add 1
|
||||
# to force the math calculation to retrieve the correct mamba state from h.
|
||||
return i + 1
|
||||
|
||||
mamba_cache_chunk_size = get_global_server_args().mamba_cache_chunk_size
|
||||
mask = req.extend_input_len >= mamba_cache_chunk_size
|
||||
track_index = req.mamba_ping_pong_track_buffer[req.mamba_next_track_idx].item()
|
||||
mamba_track_seqlen = -1
|
||||
@@ -2123,13 +2123,14 @@ class ScheduleBatch(ScheduleBatchDisaggregationDecodeMixin):
|
||||
* mamba_cache_chunk_size
|
||||
)
|
||||
|
||||
# mamba_track_fla_chunk_aligned is the aligned seqlen based on FLA_CHUNK_SIZE
|
||||
# mamba_track_fla_chunk_aligned is the aligned seqlen based on mamba_cache_chunk_size
|
||||
# If mamba_track_fla_chunk_aligned != mamba_track_seqlen_aligned, which can be true when
|
||||
# page_size > FLA_CHUNK_SIZE, we need to force the math calculation to retrieve the correct mamba state from h
|
||||
# page_size > mamba_cache_chunk_size, we need to force the math calculation to retrieve the correct mamba state from h
|
||||
# by _force_track_h()
|
||||
mamba_track_fla_chunk_aligned = (
|
||||
len(req.prefix_indices)
|
||||
+ (req.extend_input_len // FLA_CHUNK_SIZE) * FLA_CHUNK_SIZE
|
||||
+ (req.extend_input_len // mamba_cache_chunk_size)
|
||||
* mamba_cache_chunk_size
|
||||
)
|
||||
if mamba_track_fla_chunk_aligned != mamba_track_seqlen_aligned:
|
||||
# We want to track mamba_track_seqlen_aligned, and it's not the last position,
|
||||
|
||||
Reference in New Issue
Block a user