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

RuneLab Team

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.