Transformers documentation

AWQ

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.22.2).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

AWQ

激活感知权重量化(AWQ)通过保留对大语言模型性能至关重要的少量权重,将模型压缩至 4 位,同时最大限度地减少性能下降。

有多个库可用于使用 AWQ 算法对模型进行量化,例如 llm-awq、autoawq 或 optimum-intel。Transformers 支持加载使用 llm-awq 和 autoawq 库量化的模型。本指南将演示如何加载使用 autoawq 量化的模型,但加载 llm-awq 量化模型的过程与此类似。

运行以下命令以安装 autoawq

pip install autoawq

AutoAWQ 会将 Transformers 降级到 4.47.1 版本。如果您想使用 AutoAWQ 进行推理,安装 AutoAWQ 后可能需要重新安装您的 Transformers 版本。

通过检查模型的 config.json 文件中的 quant_method 键,可以识别出 AWQ 量化模型。

{
  "_name_or_path": "/workspace/process/huggingfaceh4_zephyr-7b-alpha/source",
  "architectures": [
    "MistralForCausalLM"
  ],
  ...
  ...
  ...
  "quantization_config": {
    "quant_method": "awq",
    "zero_point": true,
    "group_size": 128,
    "bits": 4,
    "version": "gemm"
  }
}

使用 from_pretrained() 加载 AWQ 量化模型。出于性能考虑,默认情况下会自动将其他权重设置为 fp16。使用 dtype 参数可以以其他格式加载这些权重。

如果模型加载在 CPU 上,请使用 device_map 参数将其移至加速器。

from transformers import AutoModelForCausalLM, AutoTokenizer
from accelerate import Accelerator
import torch

device = Accelerator().device

model = AutoModelForCausalLM.from_pretrained(
  "TheBloke/zephyr-7B-alpha-AWQ",
  dtype=torch.float32,
  device_map=device
)

使用 attn_implementation 启用 FlashAttention2 以进一步加速推理。

from transformers import AutoModelForCausalLM, AutoTokenizer
from accelerate import Accelerator

model = AutoModelForCausalLM.from_pretrained(
  "TheBloke/zephyr-7B-alpha-AWQ",
  attn_implementation="flash_attention_2",
  device_map=Accelerator().device
)

融合模块

融合模块可提供更高的精度和性能。对于 Llama 和 Mistral 架构的 AWQ 模块,开箱即用地支持融合;对于不支持的架构,您也可以手动融合其 AWQ 模块。

融合模块无法与其他优化技术(如 FlashAttention2)结合使用。

支持的架构
不受支持的架构

创建一个 AwqConfig,并设置参数 fuse_max_seq_len 和 do_fuse=True 以启用融合模块。fuse_max_seq_len 参数表示总序列长度,应包含上下文长度和预期的生成长度。为安全起见,请将其设置为较大的值。

以下示例将 TheBloke/Mistral-7B-OpenOrca-AWQ 模型的 AWQ 模块进行融合。

import torch
from transformers import AwqConfig, AutoModelForCausalLM

quantization_config = AwqConfig(
    bits=4,
    fuse_max_seq_len=512,
    do_fuse=True,
)
model = AutoModelForCausalLM.from_pretrained(
  "TheBloke/Mistral-7B-OpenOrca-AWQ",
  quantization_config=quantization_config
).to(0)

TheBloke/Mistral-7B-OpenOrca-AWQ 模型在 batch_size=1 的设置下,分别使用和不使用融合模块进行了基准测试。

未融合模块
批处理大小预填充长度解码长度预填充令牌/秒解码令牌/秒内存(VRAM)
1323260.098438.45374.50 GB (5.68%)
164641333.6731.66044.50 GB (5.68%)
11281282434.0631.62724.50 GB (5.68%)
12562563072.2638.17314.50 GB (5.68%)
15125123184.7431.68194.59 GB (5.80%)
1102410243148.1836.80314.81 GB (6.07%)
1204820482927.3335.26765.73 GB (7.23%)
融合模块
批处理大小预填充长度解码长度预填充令牌/秒解码令牌/秒内存(VRAM)
1323281.489980.25694.00 GB (5.05%)
164641756.1106.264.00 GB (5.05%)
11281282479.32105.6314.00 GB (5.06%)
12562561813.685.74854.01 GB (5.06%)
15125122848.997.7014.11 GB (5.19%)
1102410243044.3587.73234.41 GB (5.57%)
1204820482715.1189.47095.57 GB (7.04%)

融合模块和非融合模块的速度与吞吐量也使用 optimum-benchmark 库进行了测试。

generate throughput per batch size
前向传播峰值内存/批大小
forward latency per batch size
生成吞吐量/批大小

ExLlamaV2

ExLlamaV2 内核支持更快的预填充和解码。运行以下命令以安装支持 ExLlamaV2 的最新版本 autoawq。

pip install git+https://github.com/casper-hansen/AutoAWQ.git

在 AwqConfig 中设置 version="exllama" 以启用 ExLlamaV2 内核。

ExLlamaV2 支持 AMD GPU。

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer, AwqConfig

quantization_config = AwqConfig(version="exllama")

model = AutoModelForCausalLM.from_pretrained(
    "TheBloke/Mistral-7B-Instruct-v0.1-AWQ",
    quantization_config=quantization_config,
    device_map="auto",
)

资源

运行 AWQ 演示 notebook,以获取更多关于如何量化模型、将量化后的模型推送到 Hub 等的示例。

Update on GitHub