跳到内容

使用激活感知量化 (AWQ) 量化模型

激活感知量化 (AWQ) 是一种最先进的用于量化大型语言模型权重的技术,它使用一小部分校准数据集来校准模型。AWQ 算法利用校准数据推导出缩放因子,这些缩放因子可以减小权重的动态范围,同时最大限度地减少对最显著权重值的精度损失。

LLM Compressor 中实现的 AWQ 是源于 AutoAWQ 的开创性工作,并在其原始维护者 @casper-hansen 的协助下完成。

AWQ 配方

AWQ 配方已按如下方式处理,其中 AWQModifierQuantizationModifier 进行高效权重量化之前调整模型缩放。

recipe = [
    AWQModifier(ignore=["lm_head"], scheme="W4A16_ASYM", targets=["Linear"]),
]

压缩您自己的模型

要使用您自己的模型,请从现有示例开始,将 model_id 更改为匹配您自己的模型存根。

model_id = "path/to/your/model"
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype="auto")

添加映射

为了在模型中定位权重和激活的缩放点,必须为 AWQModifier 提供 AWQ 映射。例如,Llama 系列模型的 AWQ 映射如下所示:

[
    AWQMapping(
        "re:.*input_layernorm",
        ["re:.*q_proj", "re:.*k_proj", "re:.*v_proj"],
    ),
    AWQMapping("re:.*v_proj", ["re:.*o_proj"]),
    AWQMapping(
        "re:.*post_attention_layernorm",
        ["re:.*gate_proj", "re:.*up_proj"],
    ),
    AWQMapping(
        "re:.*up_proj",
        ["re:.*down_proj"],
    ),
]

为了支持其他模型系列,您可以在实例化 AWQModifier 时通过 mappings 参数提供您自己的映射,或者您可以将它们添加到 此处的 注册表中(欢迎贡献!)。