Hugging Face PEFT ile LoRA İnce Ayarı
LoRA derecesini, alfa değerini ve hedef modülleri yapılandırın, TRL SFTTrainer ile denetimli ince ayar çalıştırın, eğitim kaybını izleyin ve birleştirilmiş ve yalnızca bağdaştırıcı içeren kontrol noktalarını kaydedin.
Hugging Face PEFT ile LoRA İnce Ayarı, CoddyKit'te ücretsiz bir AI Engineering Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, AI Engineering Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. AI Engineering Academy kursu toplamda 4 dersten oluşur.
Tam İnce Ayar Yerine Neden LoRA?
Tam ince ayar, bir modeldeki her parametreyi günceller. float32 duyarlılığında 7 milyar parametreli bir model için yalnızca ağırlıklar yaklaşık 28 GB GPU belleği gerektirir; optimizer durumları, gradyanlar ve etkinleştirmelerle birlikte toplam gereksinim kolayca 80-120 GB'a çıkar. LoRA (Low-Rank Adaptation) ise seçilen katmanlara uygulanan düşük dereceli matris çiftleri olarak az sayıda eğitilebilir parametre ekler (genellikle toplamın %0,1-1'i). Böylece benzer sonuçlar elde edilirken GPU gereksinimi 10-50 kat azalır.
# LoRA math intuition:
# Full fine-tuning: update W (large matrix, e.g., 4096 x 4096 = 16.7M parameters)
# LoRA: instead train W = W_0 + A @ B where:
# A has shape (4096, r) - only r*4096 params
# B has shape (r, 4096) - only r*4096 params
# r (rank) is typically 4, 8, or 16 - much smaller than 4096
# Memory comparison for 7B model:
# Full fine-tuning: ~80GB GPU RAM
# LoRA (rank=8): ~12GB GPU RAM - fits on a single A100 or 3090
print('LoRA makes fine-tuning accessible without massive GPU clusters')Gerekli Kütüphaneleri Yükleme
Hugging Face ile LoRA ince ayarı için üç kütüphane gerekir: transformers (model yükleme ve belirteçleme), peft (LoRA'yı uygulayan Parametre Verimli İnce Ayar) ve trl (denetimli ince ayar için SFTTrainer sağlayan Transformer Pekiştirmeli Öğrenmesi). Bunlar birlikte, üst düzey ve üretime hazır bir ince ayar iş akışı sunar.
# pip install transformers peft trl accelerate bitsandbytes datasets
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
from peft import LoraConfig, get_peft_model, TaskType
from trl import SFTTrainer, SFTConfig
from datasets import Dataset
import torch
print('Libraries imported successfully')
print(f'GPU available: {torch.cuda.is_available()}')
if torch.cuda.is_available():
print(f'GPU: {torch.cuda.get_device_name(0)}')
print(f'GPU memory: {torch.cuda.get_device_properties(0).total_memory / 1e9:.1f} GB')Temel Modeli Nicemlemeyle Yükleme
Çoğu LoRA ince ayarı için temel modeli bitsandbytes kullanarak 4 bit nicemleme ile yükleyin. Bu işlem, temel modelin bellek ayak izini %75 azaltır (7B model yaklaşık 14 GB'tan 4 GB'a iner) ve modelin yeteneklerinin çoğunu korur. Yalnızca LoRA bağdaştırıcı katmanları tam duyarlılıkla eğitilir. 4 bit nicemleme ile LoRA'nın birleşimine QLoRA adı verilir ve 7B modellerin ince ayarını tüketici GPU'larında erişilebilir hâle getirir.
from transformers import AutoModelForCausalLM, AutoTokenizer, BitsAndBytesConfig
import torch
MODEL_NAME = 'mistralai/Mistral-7B-Instruct-v0.2' # or 'meta-llama/Llama-3.2-3B-Instruct'
# 4-bit quantization config (QLoRA)
bnb_config = BitsAndBytesConfig(
load_in_4bit=True, # quantize base model to 4-bit
bnb_4bit_quant_type='nf4', # NF4 quantization type
bnb_4bit_compute_dtype=torch.float16, # compute in float16
bnb_4bit_use_double_quant=True # double quantization for extra savings
)
# Load quantized model
model = AutoModelForCausalLM.from_pretrained(
MODEL_NAME,
quantization_config=bnb_config,
device_map='auto', # automatically distribute across GPUs
trust_remote_code=True
)
tokenizer = AutoTokenizer.from_pretrained(MODEL_NAME)
tokenizer.pad_token = tokenizer.eos_token # required for training batches
print(f'Model loaded. Parameters: {model.num_parameters():,}')LoRA Hiperparametrelerini Yapılandırma
En önemli üç LoRA hiperparametresi şunlardır: r (derece) — düşük dereceli matrislerin boyutu; daha yüksek derece, daha fazla eğitilebilir parametre ve daha ifade gücü yüksek bir uyarlama anlamına gelir, ancak bellek kullanımını ve aşırı uyum riskini artırır. lora_alpha — genellikle derecenin 2 katı olarak ayarlanan ölçekleme katsayısı. target_modules — LoRA'nın uygulanacağı ağırlık matrisleri; dikkat katmanları (q_proj, v_proj) en yaygın tercihtir. r=8 ile başlayıp buradan ayarlayın.
from peft import LoraConfig, TaskType
lora_config = LoraConfig(
task_type=TaskType.CAUSAL_LM, # causal language modeling
r=8, # rank: 4, 8, 16, 32 — higher = more params
lora_alpha=16, # scaling: usually 2*r
lora_dropout=0.1, # dropout on LoRA layers for regularization
target_modules=['q_proj', 'v_proj', # which weight matrices to adapt
'k_proj', 'o_proj', # common to target all attention projections
'gate_proj', 'up_proj', 'down_proj'], # and FFN layers
bias='none', # do not adapt bias parameters
)
# Wrap the model with LoRA adapters
from peft import get_peft_model, prepare_model_for_kbit_training
model = prepare_model_for_kbit_training(model) # prepares quantized model for training
model = get_peft_model(model, lora_config)
model.print_trainable_parameters()
# Output: trainable params: 4,194,304 || all params: 3,752,071,168 || trainable%: 0.11%Veri Kümesini Hazırlama
SFTTrainer, veri kümelerini belirli bir biçimde bekler. En basit biçim, tamamen biçimlendirilmiş istem + yanıt dizesini içeren tek bir text sütununa sahip veri kümesidir. Konuşma örneklerini tutarlı biçimde biçimlendirmek için belirteçleyicinin sohbet şablonunu kullanın. SFTTrainer; belirteçlemeyi, toplu işlemeyi ve kayıp maskelemesini (kaybı giriş istemi için değil, yalnızca asistan yanıtları için hesaplamayı) yönetir.
from datasets import Dataset
import json
def load_and_format_dataset(jsonl_path: str, tokenizer) -> Dataset:
examples = []
with open(jsonl_path) as f:
for line in f:
ex = json.loads(line.strip())
# Apply chat template to format as expected by the model
formatted = tokenizer.apply_chat_template(
ex['messages'],
tokenize=False,
add_generation_prompt=False
)
examples.append({'text': formatted})
return Dataset.from_list(examples)
# Load training and validation datasets
train_dataset = load_and_format_dataset('train.jsonl', tokenizer)
val_dataset = load_and_format_dataset('validation.jsonl', tokenizer)
print(f'Train examples: {len(train_dataset)}')
print(f'Validation examples: {len(val_dataset)}')
print('Sample formatted text:')
print(train_dataset[0]['text'][:300])SFTTrainer ile Eğitim
TRL içindeki SFTTrainer, Hugging Face Trainer sınıfını denetimli ince ayar varsayılanlarıyla sarmalar. Bunu şu eğitim hiperparametreleriyle yapılandırın: dönem sayısı (yönerge ince ayarı için genellikle 1-3 yeterlidir), toplu işlem boyutu, gradyan biriktirme adımları (sınırlı bellekle daha büyük toplu işlemleri taklit etmek için), öğrenme oranı (2e-4 yaygın bir başlangıç değeridir) ve kontrol noktalarının çıktı dizini.
from trl import SFTTrainer, SFTConfig
training_args = SFTConfig(
output_dir='./fine-tuned-model',
num_train_epochs=2, # 2-3 epochs for instruction fine-tuning
per_device_train_batch_size=4, # increase if GPU memory allows
gradient_accumulation_steps=4, # effective batch size = 4*4 = 16
learning_rate=2e-4, # typical LoRA learning rate
warmup_ratio=0.05, # warmup for 5% of steps
lr_scheduler_type='cosine', # cosine decay learning rate schedule
logging_steps=10,
eval_strategy='steps',
eval_steps=50, # evaluate on validation set every 50 steps
save_steps=100,
max_seq_length=2048, # max token length per example
fp16=True, # mixed precision training
report_to='none' # or 'wandb' for experiment tracking
)
trainer = SFTTrainer(
model=model,
args=training_args,
train_dataset=train_dataset,
eval_dataset=val_dataset,
)
print('Starting LoRA fine-tuning...')
trainer.train()Eğitim İlerlemesini İzleme
Eğitim sırasında iki temel metriği izleyin: eğitim kaybı düzenli olarak azalmalıdır. Doğrulama kaybı önce azalmalı, ardından sabitlenmeli veya biraz artmalıdır (aşırı uyum). Eğitim kaybı azalmaya devam ederken doğrulama kaybı belirgin biçimde artıyorsa eğitimi erken durdurun — model genelleme yapmak yerine eğitim örneklerini ezberliyor demektir. En uygun durdurma noktası, doğrulama kaybının yükselmeye başlamasından hemen öncesidir.
# Reading training logs
# Training step logs look like:
# {'loss': 1.4523, 'grad_norm': 0.85, 'learning_rate': 0.0002, 'epoch': 0.2, 'step': 20}
# {'loss': 1.2341, 'grad_norm': 0.72, 'learning_rate': 0.00018, 'epoch': 0.4, 'step': 40}
# Validation results look like:
# {'eval_loss': 1.1823, 'eval_runtime': 12.3, 'eval_samples_per_second': 8.1, 'step': 50}
# {'eval_loss': 1.0923, 'eval_runtime': 12.1, 'eval_samples_per_second': 8.3, 'step': 100}
# {'eval_loss': 1.1234, 'eval_runtime': 12.4, 'eval_samples_per_second': 8.2, 'step': 150}
# ^ validation loss went UP at step 150 - overfitting starting
# Load the best checkpoint (lowest validation loss)
from transformers import TrainerCallback
print('Best model checkpoint is saved automatically by SFTTrainer (load_best_model_at_end=True)')LoRA Bağdaştırıcılarını Kaydetme ve Birleştirme
Eğitimden sonra LoRA bağdaştırıcısı ağırlıklarını temel modelden ayrı kaydedin. Bağdaştırıcı küçüktür (birkaç MB ile birkaç yüz MB arasında) ve çıkarım sırasında temel modele uygulanabilir. Üretim ortamına dağıtım için birleştirme işlemiyle LoRA ağırlıklarını temel modele de katabilirsiniz. Böylece çıkarım sırasında PEFT kütüphanesi gerektirmeyen tek bir model dosyası oluşturulur ve çıkarım ek yükü azalır.
# Save only the LoRA adapter (tiny - typically 10-100MB)
model.save_pretrained('./lora-adapter-only')
tokenizer.save_pretrained('./lora-adapter-only')
# Load the adapter for inference (requires base model + peft)
from peft import PeftModel
base_model = AutoModelForCausalLM.from_pretrained(MODEL_NAME, torch_dtype=torch.float16, device_map='auto')
model_with_adapter = PeftModel.from_pretrained(base_model, './lora-adapter-only')
# Alternative: Merge adapter into base model (no PEFT needed at inference)
print('Merging LoRA weights into base model...')
merged_model = model_with_adapter.merge_and_unload() # creates a regular model
merged_model.save_pretrained('./merged-model')
print('Merged model saved - can be used with standard transformers, no PEFT needed')İnce Ayar Yapılmış Modelde Çıkarım Çalıştırma
Başarılı olduğunuzu ilan etmeden önce ince ayar yapılmış modelinizi ayrılmış istemlerden oluşan bir kümede test edin. İnce ayarın hedeflerine ulaştığını doğrulamak için aynı istemlerdeki çıktıları temel modelin çıktılarıyla yan yana karşılaştırın. Hem daha iyi ele alması gereken durumları (hedef görev) hem de hâlâ iyi ele alması gereken durumları (performansının düşmesini istemediğiniz genel görevler) kontrol edin.
def generate(model, tokenizer, prompt: str, max_new_tokens=512) -> str:
inputs = tokenizer(prompt, return_tensors='pt').to(model.device)
with torch.no_grad():
outputs = model.generate(
**inputs,
max_new_tokens=max_new_tokens,
temperature=0.1,
do_sample=True,
pad_token_id=tokenizer.eos_token_id
)
# Decode only the new tokens (not the input prompt)
new_tokens = outputs[0][inputs['input_ids'].shape[1]:]
return tokenizer.decode(new_tokens, skip_special_tokens=True)
# Compare base vs fine-tuned
test_prompt = 'Extract JSON from: "Alice Johnson, 28, software engineer in NYC since 2021"'
print('=== BASE MODEL ===')
print(generate(base_model, tokenizer, test_prompt))
print('\n=== FINE-TUNED MODEL ===')
print(generate(merged_model, tokenizer, test_prompt))LoRA Temel Hiperparametreleri Özeti
LoRA'yı kullanım alanınıza göre ayarlamak için bu varsayılan değerlerle başlayın ve her seferinde tek bir değeri değiştirin. r=8 güvenli bir başlangıç noktasıdır — modelin daha yüksek ifade kapasitesine ihtiyacı varsa 16 veya 32'ye çıkarın. lora_alpha = 2*r kararlı bir tercihtir. 2e-4 öğrenme oranı çoğu yönerge ince ayarı için uygundur; eğitim kaybının kararsız olduğunu görürseniz 1e-4'e düşürün. 1-3 dönem: doğrulama kaybı azalmayı bıraktığında durun.
Bunun Yerine OpenAI İnce Ayarı Ne Zaman Kullanılmalı?
Hugging Face PEFT LoRA bir GPU gerektirir. GPU altyapınız yoksa OpenAI'nin ince ayar API'si, eğitim altyapısını sizin için yöneten bir alternatiftir. JSONL dosyanızı yükleyin, bir eğitim çalışması başlatmak için API'yi çağırın ve API çağrılarında kullanabileceğiniz ince ayar yapılmış bir model ID'si alın. OpenAI ince ayarı GPT-4o-mini ve GPT-3.5-turbo'yu destekler. Belirteç başına maliyeti daha yüksektir, ancak altyapı yönetimini tamamen ortadan kaldırır.
from openai import OpenAI
client = OpenAI()
# Upload training file
train_file = client.files.create(
file=open('train.jsonl', 'rb'),
purpose='fine-tune'
)
val_file = client.files.create(
file=open('validation.jsonl', 'rb'),
purpose='fine-tune'
)
# Create fine-tuning job
job = client.fine_tuning.jobs.create(
training_file=train_file.id,
validation_file=val_file.id,
model='gpt-4o-mini', # base model to fine-tune
hyperparameters={
'n_epochs': 3,
'batch_size': 'auto',
'learning_rate_multiplier': 'auto'
}
)
print(f'Fine-tuning job created: {job.id}')
# Monitor: client.fine_tuning.jobs.retrieve(job.id)
# Use: client.chat.completions.create(model=job.fine_tuned_model, ...)Hızlı Kontrol
Bu derste LoRA ince ayarı konusundaki anlayışınızı sınayın.
Ders Özeti
Bu derste şunları öğrendiniz: LoRA, modelin tüm parametreleri yerine yalnızca küçük düşük dereceli bağdaştırıcı matrislerini eğiterek ince ayar için gereken GPU kaynaklarını 10-50 kat azaltır; QLoRA (4 bit nicemleme + LoRA), yaklaşık 12 GB VRAM bulunan tüketici GPU'larında 7B modellerin ince ayarını erişilebilir hâle getirir ve TRL içindeki SFTTrainer, belirteçleme, toplu işleme, kayıp maskeleme ve kontrol noktası kaydetme işlemlerini yöneten üst düzey bir API sunar. Sırada ince ayar yapılmış modeli değerlendirecek ve dağıtacağız.
Yapay zeka eğitmeniyle Python öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 30
- Dersler
- 120
Sıkça Sorulan Sorular
“Hugging Face PEFT ile LoRA İnce Ayarı” dersi ücretsiz mi?
Evet — “Hugging Face PEFT ile LoRA İnce Ayarı” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve AI Engineering Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. AI Engineering Academy kursu toplamda 4 dersten oluşur.
“Hugging Face PEFT ile LoRA İnce Ayarı” dersinde ne öğreneceğim?
LoRA derecesini, alfa değerini ve hedef modülleri yapılandırın, TRL SFTTrainer ile denetimli ince ayar çalıştırın, eğitim kaybını izleyin ve birleştirilmiş ve yalnızca bağdaştırıcı içeren kontrol nok… AI Engineering Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
AI Engineering Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te AI Engineering Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Hugging Face PEFT ile LoRA İnce Ayarı” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu AI Engineering Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her AI Engineering Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- İnce Ayarın İstem Yazımını Geride Bıraktığı Durumlar
- Yüksek Kaliteli Eğitim Veri Kümesi Hazırlama
- Hugging Face PEFT ile LoRA İnce Ayarı
- İnce Ayarlı Modelinizi Değerlendirme ve Dağıtma