Büyük dil modellerini (LLM) belirli bir görev veya alan için özelleştirmek istediğinizde karşınıza iki seçenek çıkar: tam ince ayar (full fine-tuning) veya parametre verimli ince ayar (PEFT) yöntemleri. LoRA (Low-Rank Adaptation), PEFT yöntemleri arasında en popüler olanıdır. Peki LoRA tam olarak nedir ve nasıl uygulanır? Bu yazıda LoRA ile LLM ince ayarını adım adım anlatıyor, pratik ipuçları ve sık yapılan hataları ele alıyoruz.
LoRA Nedir? Temel Kavramlar
LoRA, büyük dil modellerinin ağırlıklarını dondurup modele düşük ranklı matrisler ekleyerek ince ayar yapmayı sağlayan bir yöntemdir. Orijinal ağırlıklar değişmez; bunun yerine her katmana az sayıda parametre eklenir ve sadece bu parametreler eğitilir. Bu sayede GPU belleği ve eğitim süresi önemli ölçüde azalır. Örneğin, 7B parametreli bir modeli tam ince ayar yapmak için 80 GB GPU gerekirken, LoRA ile aynı işlem 16 GB bellekte yapılabilir.
LoRA'nın Avantajları Nelerdir?
- Düşük bellek ve zaman maliyeti: LoRA sayesinde tüm modeli eğitmek yerine küçük bir parametre seti optimize edilir.
- Birden çok ince ayarlanmış modeli tek tabanda saklama: Aynı temel model için farklı LoRA adaptörleri oluşturup değiştirebilirsiniz.
- Performans kaybı olmaz: Birçok görevde tam ince ayar kadar başarılı sonuçlar alınır.
- Bellek kullanımı düşük olduğu için T4 veya RTX 3060 gibi tüketici GPU'ları yeterlidir.
LoRA ile LLM İnce Ayarı Adımları
Aşağıdaki adımlar, popüler bir açık kaynak LLM üzerinde LoRA ince ayarı yapmak için kullanılabilir. Örnek olarak LLaMA 3.1 (8B) ve PEFT kütüphanesi kullanacağız.
1. Gereksinimler ve Kurulum
Python 3.10+, PyTorch, transformers, PEFT, datasets ve trl kütüphanelerini yükleyin. GPU desteği için CUDA 12.1 önerilir.
pip install torch transformers peft datasets trl
2. Model ve Tokenizer Hazırlama
Temel modeli dört bit niceleme (4-bit quantization) ile yükleyin. Bu bellek kullanımını daha da azaltır.
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
bnb_config = BitsAndBytesConfig(load_in_4bit=True)
model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.1-8B", quantization_config=bnb_config)
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.1-8B")
tokenizer.pad_token = tokenizer.eos_token
3. LoRA Konfigürasyonu
PEFT kütüphanesi ile LoRA ayarlarını yapın. Kritik parametreler:
- r (rank): Genellikle 8-64 arası. Daha yüksek rank daha fazla parametre ekler.
- lora_alpha: Adaptasyonun gücünü belirler. Genellikle 16-32.
- target_modules: Hangi katmanlara LoRA ekleneceği. Çoğu LLM için ["q_proj", "v_proj"] yeterlidir.
from peft import LoraConfig
lora_config = LoraConfig(
r=16,
lora_alpha=32,
target_modules=["q_proj", "v_proj"],
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM"
)
4. Verisetini Hazırlama
Belirli bir alan için ince ayar yapacaksanız (örneğin hasta sekreteri), bu alana ait diyalog verilerini toplayın. Veri setinizdeki metinleri tokenize edip instruction formatına dönüştürün. Örnek bir format:
{"text": "Soru: Bugün randevu saat kaçta?\nCevap: Randevunuz saat 14:30'da."}
5. Eğitim
trl kütüphanesindeki SFTTrainer kullanarak eğitimi başlatın.
from trl import SFTTrainer
trainer = SFTTrainer(
model=model,
train_dataset=dataset,
tokenizer=tokenizer,
args=transformers.TrainingArguments(
per_device_train_batch_size=4,
gradient_accumulation_steps=4,
warmup_steps=100,
max_steps=500,
learning_rate=2e-4,
logging_steps=10,
fp16=True,
),
packing=True,
)
trainer.train()
6. Modeli Kaydetme ve Yükleme
Eğitilen LoRA adaptörünü kaydedin ve sonra ana modele entegre edin.
trainer.model.save_pretrained("./lora-adapted")
# Yükleme:
from peft import PeftModel
base_model = AutoModelForCausalLM.from_pretrained(...)
adapted_model = PeftModel.from_pretrained(base_model, "./lora-adapted")
LoRA vs Diğer İnce Ayar Yöntemleri
Aşağıdaki tablo, LoRA ile tam ince ayar ve diğer PEFT yöntemleri (Prefix Tuning, AdaLoRA) arasındaki farkları özetlemektedir.
| Yöntem | Eğitilen Parametre | Bellek Kullanımı | Performans (Benzer Görev) |
|---|---|---|---|
| Tam İnce Ayar | Tüm parametreler | Çok yüksek | En iyi |
| LoRA (r=16) | %0.1-1 | Düşük | Yaklaşık tam kadar |
| Prefix Tuning | %0.01-0.1 | Çok düşük | İyi |
| AdaLoRA | Dinamik | Orta | Çok iyi |
LoRA, bellek-performans dengesi açısından en pratik seçenektir. Doğru kullanıldığında tam ince ayara yakın sonuçlar verirken bellek tüketimini %90’dan fazla azaltır.
Sık Yapılan Hatalar ve Dikkat Edilmesi Gerekenler
- Yanlış modül hedefleme: Tüm katmanları hedeflemek gereksiz bellek kullanımına yol açar. Sadece dikkat (attention) katmanlarını hedeflemek genelde yeterlidir.
- Çok düşük rank kullanmak: r=1 veya r=2 bazen yeterli olmaz. Görevin karmaşıklığına göre r=8 veya 16 ile başlayın.
- Veri seti kalitesi: LoRA bile olsa, düşük kaliteli veya az sayıda veri ile ince ayar başarısız olur. En az 1000 örnek hedefleyin.
- Learning rate çok yüksek: LoRA adaptörleri küçük olduğu için yüksek learning rate (1e-3 gibi) osilasyona neden olur. 2e-4 veya 1e-4 ideal.
- Tokenizer hizalaması: Tokenizer’da pad_token ayarlamayı unutmayın. Aksi halde trainer hata verir.
LoRA'nın Sınırlamaları ve Alternatif Kullanım Alanları
LoRA, özellikle bellek kısıtı olan ortamlar için idealdir. Bununla birlikte, modelin tüm katmanlarında değişiklik yapamadığı için bazı görevlerde tam ince ayar kadar esnek olmayabilir. Örneğin, modelin yeni bir dil öğrenmesi gerekiyorsa (dil adaptasyonu), tam ince ayar veya daha yüksek ranklı LoRA (r>64) gerekebilir. Ayrıca LoRA adaptörleri, eğitim sonrası ana model ile birleştirilebilir (merge) ancak bu işlem bellekte modelin tam boyutunu gerektirir. Eğer üretim ortamında birden çok ince ayarlı model kullanacaksanız adaptörleri ayrı tutup sıcak değiştirme (hot-swap) yapmak daha verimlidir.
LoRA uygulamasında LLM çıktılarını kontrol etme ve RAG ile çıktı iyileştirme gibi tekniklerle birleştirildiğinde çok daha güçlü sistemler elde edilebilir.
Sonuç: Ne Zaman LoRA Kullanmalısınız?
LoRA, özellikle aşağıdaki durumlarda en iyi seçenektir:
- Bellek sınırlı donanımla çalışıyorsanız (örneğin T4 16 GB).
- Birden çok ince ayarlanmış modeli aynı temel model üzerinde depolamak ve değiştirmek istiyorsanız.
- Hızlı deney yapmak ve prototip geliştirmek istiyorsanız.
- Göreviniz sınırlı sayıda etiketli veriye sahipse (birkaç bin örnek).
Eğer büyük bir veri kümeniz (yüzbin+) ve yüksek performanslı GPU'nuz varsa tam ince ayar daha iyi sonuç verebilir. Ancak çoğu uygulama için LoRA, maliyet-performans dengesi açısından altın standarttır. Prompt chaining ile birleştirdiğinizde tam teşekküllü bir AI asistanı inşa edebilirsiniz.
Sık Sorulan Sorular
LoRA ile tam ince ayar arasındaki en büyük fark nedir?
LoRA, modelin tüm ağırlıklarını değiştirmek yerine düşük ranklı adaptör matrisleri ekler ve sadece bunları eğitir. Bu sayede bellek ve eğitim süresi büyük ölçüde azalırken performans kaybı minimum olur.
LoRA kaç parametre ekler?
LoRA, taban model parametrelerinin genelde %0.1-1’i kadar ek parametre ekler. Örneğin 7B’lik bir modele r=16 ile LoRA uygulandığında yaklaşık 4-8 milyon parametre eklenir.
LoRA için hangi GPU yeterlidir?
4-bit niceleme ile birleştirildiğinde LoRA, 16 GB belleğe sahip bir GPU’da (örneğin T4 veya RTX 3060) 7B parametreli bir modeli ince ayar yapmanıza olanak tanır.
LoRA adaptörünü kalıcı olarak modele ekleyebilir miyim?
Evet, eğitim sonrası adaptör ağırlıklarını taban model ağırlıklarıyla birleştirip (merge) tek bir model dosyası elde edebilirsiniz. Ancak bu işlem bellek tüketimini artırır.






