跳到内容

llmcompressor.observers.mse

  • MovingAverageMSEObserver

    通过寻找使量化误差平方的均值最小的最优 min/max 值来计算量化参数。

MemorylessMSEObserver

MemorylessMSEObserver(*args, **kwargs)

基类:Observer

通过寻找使量化误差平方的均值最小的最优 min/max 值来计算量化参数。

mse_quant_error := mean((x - fake_quant(x))**2)
global_scale <- min[min_vals, max_vals, global_scale](mse_quant_error(x))
scale, zp <- min[min_vals, max_vals](mse_quant_error(x, global_scale))

参数

  • base_name

    用于命名观察器属性的字符串

  • args

    用于校准和量化观测值的量化参数

  • module

    可选模块,附带量化参数。此参数是利用现有 qparams(例如 global_scale 或 g_idx)所必需的

  • **observer_kwargs

    用于 observer 初始化的关键字参数 maxshrink: 最大收缩量(以“网格步数”为单位)。搜索步数为 int(maxshrink * grid) patience: 在提前停止之前连续无改进的搜索步数 grid: 收缩搜索的分辨率。值越大,收缩因子的粒度越细 norm: 计算误差时使用的指数。norm = 2 近似 MSE global_scale: 用于量化的预计算全局尺度。如果 optimize_global_scale 为 True,则忽略 optimize_global_scale: 如果为 True,则在搜索的每一步中从候选 min/max 重新计算 global_scale

源码位于 llmcompressor/observers/mse.py
def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    observer_kwargs = self.args.observer_kwargs
    self.maxshrink = observer_kwargs.get("maxshrink", 0.20)
    self.patience = observer_kwargs.get("patience", 5)
    self.grid = observer_kwargs.get("grid", 100.0)
    self.norm = observer_kwargs.get("norm", 2.4)

MovingAverageMSEObserver

MovingAverageMSEObserver(*args, **kwargs)

基类:MovingAverageObserverBase

通过寻找使量化误差平方的均值最小的最优 min/max 值来计算量化参数。

mse_quant_error := mean((x - fake_quant(x))**2)
global_scale <- min[min_vals, max_vals, global_scale](mse_quant_error(x))
scale, zp <- min[min_vals, max_vals](mse_quant_error(x, global_scale))

参数

  • base_name

    用于命名观察器属性的字符串

  • args

    用于校准和量化观测值的量化参数

  • module

    可选模块,附带量化参数。此参数是利用现有 qparams(例如 global_scale 或 g_idx)所必需的

  • **observer_kwargs

    用于 observer 初始化的关键字参数 maxshrink: 最大收缩量(以“网格步数”为单位)。搜索步数为 int(maxshrink * grid) patience: 在提前停止之前连续无改进的搜索步数 grid: 收缩搜索的分辨率。值越大,收缩因子的粒度越细 norm: 计算误差时使用的指数。norm = 2 近似 MSE global_scale: 用于量化的预计算全局尺度。如果 optimize_global_scale 为 True,则忽略 optimize_global_scale: 如果为 True,则在搜索的每一步中从候选 min/max 重新计算 global_scale

源码位于 llmcompressor/observers/mse.py
def __init__(self, *args, **kwargs):
    super().__init__(*args, **kwargs)
    observer_kwargs = self.args.observer_kwargs
    self.maxshrink = observer_kwargs.get("maxshrink", 0.20)
    self.patience = observer_kwargs.get("patience", 5)
    self.grid = observer_kwargs.get("grid", 100.0)
    self.norm = observer_kwargs.get("norm", 2.4)