llmcompressor.modifiers.transform.quip.base
类
-
QuIPModifier–根据以下内容实现变换
QuIPModifier
Bases: 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用于覆盖提供的参数的可选变换配置