Skip to content

Commit 4af45b9

Browse files
committed
fix(qlinear): size GPTQ buffers by bits/pack_dtype_bits instead of pack_factor or 32
The number of packed words is ceil(dim * bits / pack_dtype_bits), not ceil(dim / pack_factor). - In _register_gptq_buffers, use in_features*bits/pack_dtype_bits and out_features*bits/pack_dtype_bits for qweight/qzeros rows/cols. - In pack_original, use dim*bits/pack_dtype_bits for both qweight and qzeros. This is equivalent to the previous pack_factor formula for 2/4/8-bit, and correct for 3-bit and non-32-bit pack dtypes (int8/int16).
1 parent 7c3d80c commit 4af45b9

1 file changed

Lines changed: 4 additions & 4 deletions

File tree

gptqmodel/nn_modules/qlinear/__init__.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -750,14 +750,14 @@ def _register_gptq_buffers(
750750

751751
self.register_buffer(
752752
"qweight",
753-
t.zeros((math.ceil(in_features / self.pack_factor), out_features), dtype=self.pack_dtype),
753+
t.zeros((math.ceil(in_features * self.bits / self.pack_dtype_bits), out_features), dtype=self.pack_dtype),
754754
)
755755
self.register_buffer(
756756
"qzeros",
757757
t.zeros(
758758
(
759759
math.ceil(in_features / self.group_size),
760-
math.ceil(out_features / self.pack_factor),
760+
math.ceil(out_features * self.bits / self.pack_dtype_bits),
761761
),
762762
dtype=self.pack_dtype,
763763
),
@@ -1395,7 +1395,7 @@ def pack_original(self, linear: nn.Module, scales: t.Tensor, zeros: t.Tensor, g_
13951395
int_weight = int_weight.to(t.int32).T.contiguous()
13961396
int_weight = int_weight.numpy().astype(self.pack_np_math_dtype)
13971397

1398-
qweight = np.zeros((math.ceil(int_weight.shape[0] * self.bits / 32), int_weight.shape[1]),
1398+
qweight = np.zeros((math.ceil(int_weight.shape[0] * self.bits / self.pack_dtype_bits), int_weight.shape[1]),
13991399
dtype=self.pack_np_math_dtype)
14001400
if self.bits in [2, 4, 8]:
14011401
for row in range(qweight.shape[0]):
@@ -1428,7 +1428,7 @@ def pack_original(self, linear: nn.Module, scales: t.Tensor, zeros: t.Tensor, g_
14281428
self.register_buffer("qweight", t.from_numpy(qweight.astype(self.pack_np_dtype)))
14291429

14301430
zeros = zeros.numpy().astype(self.pack_np_math_dtype)
1431-
qzeros = np.zeros((zeros.shape[0], math.ceil(zeros.shape[1] * self.bits / 32)), dtype=self.pack_np_math_dtype)
1431+
qzeros = np.zeros((zeros.shape[0], math.ceil(zeros.shape[1] * self.bits / self.pack_dtype_bits)), dtype=self.pack_np_math_dtype)
14321432
if self.bits in [2, 4, 8]:
14331433
for col in range(qzeros.shape[1]):
14341434
for j in range(self.pack_factor):

0 commit comments

Comments
 (0)