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

Activation-aware Weight Quantization (AWQ) mempertahankan sebagian kecil bobot yang penting untuk kinerja LLM guna mengompres model menjadi 4-bit dengan degradasi kinerja yang minimal.

Terdapat beberapa pustaka untuk mengkuantisasi model dengan algoritma AWQ, seperti llm-awq, autoawq, atau optimum-intel. Transformers mendukung pemuatan model yang telah dikuantisasi dengan pustaka llm-awq dan autoawq. Panduan ini akan menunjukkan cara memuat model yang dikuantisasi dengan autoawq, namun prosesnya serupa untuk model yang dikuantisasi dengan llm-awq.

Jalankan perintah di bawah ini untuk menginstal autoawq

pip install autoawq

AutoAWQ menurunkan versi Transformers ke 4.47.1. Jika Anda ingin melakukan inferensi dengan AutoAWQ, Anda mungkin perlu menginstal ulang versi Transformers Anda setelah menginstal AutoAWQ.

Identifikasi model yang dikuantisasi AWQ dengan memeriksa kunci quant_method di file config.json model.

{
  "_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"
  }
}

Muat model yang dikuantisasi AWQ dengan from_pretrained(). Secara default, bobot lainnya secara otomatis diatur ke fp16 demi alasan performa. Gunakan parameter dtype untuk memuat bobot lainnya dalam format yang berbeda.

Jika model dimuat di CPU, gunakan parameter device_map untuk memindahkannya ke akselerator.

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
)

Gunakan attn_implementation untuk mengaktifkan FlashAttention2 guna mempercepat inferensi lebih lanjut.

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
)

Modul yang digabungkan

Modul fused menawarkan akurasi dan performa yang lebih baik. Modul AWQ untuk arsitektur Llama dan Mistral didukung secara bawaan, tetapi Anda juga dapat mem-fuse modul AWQ untuk arsitektur yang tidak didukung.

Modul yang digabungkan (fused) tidak dapat dikombinasikan dengan teknik optimasi lainnya seperti FlashAttention2.

arsitektur yang didukung
arsitektur yang tidak didukung

Buat AwqConfig dan atur parameter fuse_max_seq_len serta do_fuse=True untuk mengaktifkan modul yang difusi. Parameter fuse_max_seq_len adalah panjang sekuens total, yang harus mencakup panjang konteks dan panjang generasi yang diharapkan. Atur ke nilai yang lebih besar untuk kepastian.

Contoh di bawah ini menggabungkan modul AWQ dari model TheBloke/Mistral-7B-OpenOrca-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)

Model TheBloke/Mistral-7B-OpenOrca-AWQ diuji dengan batch_size=1 dengan dan tanpa modul yang digabungkan.

Modul yang tidak digabungkan
Ukuran BatchPanjang PrefillPanjang DekodeToken prefill/detikToken/s saat decodeMemori (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%)
Modul terpadu
Ukuran BatchPanjang PrefillPanjang DekodeToken prefill/detikToken/s saat decodeMemori (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%)

Kecepatan dan throughput modul yang difusi dan tidak difusi juga diuji menggunakan pustaka optimum-benchmark.

generate throughput per batch size
memori puncak forward/ukuran batch
forward latency per batch size
generate throughput/ukuran batch

ExLlamaV2

Kernel ExLlamaV2 mendukung prefill dan decoding yang lebih cepat. Jalankan perintah di bawah ini untuk menginstal versi terbaru autoawq dengan dukungan ExLlamaV2.

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

Setel version="exllama" di AwqConfig untuk mengaktifkan kernel ExLlamaV2.

ExLlamaV2 didukung pada GPU AMD.

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

Sumber daya

Jalankan notebook demo AWQ untuk melihat lebih banyak contoh cara mengkuantisasi model, mendorong model terkuantisasi ke Hub, dan lainnya.

Update on GitHub