Files
wehub-resource-sync 94057c3d3e
PR Test (NPU) / check-changes (push) Has been cancelled
PR Test (NPU) / pr-gate (push) Has been cancelled
PR Test (NPU) / set-image-config (push) Has been cancelled
PR Test (NPU) / stage-b-test-1-npu-a2 (0) (push) Has been cancelled
PR Test (NPU) / stage-b-test-1-npu-a2 (1) (push) Has been cancelled
PR Test (NPU) / stage-b-test-2-npu-a2 (0) (push) Has been cancelled
PR Test (NPU) / stage-b-test-2-npu-a2 (1) (push) Has been cancelled
PR Test (NPU) / stage-b-test-4-npu-a3 (push) Has been cancelled
PR Test (NPU) / stage-b-test-16-npu-a3 (push) Has been cancelled
PR Test (NPU) / multimodal-gen-test-1-npu-a3 (push) Has been cancelled
PR Test (NPU) / multimodal-gen-test-2-npu-a3 (push) Has been cancelled
PR Test (Arm64) / pr-gate (push) Has been cancelled
PR Test (Arm64) / check-changes (push) Has been cancelled
PR Test (Arm64) / build-test (push) Has been cancelled
PR Test (sgl-router) / gate (push) Has been cancelled
PR Test (sgl-router) / tier-1 — lint (push) Has been cancelled
PR Test (sgl-router) / tier-2 — build + test (push) Has been cancelled
PR Test (sgl-router) / tier-3 — docker (placeholder) (push) Has been cancelled
PR Test (sgl-router) / tier-3 — k8s integration (push) Has been cancelled
PR Test (sgl-router) / tier-3 — e2e (push) Has been cancelled
PR Test (sgl-router) / finish (push) Has been cancelled
PR Test (NPU) / single-node-poc (map[name:qwen3_6_27b_w8a8_1p_in64k_out1k_50ms runner:linux-aarch64-a3-2 test_case:test/registered/ascend/performance/qwen3_6_27b/test_npu_qwen3_6_27b_w8a8_1p_in64k_out1k_50ms.py test_type:perf]) (push) Has been cancelled
PR Test (NPU) / pr-test-npu-finish (push) Has been cancelled
PR Test (Xeon) / pr-gate (push) Has been cancelled
PR Test (Xeon) / check-changes (push) Has been cancelled
PR Test (Xeon) / build-test (, xeon-gnr, base-b-test-cpu) (push) Has been cancelled
PR Test (XPU) / check-changes (push) Has been cancelled
PR Test (XPU) / pr-gate (push) Has been cancelled
PR Test (XPU) / stage-a-test-1-gpu-xpu (push) Has been cancelled
PR Test (XPU) / wait-for-stage-a (push) Has been cancelled
PR Test (XPU) / stage-b-test-1-gpu-xpu (push) Has been cancelled
PR Test (XPU) / finish (push) Has been cancelled
CI Model Inventory / build-inventory (push) Has been cancelled
Lint / lint (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark Compilation Check (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark - Manual Policy (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark - Request Processing (push) Has been cancelled
PR Benchmark (SMG Components) / Benchmark Summary (push) Has been cancelled
PR Test (SMG) / build-wheel (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on windows (x86_64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on macos (x86_64 - auto) (push) Has been cancelled
PR Test (SMG) / python-unit-tests (push) Has been cancelled
PR Test (SMG) / unit-tests (push) Has been cancelled
PR Test (SMG) / benchmarks (push) Has been cancelled
PR Test (SMG) / chat-completions (push) Has been cancelled
PR Test (SMG) / chat-completions-4gpu (push) Has been cancelled
PR Test (SMG) / e2e (push) Has been cancelled
PR Test (SMG) / docker-build-test (push) Has been cancelled
PR Test (SMG) / k8s-integration (push) Has been cancelled
PR Test (SMG) / finish (push) Has been cancelled
PR Test (SMG) / summarize-benchmarks (push) Has been cancelled
Release SGLang Model Gateway Docker Image / publish (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on macos (aarch64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (aarch64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (x86_64 - auto) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (aarch64 - musllinux_1_1) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / build on linux (x86_64 - musllinux_1_1) (push) Has been cancelled
Release SGLang Model Gateway to PyPI / Build SDist (push) Has been cancelled
Release SGLang Model Gateway to PyPI / Upload to PyPI (push) Has been cancelled
Release SGLang Kernels / build-cu129-matrix (aarch64, 12.9, 3.10, arm-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / build-cu129-matrix (x86_64, 12.9, 3.10, x64-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / release-cu129 (push) Has been cancelled
Release SGLang Kernels / build-cu130-matrix (aarch64, 13.0, 3.10, arm-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / build-cu130-matrix (x86_64, 13.0, 3.10, x64-kernel-build-node) (push) Has been cancelled
Release SGLang Kernels / release-cu130 (push) Has been cancelled
Release SGLang Kernels / build-rocm-matrix (3.10, 700) (push) Has been cancelled
Release SGLang Kernels / build-rocm-matrix (3.10, 720) (push) Has been cancelled
Release SGLang Kernels / release-rocm700 (push) Has been cancelled
Release SGLang Kernels / release-rocm720 (push) Has been cancelled
Release SGLang Kernels / build-musa43 (43, 3.10) (push) Has been cancelled
Release SGLang Kernels / release-musa43 (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:38:16 +08:00

200 lines
5.6 KiB
Python

from __future__ import annotations
import msgspec
import torch
import triton
import triton.language as tl
class PaddedToBucket:
@classmethod
def execute(
cls,
*,
verify_lens: torch.Tensor,
graph_num_tokens: int,
bs: int,
padded_bs: int,
) -> torch.Tensor:
impl = cls.triton if verify_lens.is_cuda else cls.torch
return impl(
verify_lens=verify_lens,
graph_num_tokens=graph_num_tokens,
bs=bs,
padded_bs=padded_bs,
)
@classmethod
def torch(
cls,
*,
verify_lens: torch.Tensor,
graph_num_tokens: int,
bs: int,
padded_bs: int,
) -> torch.Tensor:
return pad_verify_lens_to_bucket(
verify_lens=verify_lens,
graph_num_tokens=graph_num_tokens,
bs=bs,
padded_bs=padded_bs,
)
@classmethod
def triton(
cls,
*,
verify_lens: torch.Tensor,
graph_num_tokens: int,
bs: int,
padded_bs: int,
) -> torch.Tensor:
return pad_verify_lens_to_bucket_triton(
verify_lens=verify_lens,
graph_num_tokens=graph_num_tokens,
bs=bs,
padded_bs=padded_bs,
)
def pad_verify_lens_to_bucket(
*,
verify_lens: torch.Tensor,
graph_num_tokens: int,
bs: int,
padded_bs: int,
) -> torch.Tensor:
assert padded_bs >= bs, (
f"padded_bs {padded_bs} < bs {bs}: the captured tier cannot hold this "
"batch's requests"
)
device = verify_lens.device
num_pad_reqs = padded_bs - bs
padded = verify_lens.to(torch.int32)
leftover = graph_num_tokens - padded.to(torch.int64).sum()
if num_pad_reqs > 0:
base = leftover // num_pad_reqs
rem = leftover - base * num_pad_reqs
pad_block = base + (
torch.arange(num_pad_reqs, device=device, dtype=torch.int64) < rem
)
padded = torch.cat([padded, pad_block.to(torch.int32)])
else:
padded = padded.clone()
padded[-1] = (padded[-1].to(torch.int64) + leftover).to(torch.int32)
return padded
@triton.jit
def _padded_to_bucket_kernel(
verify_lens_ptr,
out_ptr,
bs,
padded_bs,
graph_num_tokens,
BLOCK: tl.constexpr,
):
idx = tl.arange(0, BLOCK)
valid = idx < padded_bs
is_real = idx < bs
vl = tl.load(verify_lens_ptr + idx, mask=is_real, other=0).to(tl.int64)
leftover = graph_num_tokens - tl.sum(vl)
num_pad = padded_bs - bs
num_pad_safe = tl.maximum(num_pad, 1)
base = leftover // num_pad_safe
rem = leftover - base * num_pad_safe
pad_len = base + tl.where((idx - bs) < rem, 1, 0)
final = tl.where(is_real, vl, pad_len)
final = final + tl.where((num_pad == 0) & (idx == bs - 1), leftover, 0)
tl.store(out_ptr + idx, final.to(tl.int32), mask=valid)
def pad_verify_lens_to_bucket_triton(
*,
verify_lens: torch.Tensor,
graph_num_tokens: int,
bs: int,
padded_bs: int,
) -> torch.Tensor:
assert padded_bs >= bs, (
f"padded_bs {padded_bs} < bs {bs}: the captured tier cannot hold this "
"batch's requests"
)
device = verify_lens.device
verify_lens = verify_lens.to(torch.int32).contiguous()
out = torch.empty(padded_bs, dtype=torch.int32, device=device)
BLOCK = triton.next_power_of_2(max(padded_bs, 1))
_padded_to_bucket_kernel[(1,)](
verify_lens,
out,
bs,
padded_bs,
graph_num_tokens,
BLOCK=BLOCK,
)
return out
class QoIndptrResult(msgspec.Struct):
qo_indptr: torch.Tensor
extend_start_loc: torch.Tensor
class BuildQoIndptr:
@classmethod
def execute(cls, *, verify_lens: torch.Tensor) -> QoIndptrResult:
impl = cls.triton if verify_lens.is_cuda else cls.torch
return impl(verify_lens=verify_lens)
@classmethod
def torch(cls, *, verify_lens: torch.Tensor) -> QoIndptrResult:
return build_qo_indptr(verify_lens=verify_lens)
@classmethod
def triton(cls, *, verify_lens: torch.Tensor) -> QoIndptrResult:
return build_qo_indptr_triton(verify_lens=verify_lens)
def build_qo_indptr(*, verify_lens: torch.Tensor) -> QoIndptrResult:
verify_lens = verify_lens.to(torch.int32)
cumsum = torch.cumsum(verify_lens, dim=0).to(torch.int32)
zero = torch.zeros(1, dtype=torch.int32, device=verify_lens.device)
qo_indptr = torch.cat([zero, cumsum])
extend_start_loc = qo_indptr[:-1].clone()
return QoIndptrResult(qo_indptr=qo_indptr, extend_start_loc=extend_start_loc)
@triton.jit
def _qo_indptr_kernel(
verify_lens_ptr,
qo_indptr_ptr,
extend_start_loc_ptr,
bs,
BLOCK: tl.constexpr,
):
idx = tl.arange(0, BLOCK)
valid = idx < bs
vl = tl.load(verify_lens_ptr + idx, mask=valid, other=0).to(tl.int32)
incl = tl.cumsum(vl, axis=0)
excl = incl - vl
tl.store(qo_indptr_ptr, 0)
tl.store(qo_indptr_ptr + 1 + idx, incl, mask=valid)
tl.store(extend_start_loc_ptr + idx, excl, mask=valid)
def build_qo_indptr_triton(*, verify_lens: torch.Tensor) -> QoIndptrResult:
bs = verify_lens.shape[0]
device = verify_lens.device
verify_lens = verify_lens.contiguous()
qo_indptr = torch.empty(bs + 1, dtype=torch.int32, device=device)
extend_start_loc = torch.empty(bs, dtype=torch.int32, device=device)
BLOCK = triton.next_power_of_2(max(bs, 1))
_qo_indptr_kernel[(1,)](
verify_lens,
qo_indptr,
extend_start_loc,
bs,
BLOCK=BLOCK,
)
return QoIndptrResult(qo_indptr=qo_indptr, extend_start_loc=extend_start_loc)