Add FP4 Indexer for DeepSeek V4 on SM120 (#27059)
This commit is contained in:
@@ -650,6 +650,11 @@ class DeepseekV4AttnBackend(
|
||||
page_size=self.page_size,
|
||||
page_table=core_attn_metadata.page_table,
|
||||
c4_seq_lens=core_attn_metadata.c4_topk_lengths_raw,
|
||||
# The SM120 FP4 kernel schedules split_kv=128, while the generic
|
||||
# JIT metadata planner encodes split_kv=256.
|
||||
force_deep_gemm_metadata=(
|
||||
self.enable_deepseek_v4_fp4_indexer and _is_sm120
|
||||
),
|
||||
use_prefill_cuda_graph=use_prefill_cuda_graph,
|
||||
)
|
||||
|
||||
|
||||
@@ -112,6 +112,7 @@ class PagedIndexerMetadata:
|
||||
page_size: int
|
||||
page_table: torch.Tensor
|
||||
c4_seq_lens: torch.Tensor
|
||||
force_deep_gemm_metadata: bool = False
|
||||
use_prefill_cuda_graph: bool = False
|
||||
deep_gemm_metadata: Any = field(init=False, repr=False)
|
||||
topk_metadata: torch.Tensor = field(init=False, repr=False)
|
||||
@@ -124,12 +125,12 @@ class PagedIndexerMetadata:
|
||||
envs.SGLANG_FP8_PAGED_MQA_LOGITS_TORCH.get()
|
||||
or is_xpu()
|
||||
or envs.SGLANG_OPT_USE_AITER_INDEXER.get()
|
||||
):
|
||||
) and not self.force_deep_gemm_metadata:
|
||||
self.deep_gemm_metadata = None
|
||||
else:
|
||||
import deep_gemm
|
||||
|
||||
use_jit_indexer = (
|
||||
use_jit_indexer = not self.force_deep_gemm_metadata and (
|
||||
envs.SGLANG_OPT_USE_JIT_INDEXER_METADATA.get()
|
||||
or self.c4_seq_lens.numel() > _LARGE_INDEXER_QUERY_THRESHOLD
|
||||
)
|
||||
@@ -183,7 +184,11 @@ class PagedIndexerMetadata:
|
||||
copy_metadata(
|
||||
src=other,
|
||||
dst=self,
|
||||
check_eq_fields=["page_size", "use_prefill_cuda_graph"],
|
||||
check_eq_fields=[
|
||||
"page_size",
|
||||
"force_deep_gemm_metadata",
|
||||
"use_prefill_cuda_graph",
|
||||
],
|
||||
copy_fields=copy_fields,
|
||||
assign_fields=assign_fields,
|
||||
)
|
||||
|
||||
@@ -7263,9 +7263,11 @@ class ServerArgs:
|
||||
"Debug mode for CUDA graph is enabled via breakable CUDA graph. "
|
||||
"All operations will run eagerly through the graph capture/replay path."
|
||||
)
|
||||
if self.enable_deepseek_v4_fp4_indexer and not is_sm100_supported():
|
||||
if self.enable_deepseek_v4_fp4_indexer and not (
|
||||
is_sm100_supported() or is_sm120_supported()
|
||||
):
|
||||
raise ValueError(
|
||||
"--enable-deepseek-v4-fp4-indexer requires SM100 GPUs with "
|
||||
"--enable-deepseek-v4-fp4-indexer requires SM100 or SM120 GPUs with "
|
||||
"DeepGEMM FP4 indexer support."
|
||||
)
|
||||
# FP8 W_o GEMM needs DeepGEMM JIT. Enable exactly where the runtime can run
|
||||
|
||||
Reference in New Issue
Block a user