TRL documentation

Pişmanlık Olmadan LoRA

You are viewing main version, which requires installation from source. If you'd like regular pip install, checkout the latest stable version (v1.17.1).
Hugging Face's logo
Join the Hugging Face community

and get access to the augmented documentation experience

to get started

Pişmanlık Olmadan LoRA

Thinking Machines Lab ekibinden gelen son araştırmalar (Schulman et al., 2025), LoRA'nın doğru yapılandırıldığında tam ince ayar performansını yakalayabildiğini ve bunun için yalnızca ~%67 oranında hesaplama gücü kullandığını göstermektedir. Bu bulgular, TRL kullanıcıları için heyecan vericidir çünkü uygulaması basittir ve daha küçük bütçelerle model performansını iyileştirebilir.

Bu kılavuz, TRL'de blog gönderisinin sonuçlarını yeniden üretmek için basit talimatlar sağlar.

Bu kılavuza uymadan önce blog yazısını okumanız veya en iyi sonuçlar için her iki kaynağı paralel olarak incelemeniz önerilir.

LoRA'nın tam ince ayara göre avantajları

Öncelikle, LoRA'nın tam ince ayara göre avantajlarını hatırlayalım.

LoRA, taban modelin üzerine, taban modelin kendisinden çok daha az parametreye sahip olan adaptör katmanları ekler. Bu tasarım, GPU bellek gereksinimlerini azaltır ve daha verimli bir eğitim sağlar. blog'da belirtildiği gibi, bu yaklaşımın başlangıçta bir performans ödüşü gerektirdiği düşünülüyordu; ancak dikkatli yapılandırma bu ödüşü ortadan kaldırabilir ve tam ince ayar performansına eşit sonuçlar verebilir.

TRL ile Örnekler

Blog yazısının temel bulgularına dayanarak TRL betiklerinde LoRA adaptörlerini uygulayıp eğitelim. Ardından, her bir bulguyu TRL sonuçları ışığında yeniden inceleyeceğiz.

Gözetimli İnce Ayar (SFT)

Blog yazısı, Hub'daki çeşitli modeller ve veri kümeleri üzerinde SFT gerçekleştirir ve bunu TRL'de yeniden üretebiliriz.

ModelVeri seti
Llama-3.2-1B-Instructallenai/tulu-3-sft-mixture
Llama-3.2-1B-Instructopen-thoughts/OpenThoughts-114k
Llama-3.1-8B-Instructallenai/tulu-3-sft-mixture
Llama-3.1-8B-Instructopen-thoughts/OpenThoughts-114k
python
işler
yerel

Bu bulguları TRL Python API'siyle şu şekilde entegre edebiliriz:


from datasets import load_dataset
from peft import LoraConfig
from trl import SFTTrainer, SFTConfig

dataset = load_dataset("open-thoughts/OpenThoughts-114k", split="train")

peft_config = LoraConfig(r=256, lora_alpha=16, target_modules="all-linear")

training_args = SFTConfig(
    learning_rate=2e-4,
    per_device_train_batch_size=1,
    gradient_accumulation_steps=4,
    num_train_epochs=1,
    report_to=["trackio"],
)

trainer = SFTTrainer(
    model="Qwen/Qwen2.5-3B-Instruct",
    train_dataset=dataset,
    peft_config=peft_config,
    args=training_args,
)

trainer.train()

Eğitim başladığında, URL'yi kaydedecek olan Trackio üzerinden ilerlemeyi izleyebilirsiniz.

Pekiştirmeli Öğrenme (GRPO)

Blog yazısı, Hub'daki çeşitli modeller ve veri kümeleri üzerinde GRPO uyguluyor ve sonuçları bir kez daha TRL'de yeniden üretebiliyoruz.

ModelVeri seti
Llama-3.1-8B-BaseGSM8k
Llama-3.1-8B-BaseDeepMath-103K
Qwen3-8b-baseDeepMath-103K

Pekiştirmeli öğrenme için, blog bir matematik akıl yürütme görevi kullanır ve bu görevi bir Python işlevi olarak yeniden üretebiliriz.

python
işler
yerel

Bu önerileri TRL Python API ile şu şekilde uygulayabiliriz:


from datasets import load_dataset
from peft import LoraConfig
from trl import GRPOConfig, GRPOTrainer
from trl.rewards import reasoning_accuracy_reward

dataset = load_dataset("HuggingFaceH4/OpenR1-Math-220k-default-verified", split="train")

peft_config = LoraConfig(
    r=1,
    lora_alpha=32,
    target_modules="all-linear"
)

training_args = GRPOConfig(
    learning_rate=5e-5,
    per_device_train_batch_size=1,
    gradient_accumulation_steps=4,
    num_train_epochs=1,
    num_generations=8,
    generation_batch_size=8,
    report_to=["trackio"],
)

trainer = GRPOTrainer(
    model="Qwen/Qwen3-0.6B",
    reward_funcs=reasoning_accuracy_reward,
    args=training_args,
    train_dataset=dataset,
    peft_config=peft_config,
)

trainer.train()

Bu kod parçası, örneğin kısa tutulması için yukarıda tanımlanan ödül fonksiyonunu atlar.

GRPO ile pekiştirmeli öğrenme betiği, yukarıda gösterilen ödül işlevini kullanan özel bir TRL betiği olarak uygulanmıştır. Bunu grpo.py - LoRA ile pekiştirmeli öğrenme en iyi uygulamaları adresinde inceleyebilirsiniz.

LoRA optimizasyonundaki temel bulgular

Yazarlar, rank değerini artırmak bu kısıtlamayı telafi etmediği için LoRA'nın yalnızca dikkat katmanlarıyla sınırlı tutulmak yerine tüm ağırlık matrislerine uygulanmasını önermektedir. TRL'de bu, LoRA'nın tüm ağırlık matrislerine uygulanması için --lora_target_modules all-linear kullanılarak yapılandırılabilir.

TRL ve SmolLM3 modelini kullanarak blog gönderisindeki sonuçları yeniden üretebildik. Modeli, yukarıdaki ödül fonksiyonu ve yapılandırmasıyla Math 220k veri seti üzerinde 500 adım boyunca eğittik. Aşağıdaki şekilden de görülebileceği gibi, LoRA modelinin ortalama eğitim ödül eğrisi, tam ince ayar eğrisiyle örtüşmektedir.

train reward

Ve en önemlisi, aşağıdaki şekilden de görülebileceği üzere LoRA modeli, tam ince ayar modeline kıyasla çok daha az bellek kullanır.

memory usage

Yukarıdaki modelleri eğitmek için kullandığımız parametreler şunlardır

ParametreLoRATam FT
--model_name_or_pathHuggingFaceTB/SmolLM3-3BHuggingFaceTB/SmolLM3-3B
--dataset_nameHuggingFaceH4/OpenR1-Math-220k-default-verifiedHuggingFaceH4/OpenR1-Math-220k-default-verified
--learning_rate1.0e-51.0e-6
--max_completion_length40964096
--lora_r1-
--lora_alpha32-
--lora_dropout0.0-
--lora_target_modulesall-linear-

Blog yazısının ana bulgularını ve bunları nasıl yeniden üretebildiğimizi inceleyelim.

1. LoRA, tüm ağırlık matrislerine uygulandığında daha iyi performans gösterir

Yazarlar, bu kısıtlamayı telafi etmek için rütbenin artırılmasının yeterli olmadığını belirttiklerinden, LoRA'nın yalnızca dikkat katmanlarıyla sınırlı tutulmak yerine tüm ağırlık matrislerine uygulanmasını önermektedir.

all layers

Sadece dikkat katmanlarına uygulanan LoRA, parametre sayısını eşitlemek için daha yüksek bir rank kullanılsa bile düşük performans gösterir. TRL'de bu, LoRA'nın tüm ağırlık matrislerine uygulanması için --lora_target_modules all-linear kullanılarak yapılandırılabilir. Python'da bunu şu şekilde yapabiliriz:

from peft import LoraConfig  

peft_config = LoraConfig(target_modules="all-linear")  

2. Adaptörün, veri setinden öğrenmek için yeterli kapasiteye sahip olması gerekir

Blog yazısı, veri setinden öğrenmek için yeterli bir LoRA rütbesi kullanmayı önerir. Rütbe, LoRA adaptöründeki eğitilebilir parametre sayısını belirler. Bu nedenle, “LoRA kapasitesini aşan veri setlerinde LoRA, FullFT'den daha düşük performans gösterir”.

learning rate

TRL betiğinde, --lora_r parametresini kullanarak rütbeyi ayarlayabilir ve bunu eğitim yaptığımız görev ve veri setine göre uyarlayabiliriz. Blog yazısı, görev ve veri seti boyutuna göre aşağıdaki rütbeleri önermektedir:

Reinforcement learning görevleri genellikle daha düşük kapasite gerektirdiğinden, daha küçük LoRA rank değerleri kullanılabilir. Bunun nedeni, policy gradient algoritmalarının bölüm başına yaklaşık ~1 bit bilgi çıkararak minimal parametre kapasitesi talep etmesidir.

Blog yazısı, tam ince ayar ile eşleşen LoRA için ideal veri seti boyutunu “Post-training scale” olarak tanımlar. Bunu, SFT ve RL LoRA'ları için önerilen rank'ı belirlemek için şu şekilde kullanabiliriz:

Görev TürüVeri Seti BoyutuÖnerilen Sıra
SFTEğitim sonrası ölçek256
RLHerhangi bir boyut1-32

3. “FullFT ve yüksek-rank LoRA'lar benzer öğrenme eğrilerine sahiptir”

Karşıt sezgisel olarak, blog yazısı tam ince ayar (full fine-tuning) için kullanılan öğrenme hızından daha yüksek bir öğrenme hızı kullanmayı önermektedir. Yukarıdaki tabloda LoRA için 1.0e-5, tam ince ayar için ise 1.0e-6 kullandık. TRL betiğinde şunu kullanabiliriz --learning_rate ile öğrenme hızını ayarlamak. LoRA'daki 1r \frac{1}{r} ölçekleme, optimal öğrenme hızını yaklaşık olarak rütbeden bağımsız hale getirir.

learning rate

4. “Bazı senaryolarda, LoRA, tam ince ayara kıyasla büyük parti boyutlarına daha az tolerans gösterir.”

Blog yazısı, yazarların LoRA'nın büyük batch boyutlarına daha az toleranslı olduğunu bulması nedeniyle etkili bir batch boyutunun < 32 kullanılmasını önermektedir. Bu durum, LoRA rank'ını artırarak giderilememiştir. TRL betiğinde, batch boyutunu ayarlamak için --per_device_train_batch_size ve --gradient_accumulation_steps parametrelerini kullanabiliriz.

learning rate

Özet

TRL ile tam ince ayar performansına ulaşacak şekilde LoRA adaptörlerini verimli bir şekilde uygulayabilir, tam ince ayarın yüksek hesaplama maliyeti olmadan temel içgörüleri (tüm ağırlık matrislerini hedefleme, doğru sırayı seçme ve parti boyutu ile öğrenme oranını yönetme) uygulayabilirsiniz.

Atıf

@article{schulman2025lora,  
    title        = {{LoRA Without Regret}},  
    author       = {John Schulman and Thinking Machines Lab},  
    year         = 2025,  
    journal      = {Thinking Machines Lab: Connectionism},  
    doi          = {10.64434/tml.20250929},  
    note         = {https://thinkingmachines.ai/blog/lora/}  
}  
Update on GitHub