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.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

AWQ

Activation-aware Weight Quantization (AWQ)は、LLMの性能にとって重要な少数の重みを保持することで、性能の低下を最小限に抑えながらモデルを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"
  }
}

AWQ量子化モデルをfrom_pretrained()で読み込みます。パフォーマンス上の理由から、デフォルトでは他の重みが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
)

融合モジュール

Fused modulesは、精度とパフォーマンスの向上をもたらします。LlamaおよびMistralアーキテクチャのAWQモジュールには、標準でサポートされていますが、サポートされていないアーキテクチャのAWQモジュールもフュージョンできます。

Fused modulesは、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 で、fused modules を使用する場合と使用しない場合の両方でベンチマークされました。

非融合モジュール
バッチサイズプリフィル長デコード長プリフィル トークン/秒デコードトークン/秒メモリ(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
generateスループット/バッチサイズ

ExLlamaV2

ExLlamaV2 カーネルにより、より高速なプリフィルとデコーディングがサポートされます。ExLlamaV2 対応の最新バージョンの autoawq をインストールするには、以下のコマンドを実行してください。

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

ExLlamaV2カーネルを有効にするには、AwqConfigでversion="exllama"を設定してください。

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",
)

リソース

モデルの量子化方法、量子化済みモデルを Hub にプッシュする方法など、さらに多くの例については、AWQ デモの ノートブック を実行してください。

Update on GitHub