跳到内容

llmcompressor.modifiers.transform.quip

模块

QuIPModifier

基类:Modifier

根据 QuIP#: Even Better LLM Quantization with Hadamard Incoherence and Lattice Codebooks QuIP: 2-Bit Quantization of Large Language Models With Guarantees 实现变换

变换(旋转)是添加到模型中的额外层,可以减少量化引起的精度损失。这是通过将权重和激活“旋转”到具有较小值动态范围的空间来实现的,从而减小了量化所需的尺度范围。

QuIP 和 QuIP# 对每个线性层应用变换,其中两个变换已合并到模型权重中,另外两个变换作为运行时计算的在线变换保留。

生命周期

  • on_initialize
    • 根据需要,为 V(输入)和 U(输出)创建变换方案
  • on_start
    • 应用 TransformConfig
      • 将变换合并到权重中,以便进行合并变换
      • 添加在线变换的钩子
  • 在序列 epoch 结束时
  • on_end
  • on_finalize

参数

  • 旋转

    要应用于模型的旋转方案。包含 "v" 将旋转权重的输入端,包含 "u" 将旋转权重的输出端(请注意,v 不需要 u,反之亦然)

  • 变换类型

    要应用于模型的变换类型。"hadamard" 的性能成本最低,但仅支持是二的幂的倍数的尺寸。"random-hadamard" 的性能成本更高,但支持的尺寸集大得多。"random-matrix" 的性能成本最高,但支持任何尺寸

  • 随机化

    如果为 True,则为每次应用创建不同的变换

  • 可学习

    如果为 True,则将梯度附加到变换权重进行训练

  • precision

    所有变换应应用的精度。这适用于权重融合和在线旋转

  • transform_block_size

    用于旋转矩阵的块大小。模型的 hidden_size 必须能被 transform_block_size 整除。层将通过一个块对角矩阵进行变换,其中每个块是此大小的矩阵。如果提供 None,则使用模型的 hidden_size

  • ignore

    在附加变换时要忽略的模块

  • transform_config

    用于覆盖提供的参数的可选变换配置