[DeepSeek v3.2][Bugfix] get_index_k_scale_buffer support cp (#18280)
This commit is contained in:
@@ -624,7 +624,7 @@ def _get_k_and_s_triton(
|
|||||||
:param page_indices: (num_pages,), int32/int64
|
:param page_indices: (num_pages,), int32/int64
|
||||||
:param seq_lens: tensor of sequence lens, int64
|
:param seq_lens: tensor of sequence lens, int64
|
||||||
:param seq_len_sum: sum of all sequence len, int32
|
:param seq_len_sum: sum of all sequence len, int32
|
||||||
:param seq_len_sum: max of sequence len, int32
|
:param max_seq_len: max of sequence len, int32
|
||||||
:param page_size: int, typically 64
|
:param page_size: int, typically 64
|
||||||
:param index_head_dim: int, typically 128
|
:param index_head_dim: int, typically 128
|
||||||
:return: tuple of (k_out, s_out) where
|
:return: tuple of (k_out, s_out) where
|
||||||
|
|||||||
@@ -97,6 +97,11 @@ class BaseIndexerMetadata(ABC):
|
|||||||
Return: seq lens for each batch.
|
Return: seq lens for each batch.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
def get_indexer_seq_len(self) -> torch.Tensor:
|
||||||
|
"""
|
||||||
|
Return: seq lens for each batch.
|
||||||
|
"""
|
||||||
|
|
||||||
def get_nsa_extend_len_cpu(self) -> List[int]:
|
def get_nsa_extend_len_cpu(self) -> List[int]:
|
||||||
"""
|
"""
|
||||||
Return: extend seq lens for each batch.
|
Return: extend seq lens for each batch.
|
||||||
@@ -538,11 +543,12 @@ class Indexer(MultiPlatformOp):
|
|||||||
|
|
||||||
ks, ke = metadata.get_indexer_kvcache_range()
|
ks, ke = metadata.get_indexer_kvcache_range()
|
||||||
|
|
||||||
seq_len_sum = forward_batch.seq_lens_sum
|
indexer_seq_lens_cpu = metadata.get_indexer_seq_len_cpu()
|
||||||
max_seq_len = torch.max(forward_batch.seq_lens_cpu).item()
|
seq_len_sum = torch.sum(indexer_seq_lens_cpu).item()
|
||||||
|
max_seq_len = torch.max(indexer_seq_lens_cpu).item()
|
||||||
k_fp8, k_scale = forward_batch.token_to_kv_pool.get_index_k_scale_buffer(
|
k_fp8, k_scale = forward_batch.token_to_kv_pool.get_index_k_scale_buffer(
|
||||||
layer_id,
|
layer_id,
|
||||||
forward_batch.seq_lens,
|
metadata.get_indexer_seq_len(),
|
||||||
block_tables,
|
block_tables,
|
||||||
seq_len_sum,
|
seq_len_sum,
|
||||||
max_seq_len,
|
max_seq_len,
|
||||||
|
|||||||
@@ -138,6 +138,8 @@ class NSAMetadata:
|
|||||||
indexer_k_start_end: Optional[Tuple[torch.Tensor, torch.Tensor]] = None
|
indexer_k_start_end: Optional[Tuple[torch.Tensor, torch.Tensor]] = None
|
||||||
# seq lens for each batch.
|
# seq lens for each batch.
|
||||||
indexer_seq_lens_cpu: Optional[torch.Tensor] = None
|
indexer_seq_lens_cpu: Optional[torch.Tensor] = None
|
||||||
|
# seq lens for each batch.
|
||||||
|
indexer_seq_lens: Optional[torch.Tensor] = None
|
||||||
# batch index for each token.
|
# batch index for each token.
|
||||||
token_to_batch_idx: Optional[torch.Tensor] = None
|
token_to_batch_idx: Optional[torch.Tensor] = None
|
||||||
|
|
||||||
@@ -194,6 +196,9 @@ class NSAIndexerMetadata(BaseIndexerMetadata):
|
|||||||
def get_indexer_kvcache_range(self) -> Tuple[torch.Tensor, torch.Tensor]:
|
def get_indexer_kvcache_range(self) -> Tuple[torch.Tensor, torch.Tensor]:
|
||||||
return self.attn_metadata.indexer_k_start_end
|
return self.attn_metadata.indexer_k_start_end
|
||||||
|
|
||||||
|
def get_indexer_seq_len(self) -> torch.Tensor:
|
||||||
|
return self.attn_metadata.indexer_seq_lens
|
||||||
|
|
||||||
def get_indexer_seq_len_cpu(self) -> torch.Tensor:
|
def get_indexer_seq_len_cpu(self) -> torch.Tensor:
|
||||||
return self.attn_metadata.indexer_seq_lens_cpu
|
return self.attn_metadata.indexer_seq_lens_cpu
|
||||||
|
|
||||||
@@ -404,6 +409,7 @@ class NativeSparseAttnBackend(
|
|||||||
bs_idx_cpu = None
|
bs_idx_cpu = None
|
||||||
# seq_len_cpu of selected sequences
|
# seq_len_cpu of selected sequences
|
||||||
indexer_seq_lens_cpu = forward_batch.seq_lens_cpu
|
indexer_seq_lens_cpu = forward_batch.seq_lens_cpu
|
||||||
|
indexer_seq_lens = forward_batch.seq_lens
|
||||||
|
|
||||||
if forward_batch.forward_mode.is_decode_or_idle():
|
if forward_batch.forward_mode.is_decode_or_idle():
|
||||||
extend_seq_lens_cpu = [1] * batch_size
|
extend_seq_lens_cpu = [1] * batch_size
|
||||||
@@ -504,6 +510,7 @@ class NativeSparseAttnBackend(
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
indexer_seq_lens_cpu = indexer_seq_lens_cpu[bs_idx_cpu]
|
indexer_seq_lens_cpu = indexer_seq_lens_cpu[bs_idx_cpu]
|
||||||
|
indexer_seq_lens = indexer_seq_lens[bs_idx]
|
||||||
cache_seqlens_int32 = cache_seqlens_int32[bs_idx]
|
cache_seqlens_int32 = cache_seqlens_int32[bs_idx]
|
||||||
cu_seqlens_k = compute_cu_seqlens(cache_seqlens_int32)
|
cu_seqlens_k = compute_cu_seqlens(cache_seqlens_int32)
|
||||||
max_seqlen_k = (
|
max_seqlen_k = (
|
||||||
@@ -641,6 +648,7 @@ class NativeSparseAttnBackend(
|
|||||||
topk_indices_offset=topk_indices_offset,
|
topk_indices_offset=topk_indices_offset,
|
||||||
indexer_k_start_end=indexer_k_start_end,
|
indexer_k_start_end=indexer_k_start_end,
|
||||||
indexer_seq_lens_cpu=indexer_seq_lens_cpu,
|
indexer_seq_lens_cpu=indexer_seq_lens_cpu,
|
||||||
|
indexer_seq_lens=indexer_seq_lens,
|
||||||
token_to_batch_idx=token_to_batch_idx,
|
token_to_batch_idx=token_to_batch_idx,
|
||||||
)
|
)
|
||||||
self.forward_metadata = metadata
|
self.forward_metadata = metadata
|
||||||
|
|||||||
@@ -132,6 +132,10 @@ class MockIndexerMetadata(BaseIndexerMetadata):
|
|||||||
"""Return: seq lens for each batch."""
|
"""Return: seq lens for each batch."""
|
||||||
return torch.tensor(self.seq_lens, dtype=torch.int32, device="cpu")
|
return torch.tensor(self.seq_lens, dtype=torch.int32, device="cpu")
|
||||||
|
|
||||||
|
def get_indexer_seq_len(self) -> torch.Tensor:
|
||||||
|
"""Return: seq lens for each batch."""
|
||||||
|
return torch.tensor(self.seq_lens, dtype=torch.int32, device=self.device)
|
||||||
|
|
||||||
def get_nsa_extend_len_cpu(self) -> List[int]:
|
def get_nsa_extend_len_cpu(self) -> List[int]:
|
||||||
"""
|
"""
|
||||||
Return: extend seq lens for each batch.
|
Return: extend seq lens for each batch.
|
||||||
|
|||||||
Reference in New Issue
Block a user