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), LLM performansında önemli olan ağırlıkların küçük bir kısmını koruyarak modeli, performans kaybını en aza indirgeyerek 4-bite sıkıştırır.

AWQ algoritmasıyla modelleri kuantize etmek için llm-awq, autoawq veya optimum-intel gibi çeşitli kütüphaneler mevcuttur. Transformers, llm-awq ve autoawq kütüphaneleriyle kuantize edilmiş modellerin yüklenmesini destekler. Bu kılavuz, autoawq ile kuantize edilmiş modellerin nasıl yükleneceğini gösterir; ancak llm-awq ile kuantize edilmiş modeller için süreç benzerdir.

autoawq'yi yüklemek için aşağıdaki komutu çalıştırın

pip install autoawq

AutoAWQ, Transformers sürümünü 4.47.1'e düşürür. AutoAWQ ile çıkarım yapmak istiyorsanız, AutoAWQ'ı kurduktan sonra Transformers sürümünüzü yeniden kurmanız gerekebilir.

Bir AWQ-kuantize edilmiş modeli, modelin config.json dosyasındaki quant_method anahtarını kontrol ederek belirleyin.

{
  "_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-kuantize edilmiş modeli from_pretrained() ile yükleyin. Performans nedenleriyle bu, diğer ağırlıkları varsayılan olarak fp16 olarak ayarlar. Bu diğer ağırlıkları farklı bir biçimde yüklemek için dtype parametresini kullanın.

Model CPU'da yüklendiyse, onu bir hızlandırıcıya taşımak için device_map parametresini kullanın.

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
)

FlashAttention2 ile çıkarımı daha da hızlandırmak için attn_implementation kullanın.

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
)

Birleştirilmiş modüller

Fused modüller, daha yüksek doğruluk ve performans sunar. Llama ve Mistral mimarileri için AWQ modülleri kutudan çıktığı gibi desteklenir, ancak desteklenmeyen mimariler için de AWQ modüllerini füze edebilirsiniz.

Fused modüller, FlashAttention2 gibi diğer optimizasyon teknikleriyle birleştirilemez.

desteklenen mimariler
desteklenmeyen mimariler

Bir AwqConfig oluşturun ve füzyonlu modülleri etkinleştirmek için fuse_max_seq_len ve do_fuse=True parametrelerini ayarlayın. fuse_max_seq_len parametresi toplam dizi uzunluğudur ve bağlam uzunluğunu ile beklenen üretim uzunluğunu içermelidir. Güvenli olmak için daha büyük bir değer ayarlayın.

Aşağıdaki örnek, TheBloke/Mistral-7B-OpenOrca-AWQ modelinin AWQ modüllerini birleştirir.

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 modeli, füzyonlu modüllerle ve modüller olmadan, batch_size=1 ile test edildi.

Birleştirilmemiş modül
Toplu İşlem BoyutuÖn Doldurma UzunluğuÇözme UzunluğuÖn doldurma jetonu/snÇözme jetonu/snBellek (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)
Birleştirilmiş modül
Toplu İşlem BoyutuÖn Doldurma UzunluğuÇözme UzunluğuÖn doldurma jetonu/snÇözme jetonu/snBellek (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)

Füzyonlu ve füzyonsuz modüllerin hızı ve verimliliği de optimum-benchmark kütüphanesiyle test edildi.

generate throughput per batch size
ileri yönlü tepe bellek/batch boyutu
forward latency per batch size
üretim hızı/toplu işlem boyutu

ExLlamaV2

ExLlamaV2 çekirdekleri daha hızlı prefill ve decoding destekler. ExLlamaV2 desteğine sahip en son autoawq sürümünü yüklemek için aşağıdaki komutu çalıştırın.

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

ExLlamaV2 çekirdeklerini etkinleştirmek için AwqConfig içinde version="exllama" değerini ayarlayın.

ExLlamaV2, AMD GPU'lerde desteklenmektedir.

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

Kaynaklar

Modeli nasıl kuantize edeceğinize, kuantize edilmiş bir modeli Hub'a nasıl yükleyeceğinize ve daha fazlasına dair ek örnekler için AWQ demo notebook'unu çalıştırın.

Update on GitHub