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

RuneLab Ekibi

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:

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:


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ı


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.