LoRA Avantajını Anlamak
Geleneksel ince ayar, önceden eğitilmiş bir modeldeki tüm parametrelerin güncellenmesini içerir. Billiyonlarca parametreye sahip bir model için bu, önemli miktarda VRAM gerektirir ve her alan uyarlaması için devasa bir model dosyası oluşturur. LoRA, Transformer'ın her katmanına eğitilebilir düşük sıralı ayrıştırma matrisleri ekleyerek bu ağırlık güncellemelerini yaklaşık olarak hesaplar. Terabaytlarca güncellenmiş ağırlık depalamak yerine, genellikle sadece birkaç yüz megabayt olan küçük uyarlama matrislerini depolarsınız. Bu yaklaşım yalnızca bellek kullanımını azaltmakla kalmaz, aynı zamanda eğitim sürelerini de önemli ölçüde hızlandırarak bireysel geliştiriciler ve orta ölçekli ekipler için erişilebilir hale getirir.Çevrenizi Hazırlama
Koda dalmadan önce gerekli kütüphanelerin yüklü olduğundan emin olun. PyTorch, `transformers` ve `peft` (Parametre Verimli İnce Ayar) kütüphanelerine ihtiyacınız olacaktır. Verimli işleme için en az 24GB VRAM'e sahip bir GPU kullanmanız şiddetle tavsiye edilir; ancak bitsandbytes gibi teknikler daha küçük donanımlarda çalışmanıza olanak tanıyabilir.Öncelikle, bir temel model yükleyelim ve LoRA yapılandırmasını uygulayalım. Aşağıda, modeli 8-bit nicelleme ile başlatmanın ve LoRA derecelerinin tanımlanmasının nasıl yapılacağını gösteren bir Python kodu örneği bulunmaktadır.
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from peft import LoraConfig, get_peft_model
import torch
# Modeli doğrudan yükle
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3-8b-instruct")
quantization_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.float16,
bnb_4bit_quant_type="nf4",
bnb_4bit_use_double_quant=True,
)
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-3-8b-instruct",
device_map="auto",
quantization_config=quantization_config,
use_cache=False,
)
# LoRA yapılandırmasını tanımla
lora_config = LoraConfig(
r=8, # Güncelleme matrisinin derecesi
lora_alpha=32,
target_modules=["q_proj", "k_proj", "v_proj", "o_proj"],
lora_dropout=0.05,
bias="none",
task_type="CAUSAL_LM",
)
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()