Transformers documentation
BitNet
BitNet
BitNet, Multi-Head Attention ve ileri beslemeli ağlardaki geleneksel doğrusal katmanları, özel BitLinear katmanlarıyla değiştirir. BitLinear katmanları, ağırlıkları üçlü hassasiyetle (değerler -1, 0 ve 1) ve aktivasyonları 8-bit hassasiyetle kuantize eder.
BitNet modelleri çalışma anında (on the fly) kuantize edilemez. Kuantizasyon Farkındalıklı Eğitim (QAT) tekniği olduğu için, kuantizasyonun ön eğitim veya ince ayar sırasında yapılması gerekir. Eğitim sırasında ağırlıklar, simetrik gerginlik başına (per tensor) kuantizasyon kullanılarak üçlü (ternary) değerlere kuantize edilir.
- Ağırlık matrisinin mutlak değerlerinin ortalamasını hesaplayın ve bir ölçek olarak kullanın.
- Ağırlıkları ölçekle bölün, değerleri yuvarlayın, -1 ile 1 arasında sınırlayın ve tam hassasiyette devam etmek için yeniden ölçekleyin.
- Aktivasyonlar, absmax kuantizasyonu (simetrik kanal başına kuantizasyon) kullanılarak belirtilen bit genişliğine (8-bit) kuantize edilir. Bu işlem, aktivasyonların [−128,127] aralığına ölçeklenmesini içerir.
1,58-bit bir modeli Nanotron ile ön eğitmek veya ince ayar yapmak için bu PR'a başvurun. İnce ayar için bir modeli Hugging Face formatından Nanotron formatına dönüştürün. Dönüştürme adımlarını bu PR'da bulabilirsiniz.
BitNet ile kuantize edilmiş bir modeli from_pretrained() ile yükleyin.
from transformers import AutoModelForCausalLM
path = "/path/to/model"
model = AutoModelForCausalLM.from_pretrained(path, device_map="auto")Çekirdekler
@torch.compile, ağırlıkları açmak ve ileri geçişi (forward pass) gerçekleştirmek için kullanılır. Uygulanması çok basittir ve önemli hız iyileştirmeleri sağlar. Gelecek sürümlerde ek optimize edilmiş çekirdekler (kernels) entegre edilecektir.
Kaynaklar
BitNet modellerinin nasıl eğitildiğini ve ince ayarlandığını öğrenmek için Fine-tuning LLMs to 1.58bit: extreme quantization made easy makalesini okuyun.
Update on GitHub