Skip to content

Commit

Permalink
Align quantize_per_channel implementation with PyTorch (#2319)
Browse files Browse the repository at this point in the history
  • Loading branch information
Xia-Weiwen authored Dec 5, 2023
1 parent 33afafc commit 1dae69d
Showing 1 changed file with 8 additions and 5 deletions.
13 changes: 8 additions & 5 deletions intel_extension_for_pytorch/quantization/_quantize_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -818,10 +818,11 @@ def get_qparams(scales, zps):
return scales, zps

scales, zps = get_qparams(scales, zero_points)
qmin = 0 if is_int4 else -127
qmin = 0 if is_int4 else -128
qmax = 15 if is_int4 else 127
inv_scales = 1 / scales.unsqueeze(1)
qt = torch.clamp(
torch.round(t / scales.unsqueeze(1)) + zps.unsqueeze(1), min=qmin, max=qmax
torch.round(t * inv_scales) + zps.unsqueeze(1), min=qmin, max=qmax
)
qt = qt.to(torch.uint8) if is_int4 else qt.to(torch.int8)
if is_int4:
Expand Down Expand Up @@ -926,14 +927,15 @@ def get_qparams(scales, zps):
return scales, zps

scales, zps = get_qparams(scales, zero_points)
qmin = 0 if is_int4 else -127
qmin = 0 if is_int4 else -128
qmax = 15 if is_int4 else 127
Kc = (K + group_size - 1) // group_size
t_com = input[:, : K - k_rem].view(N, K // group_size, group_size)
scales_com = scales[:, : Kc - has_rem]
zps_com = zps[:, : Kc - has_rem]
inv_scales_com = 1 / scales_com.unsqueeze(-1)
qt = torch.clamp(
torch.round(t_com / scales_com.unsqueeze(-1)) + zps_com.unsqueeze(-1),
torch.round(t_com * inv_scales_com) + zps_com.unsqueeze(-1),
min=qmin,
max=qmax,
)
Expand All @@ -942,8 +944,9 @@ def get_qparams(scales, zps):
t_rem = input[:, K - k_rem :].view(N, 1, k_rem)
scales_rem = scales[:, Kc - has_rem :]
zps_rem = zps[:, Kc - has_rem :]
inv_scales_rem = 1 / scales_rem.unsqueeze(-1)
qt_rem = torch.clamp(
torch.round(t_rem / scales_rem.unsqueeze(-1)) + zps_rem.unsqueeze(-1),
torch.round(t_rem * inv_scales_rem) + zps_rem.unsqueeze(-1),
min=qmin,
max=qmax,
)
Expand Down

0 comments on commit 1dae69d

Please sign in to comment.