Transformers documentation

Modülleri tam hassasiyette tutun

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v5.23.0).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

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_head ile 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_modules iç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_modules iç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ümanYöntemler
modules_to_not_convertAWQ, 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_modulesbitsandbytes, hem 4-bit hem de 8-bit modda
skip_modulesHQQ

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.mlp ile eşleşir ancak model.layers.11.mlp ile 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.gate veya gpt-oss'teki mlp.router gibi 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