LoRA (Low-Rank Adaptation) ile Dev Modelleri Hafifletmek Mümkün mü?

LoRA ile Parametre Verimliliği: Teoriden Uygulamaya
Büyük dil modelleri (LLM) birçok görevde etkileyici başarılar sergilese de, onları alanınıza özgü şekilde fine-tune etmek ciddi hesaplama kaynakları gerektiriyor. LoRA (Low-Rank Adaptation), bu problemi çözmek için önerilen verimli ve hafif bir çözümdür. Bu yazıda, LoRA’nın nasıl çalıştığını matematiksel olarak açıklayacak, Hugging Face 🤗 Transformers ile nasıl uygulanacağını göstereceğiz.
LoRA Neden Gereklidir?
Klasik fine-tuning sırasında modelin tüm ağırlıkları güncellenir:
Yüksek VRAM ihtiyacı
Yavaş eğitim süreci
Büyük veri gereksinimi
LoRA, bu süreci yalnızca belirli parametreleri low-rank matrislerle güncelleyerek çok daha verimli hâle getirir.
Temel Matematik: Low-Rank Approximation
Standart bir Transformer katmanında, örneğin bir W_q
ağırlık matrisi Rd×k boyutundadır.
LoRA, bu matrisin güncellemesini şöyle tanımlar:
ΔW=AB A∈Rd×r, B∈Rr×k, r≪d,k
Yani,
W′=W+α⋅AB
Burada α bir ölçekleme faktörüdür ve genellikle küçük bir sabittir (8, 16).
Böylece:
W değişmez (frozen) kalır,
Yalnızca A ve B öğrenilir (toplam parametre r · (d + k)).
Hugging Face ile LoRA Kullanımı
Aşağıda, peft
kütüphanesiyle Hugging Face LLM'lerine nasıl LoRA entegre edileceğini gösteren minimal bir örnek var:
1. Ortam Kurulumu
pip install transformers accelerate datasets peft bitsandbytes
2. Model ve Tokenizer Yükleme
from transformers import AutoModelForCausalLM, AutoTokenizer
base_model = "tiiuae/falcon-7b" tokenizer = AutoTokenizer.from_pretrained(base_model) model = AutoModelForCausalLM.from_pretrained( base_model, load_in_8bit=True, device_map="auto" )
3. LoRA ile PEFT Ayarları
from peft import get_peft_model, LoraConfig, TaskType
peft_config = LoraConfig( r=8, lora_alpha=16, target_modules=["query_key_value"], lora_dropout=0.1, bias="none", task_type=TaskType.CAUSAL_LM)
model = get_peft_model(model, peft_config) model.print_trainable_parameters()
4. Eğitim
from transformers import Trainer, TrainingArguments
training_args = TrainingArguments( output_dir="./lora-output", per_device_train_batch_size=4, gradient_accumulation_steps=4, num_train_epochs=3, learning_rate=2e-4, fp16=True, logging_steps=10, save_strategy="epoch" )
trainer = Trainer( model=model, args=training_args, train_dataset=your_dataset, tokenizer=tokenizer )
trainer.train()
Performans Kazançları
Falcon-7B gibi modelleri 8 GB VRAM ile eğitmek mümkün
Eğitim süreci klasik fine-tuning'e göre 10-20 kat kısa
LoRA ağırlıkları (adapter_model.bin) sadece MB seviyesinde
Kolayca başka sistemlerde kullanılabilir veya paylaşılabilir
Sonuç
LoRA, devasa modelleri kişiselleştirmenin en uygun yollarından biri. Düşük kaynak gereksinimiyle çok etkili sonuçlar elde etmek mümkün.