llmcompressor.modifiers.transform.quip
模块
-
base–
类
-
QuIPModifier–根据以下内容实现变换
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
- 将变换合并到权重中,以便进行合并变换
- 添加在线变换的钩子
- 应用 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用于覆盖提供的参数的可选变换配置