直方图

基于直方图的校准器。

HistogramCalibrator

统一直方图校准器。

函数

calibrate_weights

校准所有子量化模块的权重。

class HistogramCalibrator

基础类:_Calibrator

统一直方图校准器。

Histogram will be only collected once. compute_amax() performs entropy, percentile, or mse

基于参数的校准

Parameters:
  • num_bits – 一个整数。量化的位数。

  • axis – 一个元组。参见 QuantizerAttributeConfig

  • unsigned – 一个布尔值。使用无符号量化。

  • num_bins – 一个整数。直方图箱的数量。默认值为2048。

  • grow_method – 一个字符串。已弃用。默认值为 None。

  • skip_zeros – 一个布尔值。如果为True,则在收集直方图数据时跳过零值。默认为False。

  • torch_hist – 一个布尔值。如果为True,使用torch.histc而不是np.histogram来收集直方图。如果输入张量在GPU上,histc也将在GPU上运行。默认为True。

__init__(num_bits=8, axis=None, unsigned=False, num_bins=2048, grow_method=None, skip_zeros=False, torch_hist=True)

初始化。

collect(x)

收集直方图。

compute_amax(method, *, stride=1, start_bin=128, percentile=99.99)

从收集的直方图中计算最大值。

Parameters:
  • 方法 (str) – 一个字符串。其中之一是 [‘entropy’, ‘mse’, ‘percentile’]

  • 步幅 (整数) –

  • start_bin (int) –

  • 百分位数 (浮点数) –

Keyword Arguments:
  • stride – 一个整数。默认值为1

  • start_bin – 一个整数。默认值为128

  • percentils – 一个介于 [0, 100] 之间的浮点数。默认值为 99.99。

Returns:

一个张量

Return type:

amax

reset()

重置收集的直方图。

calibrate_weights(model, method='percentile', perchannel=True, percentile=99.99, num_bins=2048)

校准所有子量化模块的权重。

理想情况下,我们会将校准功能分为直方图收集器和校准器,校准器接收直方图并计算amax。但由于我们尚未解耦收集器和校准器,因此创建一个单独的函数来校准权重更为简便。

注意

此函数使用由参数指定的method来决定使用哪种方法,而不是由weight_quantizer中嵌入的校准器指定的方法。 我们尚未将校准移至GPU,因此所有内容都转移到CPU

Parameters:
  • model – 一个 torch.nn.Module。

  • method – 校准方法的字符串。支持“mse”和“percentile”。默认值为“percentile”

  • perchannel – 一个布尔值。如果为True,则设置通道/神经元轴。默认为True。

  • percentile – 一个浮点数。默认值为 99.99

  • num_bins – 一个整数。直方图的箱数。默认值为2048。