Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Fable 5
parent
a5a71c6c26
commit
1a35440c4a
@@ -43,6 +43,26 @@ del _mod, _fn
|
|||||||
__all__ = []
|
__all__ = []
|
||||||
|
|
||||||
|
|
||||||
|
# Generic attention kernels migrated in Phase 2.5 (RFC #29630).
|
||||||
|
for _mod, _fn in [
|
||||||
|
("utils", "mla_quantize_and_rope_for_fp8"),
|
||||||
|
("utils", "launch_reshape_and_cache_flash"),
|
||||||
|
("utils", "launch_reshape_and_cache_shuffle_5d"),
|
||||||
|
("flash_mla_sm120", "flash_mla_with_kvcache_sm120"),
|
||||||
|
("dcp_kernels", "create_dcp_kv_indices"),
|
||||||
|
("dcp_kernels", "correct_attn_out"),
|
||||||
|
("pa_page_table", "_build_pa_page_table"),
|
||||||
|
("nsa_triton_decode", "triton_sparse_attn_decode"),
|
||||||
|
]:
|
||||||
|
register_kernel(
|
||||||
|
KernelSpec(
|
||||||
|
op=f"attention.{_fn.lstrip('_')}",
|
||||||
|
backend=KernelBackend.TRITON,
|
||||||
|
target=f"sglang.kernels.ops.attention.{_mod}:{_fn}",
|
||||||
|
)
|
||||||
|
)
|
||||||
|
del _mod, _fn
|
||||||
|
|
||||||
# RoPE / QK-norm fusion kernels migrated from srt/layers top-level strays
|
# RoPE / QK-norm fusion kernels migrated from srt/layers top-level strays
|
||||||
# (RFC #29630, Phase 2.5); registered for inventory.
|
# (RFC #29630, Phase 2.5); registered for inventory.
|
||||||
for _mod, _fn in [
|
for _mod, _fn in [
|
||||||
|
|||||||
+1
-1
@@ -235,7 +235,7 @@ def flash_mla_with_kvcache_sm120(**kwargs):
|
|||||||
)
|
)
|
||||||
|
|
||||||
if _sm120_default_backend == "triton":
|
if _sm120_default_backend == "triton":
|
||||||
from sglang.srt.layers.attention.flash_mla_sm120_triton import (
|
from sglang.kernels.ops.attention.flash_mla_sm120_triton import (
|
||||||
flash_mla_sparse_decode_triton,
|
flash_mla_sparse_decode_triton,
|
||||||
)
|
)
|
||||||
|
|
||||||
+1
-1
@@ -9,7 +9,7 @@ from typing import Optional, Tuple
|
|||||||
|
|
||||||
import torch
|
import torch
|
||||||
|
|
||||||
from sglang.srt.layers.attention.nsa.triton_decode.triton_mla_kernels_decode_optimized import (
|
from sglang.kernels.ops.attention.nsa_triton_decode.triton_mla_kernels_decode_optimized import (
|
||||||
triton_sparse_attn_decode,
|
triton_sparse_attn_decode,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -0,0 +1,98 @@
|
|||||||
|
"""Paged-attention page-table builder, migrated from
|
||||||
|
``sglang.srt.layers.attention.flashattention_backend`` (RFC #29630, Phase 2.5).
|
||||||
|
"""
|
||||||
|
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
import torch
|
||||||
|
import triton
|
||||||
|
import triton.language as tl
|
||||||
|
|
||||||
|
|
||||||
|
@triton.jit
|
||||||
|
def _build_pa_page_table_kernel(
|
||||||
|
req_to_token_ptr,
|
||||||
|
req_pool_indices_ptr,
|
||||||
|
seq_lens_ptr,
|
||||||
|
prefill_lens_ptr,
|
||||||
|
dst_page_table_ptr,
|
||||||
|
kv_lens_ptr,
|
||||||
|
window_size: tl.constexpr,
|
||||||
|
req_to_token_stride,
|
||||||
|
dst_stride,
|
||||||
|
BLOCK_SIZE: tl.constexpr,
|
||||||
|
):
|
||||||
|
"""Build PA-SWA page_table directly from req_to_token.
|
||||||
|
|
||||||
|
For each request, dst row = [0..prefill_len) ∪ [decode_start..seq_len).
|
||||||
|
decode_start = max(prefill_len, seq_len - window_size)
|
||||||
|
|
||||||
|
prefill_lens_ptr is the full pool-sized buffer, prefill_len is loaded
|
||||||
|
via indirect indexing using req_idx.
|
||||||
|
"""
|
||||||
|
bid = tl.program_id(0)
|
||||||
|
req_idx = tl.load(req_pool_indices_ptr + bid)
|
||||||
|
sl = tl.load(seq_lens_ptr + bid).to(tl.int32)
|
||||||
|
pf = tl.load(prefill_lens_ptr + req_idx).to(tl.int32)
|
||||||
|
|
||||||
|
decode_start = tl.maximum(pf, sl - window_size)
|
||||||
|
gap = tl.where(decode_start > pf, decode_start - pf, 0)
|
||||||
|
kv_len = sl - gap
|
||||||
|
|
||||||
|
tl.store(kv_lens_ptr + bid, kv_len)
|
||||||
|
|
||||||
|
src_base = req_idx * req_to_token_stride
|
||||||
|
dst_base = bid * dst_stride
|
||||||
|
|
||||||
|
for start in tl.range(0, kv_len, BLOCK_SIZE):
|
||||||
|
offs = start + tl.arange(0, BLOCK_SIZE)
|
||||||
|
mask = offs < kv_len
|
||||||
|
pos = tl.where(offs < pf, offs, offs + gap)
|
||||||
|
kv_loc = tl.load(
|
||||||
|
req_to_token_ptr + src_base + pos,
|
||||||
|
mask=mask,
|
||||||
|
other=0,
|
||||||
|
)
|
||||||
|
tl.store(dst_page_table_ptr + dst_base + offs, kv_loc.to(tl.int32), mask=mask)
|
||||||
|
|
||||||
|
|
||||||
|
def _build_pa_page_table(
|
||||||
|
req_to_token: torch.Tensor,
|
||||||
|
req_pool_indices: torch.Tensor,
|
||||||
|
seq_lens: torch.Tensor,
|
||||||
|
prefill_lens: torch.Tensor,
|
||||||
|
window_size: int,
|
||||||
|
bs: int,
|
||||||
|
pa_max_len: int,
|
||||||
|
device: torch.device,
|
||||||
|
dst_page_table: Optional[torch.Tensor] = None,
|
||||||
|
dst_kv_lens: Optional[torch.Tensor] = None,
|
||||||
|
):
|
||||||
|
"""Build prefill-aware page_table from req_to_token.
|
||||||
|
|
||||||
|
When dst_page_table/dst_kv_lens are None, allocates new tensors (non-CUDA-graph).
|
||||||
|
When provided, writes in-place into existing buffers (CUDA-graph replay).
|
||||||
|
|
||||||
|
prefill_lens is the full pool-sized buffer; the kernel indexes it via
|
||||||
|
req_pool_indices values (indirect indexing, avoids external gather).
|
||||||
|
|
||||||
|
Returns (page_table, kv_lens).
|
||||||
|
"""
|
||||||
|
if dst_page_table is None:
|
||||||
|
dst_page_table = torch.zeros(bs, pa_max_len, dtype=torch.int32, device=device)
|
||||||
|
if dst_kv_lens is None:
|
||||||
|
dst_kv_lens = torch.empty(bs, dtype=torch.int32, device=device)
|
||||||
|
if bs > 0 and pa_max_len > 0:
|
||||||
|
_build_pa_page_table_kernel[(bs,)](
|
||||||
|
req_to_token,
|
||||||
|
req_pool_indices.contiguous(),
|
||||||
|
seq_lens.to(torch.int32),
|
||||||
|
prefill_lens,
|
||||||
|
dst_page_table,
|
||||||
|
dst_kv_lens,
|
||||||
|
window_size,
|
||||||
|
req_to_token.stride(0),
|
||||||
|
dst_page_table.stride(0),
|
||||||
|
BLOCK_SIZE=256,
|
||||||
|
)
|
||||||
|
return dst_page_table, dst_kv_lens
|
||||||
@@ -14,17 +14,17 @@ from typing import TYPE_CHECKING, Optional
|
|||||||
import torch
|
import torch
|
||||||
import triton
|
import triton
|
||||||
|
|
||||||
from sglang.kernels.ops.kvcache.aiter_unified_attention import (
|
from sglang.kernels.ops.attention.utils import (
|
||||||
scatter_ragged_to_page_table_kernel,
|
|
||||||
scatter_req_to_token_to_page_table_kernel,
|
|
||||||
)
|
|
||||||
from sglang.srt.layers.attention.base_attn_backend import AttentionBackend
|
|
||||||
from sglang.srt.layers.attention.utils import (
|
|
||||||
assert_buffer_fits,
|
assert_buffer_fits,
|
||||||
create_flashinfer_kv_indices_triton,
|
create_flashinfer_kv_indices_triton,
|
||||||
create_flashmla_kv_indices_triton,
|
create_flashmla_kv_indices_triton,
|
||||||
get_num_kv_index_blocks_flashmla,
|
get_num_kv_index_blocks_flashmla,
|
||||||
)
|
)
|
||||||
|
from sglang.kernels.ops.kvcache.aiter_unified_attention import (
|
||||||
|
scatter_ragged_to_page_table_kernel,
|
||||||
|
scatter_req_to_token_to_page_table_kernel,
|
||||||
|
)
|
||||||
|
from sglang.srt.layers.attention.base_attn_backend import AttentionBackend
|
||||||
from sglang.srt.layers.dp_attention import (
|
from sglang.srt.layers.dp_attention import (
|
||||||
is_dp_attention_enabled,
|
is_dp_attention_enabled,
|
||||||
)
|
)
|
||||||
@@ -60,16 +60,16 @@ except ImportError:
|
|||||||
"aiter is AMD specific kernel library. Please make sure aiter is installed on your AMD device."
|
"aiter is AMD specific kernel library. Please make sure aiter is installed on your AMD device."
|
||||||
)
|
)
|
||||||
|
|
||||||
|
from sglang.kernels.ops.attention.utils import (
|
||||||
|
launch_reshape_and_cache_flash,
|
||||||
|
pad_sequence_with_mask,
|
||||||
|
)
|
||||||
from sglang.kernels.ops.quantization.fp8_kernel import fp8_dtype
|
from sglang.kernels.ops.quantization.fp8_kernel import fp8_dtype
|
||||||
from sglang.srt.configs.model_config import AttentionArch
|
from sglang.srt.configs.model_config import AttentionArch
|
||||||
from sglang.srt.layers.attention.aiter_utils import (
|
from sglang.srt.layers.attention.aiter_utils import (
|
||||||
forward_decode_vectorized_5d,
|
forward_decode_vectorized_5d,
|
||||||
forward_extend_vectorized_5d,
|
forward_extend_vectorized_5d,
|
||||||
)
|
)
|
||||||
from sglang.srt.layers.attention.utils import (
|
|
||||||
launch_reshape_and_cache_flash,
|
|
||||||
pad_sequence_with_mask,
|
|
||||||
)
|
|
||||||
from sglang.srt.mem_cache.memory_pool import KVWriteLoc
|
from sglang.srt.mem_cache.memory_pool import KVWriteLoc
|
||||||
from sglang.srt.mem_cache.swa_memory_pool import SWAKVPool
|
from sglang.srt.mem_cache.swa_memory_pool import SWAKVPool
|
||||||
from sglang.srt.utils import get_bool_env_var
|
from sglang.srt.utils import get_bool_env_var
|
||||||
|
|||||||
@@ -33,8 +33,8 @@ except ImportError: # pragma: no cover - import-time guard mirrors aiter_backen
|
|||||||
pa_decode_gluon = None
|
pa_decode_gluon = None
|
||||||
get_recommended_splits = None
|
get_recommended_splits = None
|
||||||
|
|
||||||
|
from sglang.kernels.ops.attention.utils import launch_gather_shuffle_5d_to_linear
|
||||||
from sglang.kernels.ops.quantization.fp8_kernel import fp8_dtype
|
from sglang.kernels.ops.quantization.fp8_kernel import fp8_dtype
|
||||||
from sglang.srt.layers.attention.utils import launch_gather_shuffle_5d_to_linear
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
from sglang.srt.layers.attention.aiter_backend import AiterAttnBackend
|
from sglang.srt.layers.attention.aiter_backend import AiterAttnBackend
|
||||||
|
|||||||
@@ -13,11 +13,11 @@ from typing import TYPE_CHECKING, Optional, Union
|
|||||||
import torch
|
import torch
|
||||||
import triton
|
import triton
|
||||||
|
|
||||||
from sglang.srt.layers.attention.flashinfer_mla_backend import FlashInferMLAAttnBackend
|
from sglang.kernels.ops.attention.utils import (
|
||||||
from sglang.srt.layers.attention.utils import (
|
|
||||||
create_flashmla_kv_indices_triton,
|
create_flashmla_kv_indices_triton,
|
||||||
get_num_kv_index_blocks_flashmla,
|
get_num_kv_index_blocks_flashmla,
|
||||||
)
|
)
|
||||||
|
from sglang.srt.layers.attention.flashinfer_mla_backend import FlashInferMLAAttnBackend
|
||||||
from sglang.srt.model_executor.forward_batch_info import ForwardBatch
|
from sglang.srt.model_executor.forward_batch_info import ForwardBatch
|
||||||
from sglang.srt.utils import is_cuda
|
from sglang.srt.utils import is_cuda
|
||||||
|
|
||||||
|
|||||||
@@ -1671,7 +1671,7 @@ class DeepseekV4AttnBackend(
|
|||||||
)
|
)
|
||||||
|
|
||||||
if _is_sm120:
|
if _is_sm120:
|
||||||
from sglang.srt.layers.attention.flash_mla_sm120 import (
|
from sglang.kernels.ops.attention.flash_mla_sm120 import (
|
||||||
flash_mla_with_kvcache_sm120,
|
flash_mla_with_kvcache_sm120,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ from typing import TYPE_CHECKING, Optional
|
|||||||
|
|
||||||
import torch
|
import torch
|
||||||
|
|
||||||
|
from sglang.kernels.ops.attention.utils import seqlens_expand_triton
|
||||||
from sglang.srt.layers.attention.dsa.utils import compute_dsa_seqlens
|
from sglang.srt.layers.attention.dsa.utils import compute_dsa_seqlens
|
||||||
from sglang.srt.layers.attention.utils import seqlens_expand_triton
|
|
||||||
from sglang.srt.utils import is_cuda, is_hip
|
from sglang.srt.utils import is_cuda, is_hip
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
if TYPE_CHECKING:
|
||||||
|
|||||||
@@ -18,6 +18,11 @@ from sglang.srt.configs.model_config import get_dsa_index_topk, is_deepseek_dsa
|
|||||||
from sglang.srt.runtime_context import get_parallel
|
from sglang.srt.runtime_context import get_parallel
|
||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
from sglang.kernels.ops.attention.utils import (
|
||||||
|
concat_mla_absorb_q_general,
|
||||||
|
mla_quantize_and_rope_for_fp8,
|
||||||
|
seqlens_expand_triton,
|
||||||
|
)
|
||||||
from sglang.srt.environ import envs
|
from sglang.srt.environ import envs
|
||||||
from sglang.srt.layers.attention.base_attn_backend import AttentionBackend
|
from sglang.srt.layers.attention.base_attn_backend import AttentionBackend
|
||||||
from sglang.srt.layers.attention.dsa.dequant_k_cache import dequantize_k_cache_paged
|
from sglang.srt.layers.attention.dsa.dequant_k_cache import dequantize_k_cache_paged
|
||||||
@@ -47,11 +52,6 @@ from sglang.srt.layers.attention.dsa.utils import (
|
|||||||
pad_dsa_cache_seqlens,
|
pad_dsa_cache_seqlens,
|
||||||
should_use_dsa_fused_topk,
|
should_use_dsa_fused_topk,
|
||||||
)
|
)
|
||||||
from sglang.srt.layers.attention.utils import (
|
|
||||||
concat_mla_absorb_q_general,
|
|
||||||
mla_quantize_and_rope_for_fp8,
|
|
||||||
seqlens_expand_triton,
|
|
||||||
)
|
|
||||||
from sglang.srt.layers.utils.cp_utils import (
|
from sglang.srt.layers.utils.cp_utils import (
|
||||||
cp_all_gather_rerange_output,
|
cp_all_gather_rerange_output,
|
||||||
cp_split_and_rebuild_position,
|
cp_split_and_rebuild_position,
|
||||||
|
|||||||
@@ -5,19 +5,18 @@ from typing import TYPE_CHECKING, Optional
|
|||||||
|
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import torch
|
import torch
|
||||||
import triton
|
|
||||||
import triton.language as tl
|
|
||||||
|
|
||||||
from sglang.kernels.ops.attention.metadata import (
|
from sglang.kernels.ops.attention.metadata import (
|
||||||
normal_decode_set_metadata,
|
normal_decode_set_metadata,
|
||||||
prepare_swa_spec_page_table_triton,
|
prepare_swa_spec_page_table_triton,
|
||||||
)
|
)
|
||||||
|
from sglang.kernels.ops.attention.pa_page_table import _build_pa_page_table
|
||||||
|
from sglang.kernels.ops.attention.utils import assert_buffer_fits
|
||||||
from sglang.kernels.ops.kvcache.trtllm_mha_page_table import (
|
from sglang.kernels.ops.kvcache.trtllm_mha_page_table import (
|
||||||
build_trtllm_mha_page_table,
|
build_trtllm_mha_page_table,
|
||||||
)
|
)
|
||||||
from sglang.srt.configs.model_config import AttentionArch
|
from sglang.srt.configs.model_config import AttentionArch
|
||||||
from sglang.srt.layers.attention.base_attn_backend import AttentionBackend
|
from sglang.srt.layers.attention.base_attn_backend import AttentionBackend
|
||||||
from sglang.srt.layers.attention.utils import assert_buffer_fits
|
|
||||||
from sglang.srt.layers.cp.base import CPAttentionBackendKind, get_cp_strategy
|
from sglang.srt.layers.cp.base import CPAttentionBackendKind, get_cp_strategy
|
||||||
from sglang.srt.layers.cp.utils import is_cp_v2_active
|
from sglang.srt.layers.cp.utils import is_cp_v2_active
|
||||||
from sglang.srt.layers.radix_attention import AttentionType
|
from sglang.srt.layers.radix_attention import AttentionType
|
||||||
@@ -50,95 +49,6 @@ def _should_disable_scheduler_metadata_precompute(server_args) -> bool:
|
|||||||
return bool(server_args.enable_prefill_cp or server_args.enable_dp_attention)
|
return bool(server_args.enable_prefill_cp or server_args.enable_dp_attention)
|
||||||
|
|
||||||
|
|
||||||
@triton.jit
|
|
||||||
def _build_pa_page_table_kernel(
|
|
||||||
req_to_token_ptr,
|
|
||||||
req_pool_indices_ptr,
|
|
||||||
seq_lens_ptr,
|
|
||||||
prefill_lens_ptr,
|
|
||||||
dst_page_table_ptr,
|
|
||||||
kv_lens_ptr,
|
|
||||||
window_size: tl.constexpr,
|
|
||||||
req_to_token_stride,
|
|
||||||
dst_stride,
|
|
||||||
BLOCK_SIZE: tl.constexpr,
|
|
||||||
):
|
|
||||||
"""Build PA-SWA page_table directly from req_to_token.
|
|
||||||
|
|
||||||
For each request, dst row = [0..prefill_len) ∪ [decode_start..seq_len).
|
|
||||||
decode_start = max(prefill_len, seq_len - window_size)
|
|
||||||
|
|
||||||
prefill_lens_ptr is the full pool-sized buffer, prefill_len is loaded
|
|
||||||
via indirect indexing using req_idx.
|
|
||||||
"""
|
|
||||||
bid = tl.program_id(0)
|
|
||||||
req_idx = tl.load(req_pool_indices_ptr + bid)
|
|
||||||
sl = tl.load(seq_lens_ptr + bid).to(tl.int32)
|
|
||||||
pf = tl.load(prefill_lens_ptr + req_idx).to(tl.int32)
|
|
||||||
|
|
||||||
decode_start = tl.maximum(pf, sl - window_size)
|
|
||||||
gap = tl.where(decode_start > pf, decode_start - pf, 0)
|
|
||||||
kv_len = sl - gap
|
|
||||||
|
|
||||||
tl.store(kv_lens_ptr + bid, kv_len)
|
|
||||||
|
|
||||||
src_base = req_idx * req_to_token_stride
|
|
||||||
dst_base = bid * dst_stride
|
|
||||||
|
|
||||||
for start in tl.range(0, kv_len, BLOCK_SIZE):
|
|
||||||
offs = start + tl.arange(0, BLOCK_SIZE)
|
|
||||||
mask = offs < kv_len
|
|
||||||
pos = tl.where(offs < pf, offs, offs + gap)
|
|
||||||
kv_loc = tl.load(
|
|
||||||
req_to_token_ptr + src_base + pos,
|
|
||||||
mask=mask,
|
|
||||||
other=0,
|
|
||||||
)
|
|
||||||
tl.store(dst_page_table_ptr + dst_base + offs, kv_loc.to(tl.int32), mask=mask)
|
|
||||||
|
|
||||||
|
|
||||||
def _build_pa_page_table(
|
|
||||||
req_to_token: torch.Tensor,
|
|
||||||
req_pool_indices: torch.Tensor,
|
|
||||||
seq_lens: torch.Tensor,
|
|
||||||
prefill_lens: torch.Tensor,
|
|
||||||
window_size: int,
|
|
||||||
bs: int,
|
|
||||||
pa_max_len: int,
|
|
||||||
device: torch.device,
|
|
||||||
dst_page_table: Optional[torch.Tensor] = None,
|
|
||||||
dst_kv_lens: Optional[torch.Tensor] = None,
|
|
||||||
):
|
|
||||||
"""Build prefill-aware page_table from req_to_token.
|
|
||||||
|
|
||||||
When dst_page_table/dst_kv_lens are None, allocates new tensors (non-CUDA-graph).
|
|
||||||
When provided, writes in-place into existing buffers (CUDA-graph replay).
|
|
||||||
|
|
||||||
prefill_lens is the full pool-sized buffer; the kernel indexes it via
|
|
||||||
req_pool_indices values (indirect indexing, avoids external gather).
|
|
||||||
|
|
||||||
Returns (page_table, kv_lens).
|
|
||||||
"""
|
|
||||||
if dst_page_table is None:
|
|
||||||
dst_page_table = torch.zeros(bs, pa_max_len, dtype=torch.int32, device=device)
|
|
||||||
if dst_kv_lens is None:
|
|
||||||
dst_kv_lens = torch.empty(bs, dtype=torch.int32, device=device)
|
|
||||||
if bs > 0 and pa_max_len > 0:
|
|
||||||
_build_pa_page_table_kernel[(bs,)](
|
|
||||||
req_to_token,
|
|
||||||
req_pool_indices.contiguous(),
|
|
||||||
seq_lens.to(torch.int32),
|
|
||||||
prefill_lens,
|
|
||||||
dst_page_table,
|
|
||||||
dst_kv_lens,
|
|
||||||
window_size,
|
|
||||||
req_to_token.stride(0),
|
|
||||||
dst_page_table.stride(0),
|
|
||||||
BLOCK_SIZE=256,
|
|
||||||
)
|
|
||||||
return dst_page_table, dst_kv_lens
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass
|
@dataclass
|
||||||
class FlashAttentionMetadata:
|
class FlashAttentionMetadata:
|
||||||
"""Metadata to be init once in the model forward pass,
|
"""Metadata to be init once in the model forward pass,
|
||||||
|
|||||||
@@ -19,13 +19,13 @@ from typing import TYPE_CHECKING, Callable, List, Optional, Union
|
|||||||
import torch
|
import torch
|
||||||
|
|
||||||
from sglang.kernel_api_logging import debug_kernel_api
|
from sglang.kernel_api_logging import debug_kernel_api
|
||||||
from sglang.srt.dllm.config import DllmConfig
|
from sglang.kernels.ops.attention.utils import (
|
||||||
from sglang.srt.environ import envs
|
|
||||||
from sglang.srt.layers.attention.base_attn_backend import AttentionBackend
|
|
||||||
from sglang.srt.layers.attention.utils import (
|
|
||||||
assert_buffer_fits,
|
assert_buffer_fits,
|
||||||
create_flashinfer_kv_indices_triton,
|
create_flashinfer_kv_indices_triton,
|
||||||
)
|
)
|
||||||
|
from sglang.srt.dllm.config import DllmConfig
|
||||||
|
from sglang.srt.environ import envs
|
||||||
|
from sglang.srt.layers.attention.base_attn_backend import AttentionBackend
|
||||||
from sglang.srt.layers.radix_attention import AttentionType
|
from sglang.srt.layers.radix_attention import AttentionType
|
||||||
from sglang.srt.mem_cache.base_swa_memory_pool import BaseSWAKVPool
|
from sglang.srt.mem_cache.base_swa_memory_pool import BaseSWAKVPool
|
||||||
from sglang.srt.mem_cache.memory_pool import KVWriteLoc
|
from sglang.srt.mem_cache.memory_pool import KVWriteLoc
|
||||||
|
|||||||
@@ -17,12 +17,12 @@ from typing import TYPE_CHECKING, Callable, Optional, Union
|
|||||||
|
|
||||||
import torch
|
import torch
|
||||||
|
|
||||||
|
from sglang.kernels.ops.attention.utils import assert_buffer_fits
|
||||||
from sglang.srt.environ import envs
|
from sglang.srt.environ import envs
|
||||||
from sglang.srt.layers.attention.base_attn_backend import AttentionBackend
|
from sglang.srt.layers.attention.base_attn_backend import AttentionBackend
|
||||||
from sglang.srt.layers.attention.flashinfer_backend import (
|
from sglang.srt.layers.attention.flashinfer_backend import (
|
||||||
create_flashinfer_kv_indices_triton,
|
create_flashinfer_kv_indices_triton,
|
||||||
)
|
)
|
||||||
from sglang.srt.layers.attention.utils import assert_buffer_fits
|
|
||||||
from sglang.srt.layers.dcp import (
|
from sglang.srt.layers.dcp import (
|
||||||
DecodeContextParallelMetadata,
|
DecodeContextParallelMetadata,
|
||||||
update_local_kv_lens_for_dcp,
|
update_local_kv_lens_for_dcp,
|
||||||
|
|||||||
@@ -12,12 +12,12 @@ import torch
|
|||||||
import triton
|
import triton
|
||||||
from sgl_kernel.flash_mla import flash_mla_with_kvcache, get_mla_metadata
|
from sgl_kernel.flash_mla import flash_mla_with_kvcache, get_mla_metadata
|
||||||
|
|
||||||
from sglang.kernels.ops.quantization.fp8_kernel import scaled_fp8_quant
|
from sglang.kernels.ops.attention.utils import (
|
||||||
from sglang.srt.layers.attention.flashinfer_mla_backend import FlashInferMLAAttnBackend
|
|
||||||
from sglang.srt.layers.attention.utils import (
|
|
||||||
create_flashmla_kv_indices_triton,
|
create_flashmla_kv_indices_triton,
|
||||||
get_num_kv_index_blocks_flashmla,
|
get_num_kv_index_blocks_flashmla,
|
||||||
)
|
)
|
||||||
|
from sglang.kernels.ops.quantization.fp8_kernel import scaled_fp8_quant
|
||||||
|
from sglang.srt.layers.attention.flashinfer_mla_backend import FlashInferMLAAttnBackend
|
||||||
from sglang.srt.model_executor.forward_batch_info import ForwardBatch, ForwardMode
|
from sglang.srt.model_executor.forward_batch_info import ForwardBatch, ForwardMode
|
||||||
from sglang.srt.runtime_context import get_parallel
|
from sglang.srt.runtime_context import get_parallel
|
||||||
|
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ def flash_mla_with_kvcache_entrypoint(backend: str, **kwargs):
|
|||||||
return dpsk_v4_fp8_attention_fwd(**kwargs)
|
return dpsk_v4_fp8_attention_fwd(**kwargs)
|
||||||
|
|
||||||
if backend == "triton":
|
if backend == "triton":
|
||||||
from sglang.srt.layers.attention.nsa.triton_decode import (
|
from sglang.kernels.ops.attention.nsa_triton_decode import (
|
||||||
triton_fp8_attention_fwd,
|
triton_fp8_attention_fwd,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ from typing import TYPE_CHECKING, Optional
|
|||||||
|
|
||||||
import torch
|
import torch
|
||||||
|
|
||||||
|
from sglang.kernels.ops.attention.utils import canonicalize_stride
|
||||||
from sglang.kernels.ops.kvcache.trtllm_fp8_kv_kernel import (
|
from sglang.kernels.ops.kvcache.trtllm_fp8_kv_kernel import (
|
||||||
fused_fp8_set_kv_buffer,
|
fused_fp8_set_kv_buffer,
|
||||||
)
|
)
|
||||||
@@ -27,7 +28,6 @@ from sglang.srt.layers.attention.flashinfer_backend import (
|
|||||||
FlashInferAttnBackend,
|
FlashInferAttnBackend,
|
||||||
FlashInferMultiStepDraftBackend,
|
FlashInferMultiStepDraftBackend,
|
||||||
)
|
)
|
||||||
from sglang.srt.layers.attention.utils import canonicalize_stride
|
|
||||||
from sglang.srt.mem_cache.memory_pool import KVWriteLoc
|
from sglang.srt.mem_cache.memory_pool import KVWriteLoc
|
||||||
from sglang.srt.mem_cache.swa_memory_pool import SWAKVPool
|
from sglang.srt.mem_cache.swa_memory_pool import SWAKVPool
|
||||||
from sglang.srt.model_executor.forward_batch_info import ForwardBatch, ForwardMode
|
from sglang.srt.model_executor.forward_batch_info import ForwardBatch, ForwardMode
|
||||||
|
|||||||
@@ -19,6 +19,10 @@ from sglang.kernels.ops.attention.pad import (
|
|||||||
from sglang.kernels.ops.attention.pad import (
|
from sglang.kernels.ops.attention.pad import (
|
||||||
unpad_draft_extend_output as unpad_draft_extend_output_triton,
|
unpad_draft_extend_output as unpad_draft_extend_output_triton,
|
||||||
)
|
)
|
||||||
|
from sglang.kernels.ops.attention.utils import (
|
||||||
|
concat_mla_absorb_q_general,
|
||||||
|
mla_quantize_and_rope_for_fp8,
|
||||||
|
)
|
||||||
from sglang.kernels.ops.kvcache.kv_indices import (
|
from sglang.kernels.ops.kvcache.kv_indices import (
|
||||||
create_flashmla_kv_indices_triton,
|
create_flashmla_kv_indices_triton,
|
||||||
get_num_kv_index_blocks_flashmla,
|
get_num_kv_index_blocks_flashmla,
|
||||||
@@ -30,10 +34,6 @@ from sglang.srt.layers.attention.flashinfer_mla_backend import (
|
|||||||
FlashInferMLAAttnBackend,
|
FlashInferMLAAttnBackend,
|
||||||
FlashInferMLAMultiStepDraftBackend,
|
FlashInferMLAMultiStepDraftBackend,
|
||||||
)
|
)
|
||||||
from sglang.srt.layers.attention.utils import (
|
|
||||||
concat_mla_absorb_q_general,
|
|
||||||
mla_quantize_and_rope_for_fp8,
|
|
||||||
)
|
|
||||||
from sglang.srt.model_executor.forward_batch_info import ForwardBatch, ForwardMode
|
from sglang.srt.model_executor.forward_batch_info import ForwardBatch, ForwardMode
|
||||||
from sglang.srt.model_executor.runner_backend_utils.tc_piecewise_cuda_graph import (
|
from sglang.srt.model_executor.runner_backend_utils.tc_piecewise_cuda_graph import (
|
||||||
is_in_tc_piecewise_cuda_graph,
|
is_in_tc_piecewise_cuda_graph,
|
||||||
|
|||||||
@@ -29,6 +29,9 @@ Package-internal helpers (the @triton.jit kernels, ``CPTritonContext``,
|
|||||||
out-of-tree callers; in-tree code should use ``get_parallel().dcp_enabled`` and
|
out-of-tree callers; in-tree code should use ``get_parallel().dcp_enabled`` and
|
||||||
``get_parallel().attn_dcp_*``."""
|
``get_parallel().attn_dcp_*``."""
|
||||||
|
|
||||||
|
from sglang.kernels.ops.attention.dcp_kernels import (
|
||||||
|
create_triton_kv_indices_for_dcp_triton,
|
||||||
|
)
|
||||||
from sglang.srt.layers.dcp.comm import (
|
from sglang.srt.layers.dcp.comm import (
|
||||||
all_gather_kv_cache_for_dcp,
|
all_gather_kv_cache_for_dcp,
|
||||||
all_gather_kv_cache_for_mha_chunk_extend,
|
all_gather_kv_cache_for_mha_chunk_extend,
|
||||||
@@ -41,7 +44,6 @@ from sglang.srt.layers.dcp.comm import (
|
|||||||
get_attention_dcp_rank,
|
get_attention_dcp_rank,
|
||||||
get_attention_dcp_world_size,
|
get_attention_dcp_world_size,
|
||||||
)
|
)
|
||||||
from sglang.srt.layers.dcp.kernels import create_triton_kv_indices_for_dcp_triton
|
|
||||||
from sglang.srt.layers.dcp.layout import (
|
from sglang.srt.layers.dcp.layout import (
|
||||||
filter_dcp_local_kv_indices,
|
filter_dcp_local_kv_indices,
|
||||||
get_dcp_lens,
|
get_dcp_lens,
|
||||||
|
|||||||
@@ -25,11 +25,11 @@ from typing import Optional
|
|||||||
|
|
||||||
import torch
|
import torch
|
||||||
|
|
||||||
|
from sglang.kernels.ops.attention.dcp_kernels import CPTritonContext, correct_attn_out
|
||||||
from sglang.srt.distributed.device_communicators.pynccl_allocator import (
|
from sglang.srt.distributed.device_communicators.pynccl_allocator import (
|
||||||
use_symmetric_memory,
|
use_symmetric_memory,
|
||||||
)
|
)
|
||||||
from sglang.srt.distributed.parallel_state import GroupCoordinator
|
from sglang.srt.distributed.parallel_state import GroupCoordinator
|
||||||
from sglang.srt.layers.dcp.kernels import CPTritonContext, correct_attn_out
|
|
||||||
from sglang.srt.runtime_context import get_parallel
|
from sglang.srt.runtime_context import get_parallel
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ from typing import Optional
|
|||||||
|
|
||||||
import torch
|
import torch
|
||||||
|
|
||||||
from sglang.srt.layers.dcp.kernels import (
|
from sglang.kernels.ops.attention.dcp_kernels import (
|
||||||
create_dcp_kv_indices,
|
create_dcp_kv_indices,
|
||||||
update_kv_lens_and_indices,
|
update_kv_lens_and_indices,
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ if _is_npu:
|
|||||||
)
|
)
|
||||||
|
|
||||||
if _is_hip:
|
if _is_hip:
|
||||||
from sglang.srt.layers.attention.utils import (
|
from sglang.kernels.ops.attention.utils import (
|
||||||
fused_qk_rope_reshape_and_cache,
|
fused_qk_rope_reshape_and_cache,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -1837,7 +1837,7 @@ class MHATokenToKVPool(KVCache):
|
|||||||
# and viewed as ``store_dtype`` by ``set_kv_buffer``.
|
# and viewed as ``store_dtype`` by ``set_kv_buffer``.
|
||||||
if self.kv_cache_layout == "vectorized_5d":
|
if self.kv_cache_layout == "vectorized_5d":
|
||||||
# Late-import to keep the NHD path import-clean.
|
# Late-import to keep the NHD path import-clean.
|
||||||
from sglang.srt.layers.attention.utils import (
|
from sglang.kernels.ops.attention.utils import (
|
||||||
launch_reshape_and_cache_shuffle_5d,
|
launch_reshape_and_cache_shuffle_5d,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|||||||
@@ -4,10 +4,10 @@ from typing import TYPE_CHECKING
|
|||||||
|
|
||||||
import torch
|
import torch
|
||||||
|
|
||||||
|
from sglang.kernels.ops.attention.utils import concat_and_cast_mha_k_triton
|
||||||
from sglang.srt.environ import envs
|
from sglang.srt.environ import envs
|
||||||
from sglang.srt.layers.attention.dsa.dequant_k_cache import dequantize_k_cache_paged
|
from sglang.srt.layers.attention.dsa.dequant_k_cache import dequantize_k_cache_paged
|
||||||
from sglang.srt.layers.attention.tbo_backend import TboAttnBackend
|
from sglang.srt.layers.attention.tbo_backend import TboAttnBackend
|
||||||
from sglang.srt.layers.attention.utils import concat_and_cast_mha_k_triton
|
|
||||||
from sglang.srt.layers.communicator import get_attn_tp_context
|
from sglang.srt.layers.communicator import get_attn_tp_context
|
||||||
from sglang.srt.layers.dcp import (
|
from sglang.srt.layers.dcp import (
|
||||||
all_gather_kv_cache_for_mha_chunk_extend,
|
all_gather_kv_cache_for_mha_chunk_extend,
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import torch.nn.functional as F
|
|||||||
from torch import nn
|
from torch import nn
|
||||||
from transformers import PretrainedConfig
|
from transformers import PretrainedConfig
|
||||||
|
|
||||||
|
from sglang.kernels.ops.attention.utils import concat_and_cast_mha_k_triton
|
||||||
from sglang.srt.distributed import (
|
from sglang.srt.distributed import (
|
||||||
get_pp_group,
|
get_pp_group,
|
||||||
tensor_model_parallel_all_reduce,
|
tensor_model_parallel_all_reduce,
|
||||||
@@ -19,7 +20,6 @@ from sglang.srt.distributed import (
|
|||||||
from sglang.srt.eplb.expert_distribution import get_global_expert_distribution_recorder
|
from sglang.srt.eplb.expert_distribution import get_global_expert_distribution_recorder
|
||||||
from sglang.srt.eplb.expert_location import ModelConfigForExpertLocation
|
from sglang.srt.eplb.expert_location import ModelConfigForExpertLocation
|
||||||
from sglang.srt.layers.activation import SiluAndMul
|
from sglang.srt.layers.activation import SiluAndMul
|
||||||
from sglang.srt.layers.attention.utils import concat_and_cast_mha_k_triton
|
|
||||||
from sglang.srt.layers.communicator import (
|
from sglang.srt.layers.communicator import (
|
||||||
LayerCommunicator,
|
LayerCommunicator,
|
||||||
LayerScatterModes,
|
LayerScatterModes,
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ from typing import TYPE_CHECKING, Optional, Tuple
|
|||||||
|
|
||||||
import torch
|
import torch
|
||||||
|
|
||||||
from sglang.srt.layers.attention.utils import create_flashinfer_kv_indices_triton
|
from sglang.kernels.ops.attention.utils import create_flashinfer_kv_indices_triton
|
||||||
from sglang.srt.managers.schedule_batch import ScheduleBatch
|
from sglang.srt.managers.schedule_batch import ScheduleBatch
|
||||||
from sglang.srt.model_executor.forward_batch_info import (
|
from sglang.srt.model_executor.forward_batch_info import (
|
||||||
CaptureHiddenMode,
|
CaptureHiddenMode,
|
||||||
|
|||||||
@@ -4,9 +4,9 @@ from typing import List, Optional, Tuple
|
|||||||
|
|
||||||
import torch
|
import torch
|
||||||
|
|
||||||
|
from sglang.kernels.ops.attention.utils import create_flashinfer_kv_indices_triton
|
||||||
from sglang.srt.constrained.base_grammar_backend import BaseGrammarObject
|
from sglang.srt.constrained.base_grammar_backend import BaseGrammarObject
|
||||||
from sglang.srt.environ import envs
|
from sglang.srt.environ import envs
|
||||||
from sglang.srt.layers.attention.utils import create_flashinfer_kv_indices_triton
|
|
||||||
from sglang.srt.model_executor.forward_batch_info import CaptureHiddenMode
|
from sglang.srt.model_executor.forward_batch_info import CaptureHiddenMode
|
||||||
from sglang.srt.runtime_context import get_server_args
|
from sglang.srt.runtime_context import get_server_args
|
||||||
from sglang.srt.speculative.spec_info import SpecInput, SpecInputType
|
from sglang.srt.speculative.spec_info import SpecInput, SpecInputType
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ from typing import Optional, Tuple
|
|||||||
|
|
||||||
import torch
|
import torch
|
||||||
|
|
||||||
|
from sglang.kernels.ops.attention.utils import create_flashinfer_kv_indices_triton
|
||||||
from sglang.srt.constrained.base_grammar_backend import BaseGrammarObject
|
from sglang.srt.constrained.base_grammar_backend import BaseGrammarObject
|
||||||
from sglang.srt.layers.attention.utils import create_flashinfer_kv_indices_triton
|
|
||||||
from sglang.srt.speculative.spec_info import SpecInput, SpecInputType
|
from sglang.srt.speculative.spec_info import SpecInput, SpecInputType
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -10,13 +10,13 @@ from sglang.srt.runtime_context import get_parallel, get_server_args
|
|||||||
_parallel_override = get_parallel().override(attn_tp_size=1)
|
_parallel_override = get_parallel().override(attn_tp_size=1)
|
||||||
_parallel_override.__enter__()
|
_parallel_override.__enter__()
|
||||||
|
|
||||||
|
from sglang.kernels.ops.attention.utils import get_num_page_per_block_flashmla
|
||||||
from sglang.srt.configs.model_config import AttentionArch
|
from sglang.srt.configs.model_config import AttentionArch
|
||||||
from sglang.srt.layers.attention.flashinfer_mla_backend import FlashInferMLAAttnBackend
|
from sglang.srt.layers.attention.flashinfer_mla_backend import FlashInferMLAAttnBackend
|
||||||
from sglang.srt.layers.attention.trtllm_mla_backend import (
|
from sglang.srt.layers.attention.trtllm_mla_backend import (
|
||||||
TRTLLMMLABackend,
|
TRTLLMMLABackend,
|
||||||
TRTLLMMLADecodeMetadata,
|
TRTLLMMLADecodeMetadata,
|
||||||
)
|
)
|
||||||
from sglang.srt.layers.attention.utils import get_num_page_per_block_flashmla
|
|
||||||
from sglang.srt.layers.radix_attention import RadixAttention
|
from sglang.srt.layers.radix_attention import RadixAttention
|
||||||
from sglang.srt.mem_cache.memory_pool import MLATokenToKVPool
|
from sglang.srt.mem_cache.memory_pool import MLATokenToKVPool
|
||||||
from sglang.srt.model_executor.forward_batch_info import ForwardBatch, ForwardMode
|
from sglang.srt.model_executor.forward_batch_info import ForwardBatch, ForwardMode
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ import unittest
|
|||||||
import numpy as np
|
import numpy as np
|
||||||
import torch
|
import torch
|
||||||
|
|
||||||
from sglang.srt.layers.attention.utils import create_flashinfer_kv_indices_triton
|
from sglang.kernels.ops.attention.utils import create_flashinfer_kv_indices_triton
|
||||||
from sglang.srt.utils import get_device
|
from sglang.srt.utils import get_device
|
||||||
from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci
|
from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci
|
||||||
from sglang.test.test_utils import CustomTestCase
|
from sglang.test.test_utils import CustomTestCase
|
||||||
|
|||||||
@@ -26,8 +26,7 @@ from unittest import mock
|
|||||||
|
|
||||||
import torch
|
import torch
|
||||||
|
|
||||||
from sglang.srt.layers.attention import flash_mla_sm120 as fmod
|
from sglang.kernels.ops.attention.flash_mla_sm120 import (
|
||||||
from sglang.srt.layers.attention.flash_mla_sm120 import (
|
|
||||||
_D,
|
_D,
|
||||||
_NOPE_DIM,
|
_NOPE_DIM,
|
||||||
_NOPE_ROPE_STRIDE,
|
_NOPE_ROPE_STRIDE,
|
||||||
@@ -39,11 +38,12 @@ from sglang.srt.layers.attention.flash_mla_sm120 import (
|
|||||||
_sm120_sparse_decode_fwd,
|
_sm120_sparse_decode_fwd,
|
||||||
flash_mla_with_kvcache_sm120,
|
flash_mla_with_kvcache_sm120,
|
||||||
)
|
)
|
||||||
from sglang.srt.layers.attention.flash_mla_sm120_triton import (
|
from sglang.kernels.ops.attention.flash_mla_sm120_triton import (
|
||||||
_apply_attn_sink,
|
_apply_attn_sink,
|
||||||
_merge_partial_attn,
|
_merge_partial_attn,
|
||||||
flash_mla_sparse_decode_triton,
|
flash_mla_sparse_decode_triton,
|
||||||
)
|
)
|
||||||
|
from sglang.srt.layers.attention import flash_mla_sm120 as fmod
|
||||||
from sglang.test.ci.ci_register import register_cuda_ci
|
from sglang.test.ci.ci_register import register_cuda_ci
|
||||||
from sglang.test.test_utils import CustomTestCase
|
from sglang.test.test_utils import CustomTestCase
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user