Transformers documentation
AWQ
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.
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.
| Toplu İşlem Boyutu | Ön Doldurma Uzunluğu | Çözme Uzunluğu | Ön doldurma jetonu/sn | Çözme jetonu/sn | Bellek (VRAM) |
|---|---|---|---|---|---|
| 1 | 32 | 32 | 60.0984 | 38.4537 | 4,50 GB (%5,68) |
| 1 | 64 | 64 | 1333.67 | 31.6604 | 4,50 GB (%5,68) |
| 1 | 128 | 128 | 2434.06 | 31.6272 | 4,50 GB (%5,68) |
| 1 | 256 | 256 | 3072.26 | 38.1731 | 4,50 GB (%5,68) |
| 1 | 512 | 512 | 3184.74 | 31.6819 | 4,59 GB (%5,80) |
| 1 | 1024 | 1024 | 3148.18 | 36.8031 | 4,81 GB (%6,07) |
| 1 | 2048 | 2048 | 2927.33 | 35.2676 | 5,73 GB (%7,23) |
| Toplu İşlem Boyutu | Ön Doldurma Uzunluğu | Çözme Uzunluğu | Ön doldurma jetonu/sn | Çözme jetonu/sn | Bellek (VRAM) |
|---|---|---|---|---|---|
| 1 | 32 | 32 | 81.4899 | 80.2569 | 4,00 GB (%5,05) |
| 1 | 64 | 64 | 1756.1 | 106.26 | 4,00 GB (%5,05) |
| 1 | 128 | 128 | 2479.32 | 105.631 | 4,00 GB (%5,06) |
| 1 | 256 | 256 | 1813.6 | 85.7485 | 4,01 GB (%5,06) |
| 1 | 512 | 512 | 2848.9 | 97.701 | 4,11 GB (%5,19) |
| 1 | 1024 | 1024 | 3044.35 | 87.7323 | 4,41 GB (%5,57) |
| 1 | 2048 | 2048 | 2715.11 | 89.4709 | 5,57 GB (%7,04) |
Füzyonlu ve füzyonsuz modüllerin hızı ve verimliliği de optimum-benchmark kütüphanesiyle test edildi.
Füzyonlu modülleri desteklemeyen mimariler için bir AwqConfig oluşturun ve füzyonlanması gereken modülleri belirlemek için modules_to_fuse içinde özel bir füzyon eşlemesi tanımlayın.
Aşağıdaki örnek, TheBloke/Yi-34B-AWQ modelinin AWQ modüllerini birleştirir.
import torch
from transformers import AwqConfig, AutoModelForCausalLM
quantization_config = AwqConfig(
bits=4,
fuse_max_seq_len=512,
modules_to_fuse={
"attention": ["q_proj", "k_proj", "v_proj", "o_proj"],
"layernorm": ["ln1", "ln2", "norm"],
"mlp": ["gate_proj", "up_proj", "down_proj"],
"use_alibi": False,
"num_attention_heads": 56,
"num_key_value_heads": 8,
"hidden_size": 7168
}
)
model = AutoModelForCausalLM.from_pretrained(
"TheBloke/Yi-34B-AWQ",
quantization_config=quantization_config
).to(0)modules_to_fuse parametresi aşağıdaki anahtarları içermelidir.
"attention": Sırasıyla query, key, value ve output projection katmanları olmak üzere birleştirilecek attention katmanlarının adları. Bu katmanları birleştirmek istemiyorsanız boş bir liste iletin."layernorm": Özel birleştirilmiş bir LayerNorm ile değiştirmek istediğiniz tüm LayerNorm katmanlarının adları. Bu katmanları birleştirmek istemiyorsanız boş bir liste iletin."mlp": Tek bir MLP katmanına birleştirmek istediğiniz MLP katmanlarının adları, sırasıyla: (gate (dense, layer, post-attention) / up / down katmanları)."use_alibi": Modeliniz ALiBi konumsal gömme kullanıyorsa."num_attention_heads": Dikkat başlarının sayısı."num_key_value_heads": Grouped Query Attention (GQA) uygulamasında kullanılması gereken key value başlarının sayısı.parametre değeri attention num_key_value_heads=num_attention_headsÇok Başlı Dikkat num_key_value_heads=1Çoklu Sorgu Dikkat num_key_value_heads=...Gruplanmış Sorgu Dikkat "hidden_size": Gizli temsillerin 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