[1/n jit_kernel restruct] unify cache usage and clean up naming in ngram_embedding (#20244)

This commit is contained in:
Xiaoyu Zhang
2026-03-10 15:53:43 +08:00
committed by GitHub
parent 7cf0551014
commit c812504b92
4 changed files with 14 additions and 15 deletions
+1 -1
View File
@@ -12,7 +12,7 @@ if TYPE_CHECKING:
@cache_once @cache_once
def _jit_add_constant_module(constant: int) -> Module: def _jit_add_constant_module(constant: int) -> Module:
args = make_cpp_args(constant) # pass all the template argument args = make_cpp_args(constant)
return load_jit( return load_jit(
"add_constant", "add_constant",
*args, *args,
+5 -6
View File
@@ -1,16 +1,15 @@
from __future__ import annotations from __future__ import annotations
from functools import lru_cache
from typing import TYPE_CHECKING from typing import TYPE_CHECKING
from sglang.jit_kernel.utils import load_jit from sglang.jit_kernel.utils import cache_once, load_jit
if TYPE_CHECKING: if TYPE_CHECKING:
import torch import torch
from tvm_ffi.module import Module from tvm_ffi.module import Module
@lru_cache(maxsize=None) @cache_once
def _jit_ngram_embedding_module() -> Module: def _jit_ngram_embedding_module() -> Module:
return load_jit( return load_jit(
"ngram_embedding", "ngram_embedding",
@@ -27,7 +26,7 @@ def compute_n_gram_ids(
ne_k: int, ne_k: int,
ne_weights: torch.Tensor, ne_weights: torch.Tensor,
ne_mods: torch.Tensor, ne_mods: torch.Tensor,
exclusive_ne_embeder_size_sums: torch.Tensor, exclusive_ne_embedder_size_sums: torch.Tensor,
tokens: torch.Tensor, tokens: torch.Tensor,
exclusive_req_len_sums: torch.Tensor, exclusive_req_len_sums: torch.Tensor,
ne_token_table: torch.Tensor, ne_token_table: torch.Tensor,
@@ -43,7 +42,7 @@ def compute_n_gram_ids(
ne_k: k value for n-gram configurations ne_k: k value for n-gram configurations
ne_weights: weights tensor with shape [ne_n-1, ne_k, ne_n] ne_weights: weights tensor with shape [ne_n-1, ne_k, ne_n]
ne_mods: mods tensor with shape [ne_n-1, ne_k] ne_mods: mods tensor with shape [ne_n-1, ne_k]
exclusive_ne_embeder_size_sums: exclusive sum of embedder sizes exclusive_ne_embedder_size_sums: exclusive sum of embedder sizes
tokens: input token ids tokens: input token ids
exclusive_req_len_sums: exclusive sum of request lengths exclusive_req_len_sums: exclusive sum of request lengths
ne_token_table: token table for all requests ne_token_table: token table for all requests
@@ -57,7 +56,7 @@ def compute_n_gram_ids(
ne_k, ne_k,
ne_weights, ne_weights,
ne_mods, ne_mods,
exclusive_ne_embeder_size_sums, exclusive_ne_embedder_size_sums,
tokens, tokens,
exclusive_req_len_sums, exclusive_req_len_sums,
ne_token_table, ne_token_table,
+1 -1
View File
@@ -52,7 +52,7 @@ def _resolve_kernel_path() -> pathlib.Path:
path = _environment_install() or _package_install() path = _environment_install() or _package_install()
if path is None: if path is None:
raise RuntimeError("Cannot find sgl-kernel/jit path") raise RuntimeError("Cannot find sglang.jit_kernel path")
return path return path
+7 -7
View File
@@ -35,18 +35,18 @@ class NgramEmbedding(torch.nn.Module):
) )
self.n_grams = (over_embedding_n - 1) * over_embedding_k self.n_grams = (over_embedding_n - 1) * over_embedding_k
oe_hidden_dim = embedding_dim // (over_embedding_k * (over_embedding_n - 1)) oe_hidden_dim = embedding_dim // (over_embedding_k * (over_embedding_n - 1))
self.exclusive_oe_embeder_size_sums = torch.zeros( self.exclusive_oe_embedder_size_sums = torch.zeros(
[over_embedding_k * (over_embedding_n - 1) + 1], [over_embedding_k * (over_embedding_n - 1) + 1],
dtype=torch.int32, dtype=torch.int32,
device="cuda", device="cuda",
) )
for i in range(over_embedding_k * (over_embedding_n - 1)): for i in range(over_embedding_k * (over_embedding_n - 1)):
self.exclusive_oe_embeder_size_sums[i + 1] = ( self.exclusive_oe_embedder_size_sums[i + 1] = (
self.exclusive_oe_embeder_size_sums[i] self.exclusive_oe_embedder_size_sums[i]
+ int(over_embedding_m + i * 2 + 1) + int(over_embedding_m + i * 2 + 1)
) )
self.oe_embeder = VocabParallelEmbedding( self.oe_embeder = VocabParallelEmbedding(
num_embeddings=self.exclusive_oe_embeder_size_sums[-1], num_embeddings=self.exclusive_oe_embedder_size_sums[-1],
embedding_dim=oe_hidden_dim, embedding_dim=oe_hidden_dim,
enable_tp=is_dp_attention_enabled(), enable_tp=is_dp_attention_enabled(),
) )
@@ -100,8 +100,8 @@ class NgramEmbedding(torch.nn.Module):
".weight", "" ".weight", ""
) )
) )
oe_weight_start = self.exclusive_oe_embeder_size_sums[index] oe_weight_start = self.exclusive_oe_embedder_size_sums[index]
oe_weight_end = self.exclusive_oe_embeder_size_sums[index + 1] oe_weight_end = self.exclusive_oe_embedder_size_sums[index + 1]
assert ( assert (
oe_weight_end - oe_weight_start == loaded_weight.shape[0] oe_weight_end - oe_weight_start == loaded_weight.shape[0]
), f"{oe_weight_end - oe_weight_start=} {loaded_weight.shape[0]=}" ), f"{oe_weight_end - oe_weight_start=} {loaded_weight.shape[0]=}"
@@ -147,7 +147,7 @@ class NgramEmbedding(torch.nn.Module):
ne_weights=self.oe_weights, ne_weights=self.oe_weights,
ne_mods=self.oe_mods, ne_mods=self.oe_mods,
tokens=input_ids.to(torch.int32), tokens=input_ids.to(torch.int32),
exclusive_ne_embeder_size_sums=self.exclusive_oe_embeder_size_sums, exclusive_ne_embedder_size_sums=self.exclusive_oe_embedder_size_sums,
exclusive_req_len_sums=self.exclusive_req_len_sums[ exclusive_req_len_sums=self.exclusive_req_len_sums[
: forward_batch.batch_size + 1 : forward_batch.batch_size + 1
], ],