QLoRA LoRA PEFT Fine-tuning Kuantizasyon LLM GPU

QLoRA Nedir? 4-bit Kuantizasyon ile LLM İnce Ayarı

Orta
person Yapay Zeka Uzmanı
list_altİçindekilerexpand_more
  1. 01LLM İnce Ayarının Bellek Sorunu
  2. 02LoRA’dan QLoRA’ya
  3. 034-bit NF4 Nedir?
  4. 04Paged Optimizers
  5. 05PEFT Ailesi İçinde QLoRA
  6. 06Bellek Karşılaştırması
  7. 07Desteklenen Modeller
  8. 08Kalite Kaybı
  9. 09Sınırlamalar ve Dikkat Edilmesi Gerekenler
  10. 10Servis Alma ve vLLM Entegrasyonu
  11. 11Knowledge Distillation ile İlişki
  12. 12Araç Ekosistemi
  13. 13Tam Fine-Tuning vs LoRA vs QLoRA

QLoRA: 4-bit NF4 kuantizasyon ile dondurulmuş ağırlıklara bağlanan düşük boyutlu LoRA adaptörleri

70 milyar parametreli bir modeli kendi bilgisayarında ince ayar yapmak, 2023 öncesinde hayal bile edilemezdi. Şimdi bu mümkün; tek bir oyun GPU’su yeterli. Bunu gerçeğe dönüştüren tekniklerden en yaygın olanı QLoRA.

QLoRA (Quantized Low-Rank Adaptation), 2023’te Tim Dettmers ve ekibi tarafından yayımlanan bir araştırmayla tanıtıldı. Temel fikir şu: modelin öğrenilmiş ağırlıklarını 4-bit formatına sıkıştır, ince ayar sırasında yalnızca küçük ek matrisleri güncelle. Bellek ve hesaplama maliyeti düşer; model kalitesi tam hassasiyetli eğitime yakın kalır.

LLM İnce Ayarının Bellek Sorunu

Bir modeli tam hassasiyetle (bf16 ya da fp32) fine-tune etmek, modelin ağırlıklarının çok ötesinde bellek gerektirir. 7 milyar parametreli bir model bf16 ile eğitildiğinde yaklaşık 14 GB yalnızca ağırlıklar için harcanır. Buna gradyanlar (aynı boyut), optimizer durumları (AdamW için ağırlıkların iki katı), aktivasyonlar ve batch verileri eklenince toplam 80-100 GB VRAM’in üzerine çıkabilir.

70B model için bu hesap 500 GB’a dayanır. Bir değil, birkaç A100 gerektirir; araştırma merkezlerine özgü bir senaryo.

QLoRA bu sorunu iki aşamada çözer: önce modeli 4-bit NF4 formatına sıkıştırır, ardından LoRA adaptörleri aracılığıyla yalnızca küçük bir parametre kümesini günceller.

LoRA’dan QLoRA’ya

LoRA + Unsloth ile LLM fine-tuning rehberi’nde LoRA’nın pratik kullanımı ayrıntılı ele alınmıştır. Kavramı kısaca hatırlatmak gerekirse: LoRA, orijinal model ağırlıklarını değiştirmek yerine her katmana iki küçük matris ekler.

Bir katmanın ağırlık matrisi W (örneğin 4096×4096) olsun. LoRA bunu doğrudan eğitmek yerine şunu öğrenir:

ΔW = A × B

Burada A ve B çok daha küçük boyutludur (örneğin 4096×16 ve 16×4096, rank=16 için). Bu, milyarlarca parametreyi milyonlarca parametre ile ince ayar yapmak demektir.

QLoRA, bunu bir adım ileriye taşır: modelin asıl ağırlıkları (W) 4-bit NF4 formatında dondurularak bellekte tutulur. LoRA adaptörleri ise daha yüksek hassasiyette (bf16) eğitilir. İleri geçiş sırasında 4-bit ağırlıklar geçici olarak bf16’ya dönüştürülür, hesaplama yapılır, adaptörler güncellenir. Döngü böyle devam eder; asıl model hiç değişmez.

4-bit NF4 Nedir?

INT4 veya standart GPTQ gibi 4-bit yöntemleri, ağırlıkları eşit aralıklı bir ızgaraya yuvarlar. Transformer ağırlıkları normal dağılıma (Gaussian) yakın bir yapıya sahip olduğundan, bu eşit ızgara dağılımı verimsiz temsil eder: yoğun bölgelerde çok az nokta, seyrek bölgelerde çok fazla nokta.

NF4 (NormalFloat4) bu problemi çözmek için özel olarak tasarlanmıştır. Quantization ızgarasının noktaları, normal dağılımdan bilgi-teorik açıdan en verimli konumlara yerleştirilir. Sonuç: aynı bit genişliğinde daha az bilgi kaybı.

QLoRA bunu çift kuantizasyon (double quantization) ile destekler. Kuantizasyon sabitleri de ayrıca 8-bit’e sıkıştırılır; bu tek başına 65B modelde yaklaşık 3 GB ek tasarruf demektir.

Paged Optimizers

Uzun dizilerle eğitim yapıldığında, optimizer durumları beklenmedik anlarda GPU belleğinde patlamalara yol açar. QLoRA bunu NVIDIA’nın birleşik bellek mekanizmasıyla çözer.

Paged Optimizers, optimizer durumlarını CPU RAM’ine sayfalandırır: GPU belleğine ihtiyaç duyulduğunda geri taşınır. Bu, modeli OOM (Out of Memory) hatasıyla çökertmeden uzun bağlamlar üzerinde eğitimi mümkün kılar.

PEFT Ailesi İçinde QLoRA

PEFT (Parameter-Efficient Fine-Tuning), büyük bir modeli yeniden eğitmek yerine küçük parametre kümelerini güncelleyerek uyarlama yaklaşımının genel adıdır. Başlıca yöntemleri:

  • LoRA / QLoRA: düşük boyutlu matris adaptörleri
  • Prefix Tuning: giriş dizisine öğrenilebilir token’lar ekler
  • Prompt Tuning: yalnızca giriş embedding’lerini eğitir
  • Adapter Layers: katmanlar arasına küçük sinir ağı blokları yerleştirir

QLoRA bu kategoriler içinde en geniş benimsemeye kavuşmuş yöntemdir. Temel nedeni tüketici donanımında çalışabilmesidir: 24 GB VRAM’li bir GPU (RTX 3090, RTX 4090) ile 7B model, 48 GB ile 13B, 80 GB A100 ile 70B model ince ayarı yapılabilir.

Bellek Karşılaştırması

Yöntem7B Model13B Model70B Model
Full fine-tuning (bf16)~80 GB~150 GB~600+ GB
LoRA (bf16)~30 GB~55 GB~220 GB
QLoRA (NF4)~10 GB~18 GB~48 GB

Gerçek bellek kullanımı batch boyutuna, dizi uzunluğuna ve gradient checkpointing ayarlarına göre farklılaşır. Ancak büyüklük farkı gerçektir; QLoRA olmadan erişilemeyen modeller artık erişilebilir hale gelir.

Desteklenen Modeller

QLoRA teorik olarak herhangi bir transformer’a uygulanabilir. Yaygın kombinasyonlar:

  • Llama 3.1 / 3.3 (8B, 70B): Meta’nın açık ağırlıklı modelleri, QLoRA için standart test zemini
  • Mistral / Mixtral: Mixtral bile 4-bit ile tek GPU’ya sığdırılabilir
  • Qwen 2.5 (7B, 14B, 32B): Çok dilli görevler için popüler
  • Gemma 2 / 3: Google’ın açık modelleri, PEFT kütüphanesiyle tam uyumlu
  • Phi-4: Microsoft’un küçük ve yetenekli modeli

HuggingFace’in peft ve bitsandbytes kütüphaneleri bu modellerin tamamını destekler. Unsloth ise belirli modeller için 2-5× hız artışı ve ek bellek tasarrufu sunan optimize bir alternatiftir.

Kalite Kaybı

Dettmers ve ekibinin orijinal makalesi, QLoRA ile eğitilen modellerin tam hassasiyetli LoRA eğitimine çok yakın performans gösterdiğini ortaya koydu. O dönemin Chatbot Arena değerlendirmesinde QLoRA ile ince ayar yapılmış Guanaco modeli ChatGPT-3.5’i bazı kategorilerde geçti.

Kalite farkını etkileyen başlıca faktörler:

  • Rank (r) değeri: Daha yüksek r, daha fazla parametre ve daha iyi kalite; ancak aynı zamanda daha fazla bellek.
  • Hedeflenen katmanlar: Yalnızca q_proj ve v_proj yerine tüm lineer katmanları hedeflemek genellikle daha iyi sonuç verir.
  • Eğitim adım sayısı ve öğrenme oranı: QLoRA bu açıdan tam fine-tuning’den farklı değildir; hiperparametre seçimi kritiktir.

Çok uzun bağlamlarda (32k+ token) ve çok küçük veri setlerinde (100’den az örnek) kalite farkı daha belirgin olabilir.

Pratikte r=16 ile r=64 arasında bir değer ve tüm lineer katmanların hedeflenmesi genellikle iyi bir başlangıç noktasıdır. Çok özel bir görev için ince ayar yapıyorsanız (tek dil, tek alan), daha küçük r değerleri yeterli kalite verirken bellek kullanımını azaltır. Genel amaçlı bir model elde etmek istiyorsanız r=128 ve daha geniş hedefleme daha güvenli bir seçimdir.

Sınırlamalar ve Dikkat Edilmesi Gerekenler

Eğitim hızı: İleri geçiş sırasında yapılan 4-bit → bf16 dönüşümü ek hesaplama maliyeti ekler. Full fine-tuning’e kıyasla %20-30 daha yavaş eğitim beklenmeli.

Birleştirme sonrası hata birikimi: Adaptörler birleştirildikten sonra model tam bf16 ağırlıklarına kavuşur; ancak NF4 → bf16 dönüşümünde oluşan yuvarlama hataları küçük de olsa birikir. Kritik uygulamalarda kapsamlı değerlendirme gerekir.

Uzun bağlamlarda bellek yönetimi: Çok uzun dizilerle eğitimde, özellikle gradient checkpointing kapalı olduğunda, beklenmedik OOM hataları görülebilir. Paged Optimizers bu riski azaltır; tamamen ortadan kaldırmaz.

MoE modellerde yük dengesi: Mixtral gibi sparse modellerde tüm uzman katmanları eşit güncellenmeyebilir; ince ayar sonrasında expert kullanım dağılımını izlemek önerilir.

Gradient checkpointing ve double quantization: QLoRA eğitiminde gradient_checkpointing=True ayarı neredeyse her zaman açık tutulmalıdır. Aktivasyonları yeniden hesaplama yoluyla serbest bırakan bu ayar, yaklaşık yüzde on beş eğitim yavaşlaması karşılığında kayda değer VRAM tasarrufu sağlar. bnb_4bit_use_double_quant=True ise kuantizasyon sabitlerini sekiz bit’e sıkıştırarak 65B modelde yaklaşık üç buçuk GB ek alan açar. İki ayarın birlikte kullanımı, özellikle bellek sınırında çalışan yapılandırmalarda kritik fark yaratır.

Servis Alma ve vLLM Entegrasyonu

Fine-tuning tamamlandıktan sonra iki seçenek var: LoRA adaptörlerini temel modelle birleştirerek tek bir model elde etmek ya da adaptörleri ayrı tutmak. Birleştirme (merge) işlemi peft’in merge_and_unload() fonksiyonu ya da mergekit aracıyla yapılır; sonuç olarak adaptör gerektirmeyen, doğrudan çalıştırılabilir bir model çıkar.

vLLM adaptörleri birleştirmeden servise almayı destekler: çalışma zamanında LoRA adaptörlerini dinamik olarak yükleyebilir. Bu, tek bir temel model üzerinde birçok farklı fine-tuned versiyonu aynı anda sunmayı mümkün kılar; her müşteri ya da görev için ayrı model çalıştırmak yerine tek bir temel model üzerine istenen adaptör yüklenir.

Çıkarım hızını daha da artırmak isteyenler speculative decoding ile QLoRA modellerini kombine edebilir.

Knowledge Distillation ile İlişki

Knowledge distillation, büyük bir öğretmen modelin bilgisini küçük bir öğrenci modele aktarır. QLoRA burada iki farklı rolde kullanılabilir: öğretmen modeli belirli bir domain için fine-tune etmek ya da damıtılmış öğrenci modeli bir göreve uyarlamak. İki teknik birbiriyle çelişmez; birlikte kullanılabilir.

Araç Ekosistemi

QLoRA ile başlamak için temel araçlar:

  • HuggingFace PEFT: QLoRA dahil tüm PEFT yöntemleri için referans kütüphane
  • bitsandbytes: 4-bit/8-bit kuantizasyon için C++ arka ucu
  • Unsloth: Llama, Mistral, Qwen için optimize edilmiş eğitim; 2× daha hızlı, daha az bellek kullanımı
  • Axolotl: YAML tabanlı konfigürasyonla kolay fine-tuning pipeline’ı
  • LLaMA-Factory: Web arayüzü bulunan fine-tuning platformu

Yerel çıkarım için modeli Ollama ya da llama.cpp ile çalıştırmak isteyenler önce adaptörleri temel modelle birleştirip ardından GGUF formatına dönüştürmelidir. llama.cpp reposundaki convert_hf_to_gguf.py ve ardından llama-quantize aracı bu dönüşümü sağlar. Dört bit GGUF olarak kaydedilen yedi milyar parametreli bir model sekiz GB RAM’de bile kabul edilebilir hızda çalışır; bu yol, bulut çıkarım maliyetini sıfıra indirmenin pratik yoludur. Daha yüksek hız gerektiren üretim senaryolarında ise birleştirme sonrası vLLM ile servis almak daha uygundur.

Tam Fine-Tuning vs LoRA vs QLoRA

ÖzellikFull FTLoRAQLoRA
VRAM gereksinimiÇok yüksekOrtaDüşük
Eğitim hızı (göreceli)~1×~0.7-0.8×
Model kalitesiTavanYakınYakın (küçük kayıp)
Tüketici GPU’da çalışırHayırKısmenEvet
Birleştirme gerektirir miHayırİsteğe bağlıİsteğe bağlı

QLoRA’nın asıl katkısı teknik değil pratik: 70B gibi büyük modelleri araştırmacıların, bağımsız geliştiricilerin ve küçük ekiplerin erişebildiği donanımda çalışır hale getirdi. Şirket verisi üzerinde Llama 3’ü ince ayar yapmak artık veri merkezine erişim gerektirmiyor; tek bir güçlü oyun bilgisayarı yeterli.

Teknoloji ne kadar olgunlaştıysa da hâlâ bazı kararlar gerektiriyor: hangi katmanları hedefleyeceksiniz, rank değeriniz ne olacak, veri setiniz yeterince büyük mü? Bunlar deneyimle gelişen sorular. Başlamak için en iyi yol küçük bir veri setiyle, küçük bir modelle (7B), birkaç epoch denemek ve değerlendirme metriklerinizi izlemektir. Oradan büyütmek çok daha kolay.

auto_stories İlgili Makaleler