diff --git a/python/sglang/srt/layers/quantization/fp8_utils.py b/python/sglang/srt/layers/quantization/fp8_utils.py index 4dddd407f..86c158893 100644 --- a/python/sglang/srt/layers/quantization/fp8_utils.py +++ b/python/sglang/srt/layers/quantization/fp8_utils.py @@ -532,8 +532,13 @@ def _inverse_transform_scale_ue8m0_impl(sf_packed): :param sf_packed: (scale_mn, scale_k/4) int32 :return: (scale_mn, scale_k), float32 """ + if len(sf_packed.shape) == 3: + return torch.stack( + [_inverse_transform_scale_ue8m0_impl(x) for x in sf_packed], dim=0 + ) + block_size = 128 - assert len(sf_packed.shape) == 2 + assert len(sf_packed.shape) == 2, f"{sf_packed.shape=}" assert sf_packed.dtype == torch.int32 mn_repeat_128, k_div_4 = sf_packed.shape @@ -547,7 +552,12 @@ def _inverse_transform_scale_ue8m0_impl(sf_packed): # remove repeat sf_reshaped = sf_fp32.view(mn, block_size, k) sf_unrepeated = sf_reshaped[:, 0:1, :] - assert torch.all(sf_unrepeated == sf_reshaped) + if not torch.all(sf_unrepeated == sf_reshaped): + from sglang.srt.debug_utils.dumper import get_tensor_info + + raise AssertionError( + f"sf_unrepeated != sf_reshaped ({get_tensor_info(sf_unrepeated)=} {get_tensor_info(sf_reshaped)=})" + ) sf_unrepeated = sf_unrepeated.squeeze(1).contiguous() assert sf_unrepeated.shape == (mn, k)