直方图
基于直方图的校准器。
类
统一直方图校准器。 |
函数
校准所有子量化模块的权重。 |
- 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。