diff --git a/paddleslim/quant/advanced/piecewise_search.py b/paddleslim/quant/advanced/piecewise_search.py index 6b17286b74219..55678409b43bb 100644 --- a/paddleslim/quant/advanced/piecewise_search.py +++ b/paddleslim/quant/advanced/piecewise_search.py @@ -153,8 +153,8 @@ def search(self, layer_name, sampled_input, act_abs_max, weight): else: smooth_scale_out += final_smooth_scale - if cur_loss < global_loss: - global_loss = cur_loss + if calibration_loss < global_loss: + global_loss = calibration_loss best_scale = smooth_scale_out if self.search_piece: print('Find Better K-Piece {}'.format(k_piece)) diff --git a/paddleslim/quant/observers/abs_max.py b/paddleslim/quant/observers/abs_max.py index 10cdf2983563a..a8266df1e57f5 100644 --- a/paddleslim/quant/observers/abs_max.py +++ b/paddleslim/quant/observers/abs_max.py @@ -69,6 +69,9 @@ def cal_min_max(self, inputs): def cal_thresholds(self): """ Compute thresholds for MAX function. """ + if self._scale is not None: + self._zero_point = 0 + return self._scale, self._zero_point = self.cal_scales_zero_points() def min_value(self) -> float: diff --git a/paddleslim/quant/observers/abs_max_weight.py b/paddleslim/quant/observers/abs_max_weight.py index 1381cd23d8cdd..a22fc496446db 100644 --- a/paddleslim/quant/observers/abs_max_weight.py +++ b/paddleslim/quant/observers/abs_max_weight.py @@ -81,7 +81,8 @@ def max_value(self) -> float: def cal_thresholds(self): """ Compute thresholds for MAX function. """ - self._scale = self._max + if self._scale is None: + self._scale = self._max self._zero_point = paddle.zeros_like(self._scale) def scales(self): diff --git a/paddleslim/quant/observers/avg.py b/paddleslim/quant/observers/avg.py index 14b6ba81de518..199a2aa0e6205 100644 --- a/paddleslim/quant/observers/avg.py +++ b/paddleslim/quant/observers/avg.py @@ -70,6 +70,9 @@ def cal_min_max(self, inputs): def cal_thresholds(self): """ Compute thresholds for MAX function. """ + if self._scale is not None: + self._zero_point = 0 + return self._min, self._max = self._avg_min, paddle.mean( paddle.to_tensor(self._avg_list)) self._scale, self._zero_point = self.cal_scales_zero_points() diff --git a/paddleslim/quant/observers/emd.py b/paddleslim/quant/observers/emd.py index 02bea81a58815..8dea968e70cc8 100644 --- a/paddleslim/quant/observers/emd.py +++ b/paddleslim/quant/observers/emd.py @@ -85,6 +85,9 @@ def cal_min_max(self, inputs): def cal_thresholds(self): """ Compute thresholds for MAX function. """ + if self._scale is not None: + self._zero_point = 0 + return self._min, self._max = self._emd_min, self._emd_max self._scale, self._zero_point = self.cal_scales_zero_points() diff --git a/paddleslim/quant/observers/mse.py b/paddleslim/quant/observers/mse.py index 6deab94ad833c..74433576e2c97 100644 --- a/paddleslim/quant/observers/mse.py +++ b/paddleslim/quant/observers/mse.py @@ -82,6 +82,9 @@ def cal_min_max(self, inputs): def cal_thresholds(self): """ Compute thresholds for MAX function. """ + if self._scale is not None: + self._zero_point = 0 + return self._min, self._max = self._mse_min, self._mse_max self._scale, self._zero_point = self.cal_scales_zero_points()