Files
sglang/test/registered/attention/test_create_kvindices.py
DiweiSun 495290aefd enable ut test for xpu devices (#11712)
Co-authored-by: jundu <jun.du@intel.com>
Co-authored-by: Gao, Pengfei <pengfei.gao@intel.com>
2026-02-03 11:15:14 -08:00

81 lines
2.5 KiB
Python

import unittest
import numpy as np
import torch
from sglang.srt.layers.attention.utils import create_flashinfer_kv_indices_triton
from sglang.srt.utils import get_device
from sglang.test.ci.ci_register import register_amd_ci, register_cuda_ci
from sglang.test.test_utils import CustomTestCase
# Triton kernel unit test for KV indices creation
register_cuda_ci(est_time=10, suite="stage-b-test-small-1-gpu")
register_amd_ci(est_time=10, suite="stage-b-test-small-1-gpu-amd")
class TestCreateKvIndices(CustomTestCase):
@classmethod
def setUpClass(cls):
torch.set_default_device(get_device())
def _run_test(self, batch, max_batch, max_context_len):
req_to_token = torch.arange(
max_batch * max_context_len, dtype=torch.int32, device=get_device()
).reshape((max_batch, max_context_len))
req_pool_indices = torch.tensor(
torch.from_numpy(
np.random.choice(range(max_batch), size=batch, replace=False)
),
dtype=torch.int32,
device=get_device(),
)
paged_kernel_lens = torch.tensor(
torch.from_numpy(
np.random.choice(range(max_context_len), size=batch, replace=False)
),
dtype=torch.int32,
device=get_device(),
)
kv_indptr = torch.zeros((batch + 1,), dtype=torch.int32, device=get_device())
kv_indptr[1:] = torch.cumsum(paged_kernel_lens, dim=0)
# ref
req_pool_indices_cpu = req_pool_indices.cpu().numpy()
paged_kernel_lens_cpu = paged_kernel_lens.cpu().numpy()
kv_indices_ref = torch.cat(
[
req_to_token[req_pool_indices_cpu[i], : paged_kernel_lens_cpu[i]]
for i in range(batch)
],
dim=0,
).contiguous()
# triton
kv_indices_triton = torch.empty(
kv_indptr[-1], dtype=torch.int32, device=get_device()
)
create_flashinfer_kv_indices_triton[(batch,)](
req_to_token,
req_pool_indices,
paged_kernel_lens,
kv_indptr,
None,
kv_indices_triton,
req_to_token.size(1),
)
# Check
self.assertTrue(torch.equal(kv_indices_ref, kv_indices_triton))
def test_create_kvindices(self):
BATCH = [1, 37, 1786]
MAX_BATCH = 4096
MAX_CONTEXT_LEN = 4096
for batch in BATCH:
self._run_test(batch, MAX_BATCH, MAX_CONTEXT_LEN)
if __name__ == "__main__":
unittest.main()