Nasıl Çalışır?
QLoRA, temel modeli 4-bit NF4 formatında dondurur ve bu modelin üzerine eğitilebilir LoRA adaptörleri ekler. İleri geçişte 4-bit ağırlıklar BF16'ya geçici olarak dönüştürülür, hesaplama tamamlanır ve dönüştürülen değerler atılır. Gradyanlar yalnızca adaptör parametrelerinden (düşük rankli A ve B matrisleri) geçer; temel ağırlıklar hiçbir zaman güncellenmez. Bu sayede eğitim sırasında bellekte yalnızca adaptörler ve geçici hesaplamalar yer kaplar.
4-bit NormalFloat (NF4): Bilgi Teorisi Açısından Optimal Kuantizasyon
NF4, sinir ağı ağırlıklarının genellikle sıfır merkezli normal dağılım izlediği gözleminden hareket eder. Quantile Quantization yöntemini baz alan NF4, ağırlıkları bu dağılıma göre eşit olasılıklı bölgelere böler. Böylece standart INT4 veya FP4'e kıyasla daha az bilgi kaybıyla kuantizasyon yapılır. Benchmark testlerinde NF4, FP4'ün yaklaşık 1 puan üzerinde MMLU (5-shot) doğruluğu elde eder.
Çift Kuantizasyon ve Sayfalı Optimize Ediciler
Çift Kuantizasyon, ilk kuantizasyon adımından çıkan sabitleri (ölçek faktörleri ve sıfır noktaları) ikinci kez kuantize eder. Bu işlem parametre başına ortalama 0,37 bit tasarruf yaratır; 65 milyar parametreli modelde bu ~3 GB'a karşılık gelir. Sayfalı Optimize Ediciler ise NVIDIA'nın Unified Memory özelliğini kullanır: GPU belleği dolduğunda optimizer durumları otomatik olarak CPU RAM'ine taşınır, uzun dizilerde bellek taşması hataları engellenir.
Bellek Tasarrufu: Sayılarla Karşılaştırma
65B parametreli bir modeli tam ince ayarlamak için ~1 TB GPU belleği gerekirken LoRA (16-bit taban) bunu ~130 GB'a, QLoRA ise ~48 GB'a düşürür. 7B-8B modeller için QLoRA ile eğitim, 10 GB altında VRAM gerektirir; bu, RTX 3090 (24 GB) veya RTX 4070 Ti (12 GB) ile yapılabilir anlamına gelir. Araştırmacılar artık çok GPU'lu sunucu kiralamak yerine tek bir tüketici kartıyla özel veri kümeleri üzerinde model özelleştirmesi yapabilmektedir.
⚡ QLoRA ile Büyük Model İnce Ayar Adımları
- check_circle 4-bit nicemleme uygulayın: bitsandbytes kütüphanesiyle NF4 niceleme taban modeli küçültür
- check_circle LoRA adaptörlerini ekleyin: nicelenen modelin üzerine eğitilebilir düşük rank matrisler yerleştirin
- check_circle İkili niceleme: niceleme sabitlerini de niceleyerek bellek kullanımını daha da düşürün
- check_circle Sayfalı 8-bit optimizasyon: CUDA bellek taşmasında CPU'ya aktarım yapan özel Adam optimizörü
- check_circle Eğitim sonrası adaptörleri birleştirin: LoRA ağırlıklarını taban modelle merge edip tek dosya elde edin
LoRA ile Temel Farklar
Standart LoRA, taban modeli 16-bit (FP16 veya BF16) hassasiyetle saklar; QLoRA ise bunu 4-bit NF4'e indirger. Her ikisi de yalnızca adaptör matrislerini eğitir, ancak QLoRA'da adaptörler BF16 hassasiyetiyle çalışır. Bu fark bellek kullanımını yaklaşık yarıya indirir. Kalite açısından NF4 ve çift kuantizasyon kombinasyonu, benchmark testlerinde 16-bit LoRA kalitesine eşit veya çok yakın sonuçlar üretir. Orijinal QLoRA çalışmasındaki Guanaco modeli (65B), OASST1 verisiyle 24 saatte ince ayarlanmış ve Vicuna benchmark'ında ChatGPT ile yarışabilir düzeye gelmiştir.