mirror of
https://github.com/kvcache-ai/sglang.git
synced 2026-07-15 11:53:52 +00:00
39 lines
963 B
Python
39 lines
963 B
Python
from __future__ import annotations
|
|
|
|
from typing import TYPE_CHECKING
|
|
|
|
import torch
|
|
|
|
from sglang.jit_kernel.utils import cache_once, load_jit, make_cpp_args
|
|
|
|
if TYPE_CHECKING:
|
|
from tvm_ffi.module import Module
|
|
|
|
|
|
@cache_once
|
|
def _jit_awq_dequantize_module(dtype: torch.dtype) -> Module:
|
|
args = make_cpp_args(dtype)
|
|
return load_jit(
|
|
"awq_dequantize",
|
|
*args,
|
|
cuda_files=["gemm/awq_dequantize.cuh"],
|
|
cuda_wrappers=[("awq_dequantize", f"awq_dequantize<{args}>")],
|
|
)
|
|
|
|
|
|
def awq_dequantize(
|
|
qweight: torch.Tensor,
|
|
scales: torch.Tensor,
|
|
qzeros: torch.Tensor,
|
|
) -> torch.Tensor:
|
|
qweight_rows = qweight.shape[0]
|
|
qweight_cols = qweight.shape[1]
|
|
output = torch.empty(
|
|
(qweight_rows, qweight_cols * 8),
|
|
dtype=scales.dtype,
|
|
device=scales.device,
|
|
)
|
|
module = _jit_awq_dequantize_module(scales.dtype)
|
|
module.awq_dequantize(output, qweight, scales, qzeros)
|
|
return output
|