Transformers documentation
Modülleri tam hassasiyette tutun
Modülleri tam hassasiyette tutun
Bazı modüller, kuantize edildiğinde diğerlerinden daha fazla doğruluk kaybına uğrar. Bu modüllerin orijinal hassasiyetinde tutulması biraz bellek maliyeti getirir ve doğruluğun büyük kısmını geri kazanabilir. Bu durum, bir modeli yüklerken kuantize ettiğinizde geçerlidir. Önceden kuantize edilmiş bir checkpoint, hangi modüllerin atlandığını zaten kaydeder.
Varsayılan atlanan modüller
Bir atlanacak modüller listesi iletmezseniz, çoğu yöntem bu modülleri kuantize edilmeden bırakır.
- Çıktı gömlemeleri, genellikle
lm_head. lm_headile ağırlıkları paylaşan giriş gömme (embedding) gibi diğer ağırlıklara bağlı ağırlıklar.- Modelin son modülü.
- Modelin
_keep_in_fp32_modulesiçinde listelendiği modüller.
Bazı yöntemler kendi varsayılanlarını ayarlar. HQQ, FP-Quant ve Four Over Six yalnızca lm_head modülünü atlar. SINQ yalnızca _keep_in_fp32_modules içindeki modülleri atlar.
Bir atla listesi (skip list) iletin
Modül adlarını, yöntemin yapılandırmasındaki atlanacaklar listesine (skip-list) argüman olarak iletin. Aşağıdaki örnek, lm_head ve MLP aşağı yönlü projeksiyonlarını bitsandbytes ile bf16 olarak korur.
from transformers import AutoModelForCausalLM, BitsAndBytesConfig
quantization_config = BitsAndBytesConfig(
load_in_4bit=True,
llm_int8_skip_modules=["lm_head", "mlp.down_proj"],
)
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen3-0.6B",
quantization_config=quantization_config,
device_map="auto",
)Bir atlanır liste (skip list), varsayılan atlanan modüllere eklemek yerine onları değiştirir; ancak
_keep_in_fp32_modulesiçindeki modüller atlanmaya devam eder. Hâlâlm_head'in kuantize edilmemesini istiyorsanız listenize ekleyin. AWQ istisnadır ve listenizi varsayılanlara ekler.
Argümanın adı, metoda bağlıdır.
| Argüman | Yöntemler |
|---|---|
modules_to_not_convert | AWQ, EETQ, FBGEMM FP8, Fine-grained FP8, Four Over Six, FP-Quant, HIGGS, Metal, MXFP4, NVFP4, Quanto, SINQ ve torchao dahil olmak üzere çoğu yöntem |
llm_int8_skip_modules | bitsandbytes, hem 4-bit hem de 8-bit modda |
skip_modules | HQQ |
GPTQ tam tersi bir yaklaşım benimser. modules_in_block_to_quantize, kuantize edilecek modülleri listeler ve blokta kalan her şey kuantize edilmeden bırakılır.
Modül adlarını eşleştir
Çoğu yöntem, atlanacaklar listesindeki her girdiyi model.named_modules() içindeki tam modül adlarıyla, örneğin model.layers.3.mlp.down_proj gibi, eşleştirir. HQQ istisnadır ve katman adlarını birebir eşleştirir. Bir girdi üç yoldan biriyle eşleşir.
- Bir sonek olarak.
mlp.down_proj, her katmandaki aşağı projeksiyonla eşleşir. - Bir modül sınırında sona eren bir önek olarak.
model.layers.1,model.layers.1.mlpile eşleşir ancakmodel.layers.11.mlpile eşleşmez. - Aynı sınırı olan bir düzenli ifade olarak.
model\.layers\.(0|1)ilk iki katmanı eşleştirir.
Doğru girdileri bulmak için modül adlarını yazdırın.
for name, _ in model.named_modules():
print(name)Hangi modüllerin atlanacağını seçin
Yuvarlama hatasının doğruluğu en çok etkilediği ve en az bellek tasarrufu sağladığı modülleri atlayın. Varsayılanlarla başlayın, görevinizde doğruluğu ölçün ve yalnızca doğruluk düşerse modüller ekleyin.
lm_head, sözlükteki her token için logitleri üretir; bu nedenle oradaki hatalar doğrudan seçilen tokenı değiştirir. Varsayılan olarak atlanır. Büyük sözlüklere sahip modellerde ayrıca en büyük tek katmanlardan biridir; bu yüzden doğruluk korunuyorsa onu kuantizelemek gerçek bir bellek tasarrufu sağlar.- Qwen3-MoE'deki
mlp.gateveya gpt-oss'tekimlp.routergibi MoE yönlendirici veya kapı katmanları, her token'ın hangi uzmanlara gideceğini belirler. Bu katmanlar çok küçüktür ve bir yuvarlama hatası bir token'ı yanlış uzmana yönlendirebileceğinden, neredeyse her zaman atlanmaya değerler. - Görüntü-dil modellerindeki görüntü kodlayıcıları ve çok modlu projeksiyonlar, dil modeline kıyasla küçüktür ve bu bileşenlerdeki hatalar her görüntü jetonunu bozar. Görüntü anlama yeteneği düşerse bunları atlayın.
- İlk ve son birkaç decoder katmanı, orta katmanlara kıyasla genellikle daha fazla aktivasyon aykırılığına sahiptir. Kuantize edilmiş modelin doğruluğu bf16'ya göre belirgin şekilde daha kötü olduğunda bunları atlayın.
Atladığınız her modül, orijinal hassasiyetinde kalır ve bellek maliyeti oluşturur. Atlanacaklar listesine ekleme yaptıktan sonra modelin hâlâ sığıp sığmadığını kontrol edin.
Update on GitHub