PEFT documentation
TinyLoRA: 13 Parametrede Nedenlemeyi Öğrenme
TinyLoRA: 13 Parametrede Nedenlemeyi Öğrenme
TinyLoRA, donmuş ağırlıkların SVD ayrıştırmasını kullanarak küçük bir eğitilebilir vektörü sabit rastgele tensörler üzerinden projekte eden LoRA-XS yaklaşımını temel alan, son derece parametre verimli bir ince ayar tekniğidir. GRPO gibi pekiştirmeli öğrenme (RL) eğitim yöntemleriyle birleştirildiğinde TinyLoRA, yalnızca 1-13 eğitilebilir parametreyle bile rekabetçi performans elde edebilir.
TinyLoRA'nın temel yeniliği, eğitilebilir düşük rütbeli matris R'yi, sabit rastgele projeksiyon matrislerinin ağırlıklı toplamıyla değiştirmesidir: R = Σᵢ vᵢ Pᵢ, burada v ∈ R^u, u boyutunda küçük bir eğitilebilir vektör ve Pᵢ sabit rastgele matrislerdir. Bu, rekabetçi performansı korurken eğitilebilir parametre sayısını dramatik bir şekilde azaltır.
TinyLoRA, weight_tying parametresi aracılığıyla ağırlık bağlamayı destekler. Bu parametre, 0.0 ile 1.0 arasında bir oran olup, kaç modülün aynı eğitilebilir v vektörünü paylaştığını kontrol eder. weight_tying=0.0 (varsayılan) paylaşımın olmadığını, weight_tying=1.0 ise tüm hedef modüller arasında tam paylaşımın olduğunu ifade eder; bu sayede tüm model için yalnızca u eğitilebilir parametreden oluşan tek bir vektörle aşırı parametre verimliliği sağlanır.
Adaptör parametrelerini kaydederken, TinyLoraConfig üzerinde save_projection=False ayarlayarak rastgele projeksiyon matrislerini depolamaktan kaçınabilirsiniz. Bu durumda, bu matrisler projection_seed argümanındaki sabit rastgele tohum temelinde yeniden oluşturulur. Bu, kontrol noktasının boyutunu azaltır ancak tüm cihazlarda ve PyTorch’ün tüm gelecekteki sürümlerinde yeniden üretilebilirliği garanti edemeyiz. Yeniden üretilebilirliği sağlamak istiyorsanız, save_projection=True ayarlayın (bu varsayılandır).
TinyLoRA şu anda aşağıdaki kısıtlamalara sahiptir:
- Yalnızca
nn.Linear,nn.Embeddingvetransformers.pytorch_utils.Conv1Dkatmanları desteklenir.
Makalenin özeti şudur:
Yakın tarihli araştırmalar, dil modellerinin genellikle pekiştirmeli öğrenme yoluyla akıl yürütmeyi öğrenebildiğini göstermiştir. Bazı çalışmalar akıl yürütme için düşük rütbeli parametrelendirmeler eğitirken, geleneksel LoRA model boyutunun altına ölçeklenemez. Akıl yürütmeyi öğrenmek için rank=1 LoRA'nın bile gerekli olup olmadığını sorguluyor ve düşük rütbeli adaptörleri tek parametreye kadar küçük boyutlara ölçeklendirmek için TinyLoRA yöntemini öneriyoruz. Yeni parametrelendirmemiz içinde, Qwen2.5'in 8B parametre boyutunu bf16'da yalnızca 13 eğitilmiş parametreyle (toplam 26 bayt) GSM8K'da %91 doğruluğa kadar eğitebiliyoruz. Bu eğilimin genel olarak geçerli olduğunu buluyoruz: AIME, AMC ve MATH500 gibi daha zor akıl yürütme öğrenme kıyaslamaları (benchmarks) serisinde, performans iyileştirmelerinin %90'ını 1000 kat daha az parametre eğiterek elde edebiliyoruz. Dikkat çekici bir şekilde, bu kadar güçlü bir performansa yalnızca RL ile ulaşabiliyoruz: SFT kullanılarak eğitilen modeller, aynı performansa ulaşmak için 100-1000 kat daha büyük güncellemeler gerektiriyor.
Karma performans değerlendirmesi genel bakış
API
TinyLoraConfig
sınıf peft.TinyLoraConfig
< source >( task_type: Optional[Union[str, TaskType]] = Nonepeft_type: Optional[Union[str, PeftType]] = Noneauto_mapping: Optional[dict] = Nonepeft_version: Optional[str] = Nonebase_model_name_or_path: Optional[str] = Nonerevision: Optional[str] = Noneinference_mode: bool = Falser: int = 2u: int = 64weight_tying: float = 0.0projection_seed: int = 42save_projection: bool = Trueinit_v_bound: float = 0.02target_modules: Optional[Union[list[str], str]] = Nonetinylora_dropout: float = 0.0fan_in_fan_out: bool = Falsebias: str = 'none'modules_to_save: Optional[list[str]] = Noneinit_weights: Union[bool, str] = Truelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = None )
Parametreler
- r (
int, isteğe bağlı, varsayılan2) — Donmuş U, Sigma, V ayrıştırması için SVD rütbesi. Makale r=2 önermektedir. - u (
int, opsiyonel, varsayılan64) — Grup başına eğitilebilir vektör boyutu. Bu, adaptasyonun ifade gücünü kontrol eder. Aşırı parametre verimliliği için 1-13 kadar düşük olabilir. - weight_tying (
float, isteğe bağlı, varsayılan0.0) — Hedef modüller arasında ağırlık bağlama derecesi, 0.0 ile 1.0 arasında bir oran olarak. Kaç modülün aynı eğitilebilir vektör v'yi paylaştığını kontrol eder. 0.0 paylaşımın olmadığını (her modülün kendi v'sine sahip olduğunu) ifade eder. 1.0 tam paylaşımı (tüm modüllerin tek bir v'yi paylaştığını) ifade eder. Aradaki değerler kısmi paylaşım sağlar. - projection_seed (
int, isteğe bağlı, varsayılan42) — Sabit projeksiyon matrisleri P'yi üretmek için kullanılan rastgele tohum. - save_projection (
bool, isteğe bağlı, varsayılanTrue) — State dict'te P projeksiyon tensörlerinin kaydedilip kaydedilmeyeceğini belirtir. False ise, yükleme sırasında tohumdan yeniden oluşturulurlar. - init_v_bound (
float, isteğe bağlı, varsayılan0.02) — Eğitilebilir vektör v için düzgün başlatma sınırı. Değerler [-init_v_bound, init_v_bound] aralığında başlatılır. - target_modules (
Union[List[str], str], isteğe bağlı) — TinyLoRA'nın uygulanacağı modüllerin adları. Bu, modül adlarının bir listesi (ör.['q_proj', 'v_proj']), bir regex deseni (ör.'.*decoder.*(q|v)_proj$') veya tüm doğrusal modülleri hedeflemek için"all-linear"özel anahtar kelimesi olabilir. Yalnızcann.Linear,nn.Embeddingvetransformers.pytorch_utils.Conv1Dkatmanları desteklenir. - tinylora_dropout (
float, isteğe bağlı, varsayılan0.0) — TinyLoRA katmanları için dropout olasılığı. - fan_in_fan_out (
bool, isteğe bağlı, varsayılanFalse) — Değiştirilecek katman ağırlıkları (fan_in, fan_out) biçiminde saklıyorsa bunu True olarak ayarlayın. Örneğin, gpt-2 ağırlıkları (fan_in, fan_out) biçiminde saklayanConv1Dkullanır. - bias (
str, isteğe bağlı, varsayılan"none") — TinyLoRA için sapma türü. ‘none’, ‘all’ veya ‘tinylora_only’ olabilir. - modules_to_save (
List[str], isteğe bağlı) — TinyLoRA katmanları dışında eğilebilir olarak ayarlanacak ve kaydedilecek modüllerin listesi. - init_weights (
bool|Literal["uniform"], isteğe bağlı, varsayılanTrue) — Eğitilebilir vektör v'nin nasıl başlatılacağı.True(varsayılan) geçirildiğinde v sıfırlarla başlatılır ve adaptör bir no-op (kimlik işlemi) haline gelir."uniform"geçirildiğinde v,[-init_v_bound, init_v_bound]aralığında uniform rastgele değerlerle başlatılır.Falsegeçirildiğinde v başlatılmamış bırakılır (ileri düzey kullanım senaryoları için). - layers_to_transform (
Union[List[int], int], isteğe bağlı) — Dönüştürülecek katman indeksleri. Belirtilirse, yalnızca bu katmanlar uyarlanır. - layers_pattern (
Optional[Union[List[str], str]], isteğe bağlı) — Katman desen adı, yalnızcalayers_to_transformNonedeğerinden farklıysa kullanılır.
Bu, bir TinyLoraModel yapılandırmasını depolamak için kullanılan yapılandırma sınıfıdır.
TinyLoRA, “Learning to Reason in 13 Parameters” (arXiv:2602.04118) makalesine dayanan son derece parametre verimli bir ince ayar yöntemidir. Donmuş ağırlıkların SVD ayrıştırmasını kullanır ve küçük bir eğitilebilir vektörü sabit rastgele tensörler üzerinden yansıtır.
Makale: https://arxiv.org/abs/2602.04118
Örnek:
from peft import get_peft_model, TinyLoraConfig
config = TinyLoraConfig(
r=2, # SVD rank (paper recommends 2)
u=64, # Trainable vector dimension
weight_tying=0.0, # No weight tying (0.0 = none, 1.0 = full)
target_modules=["q_proj", "v_proj"],
projection_seed=42,
)
model = get_peft_model(base_model, config)TinyLoraModel
sınıf peft.TinyLoraModel
< source >( modelconfigadapter_namelow_cpu_mem_usage = False**kwargs ) → torch.nn.Module
Parametreler
- model (PreTrainedModel) — Uyarlanacak model.
- config (TinyLoraConfig) — TinyLoRA modelinin yapılandırması.
- adapter_name (
str) — Adaptörün adı, varsayılan olarak"default"'tır. - low_cpu_mem_usage (
bool, isteğe bağlı, varsayılanFalse) — Boş adaptör ağırlıklarını meta cihazda oluşturur. Yükleme sürecini hızlandırmak için faydalıdır.
Dönüş değeri
torch.nn.Module
TinyLoRA modeli.
Önceden eğitilmiş bir transformers modelinden TinyLoRA modeli oluşturur.
TinyLoRA, dondurulmuş ağırlıkların SVD ayrıştırmasını kullanan ve küçük bir eğitilebilir vektörü sabit rastgele tensörler üzerinden projekteleyen son derece parametre-verimli bir ince ayar yöntemidir. “Learning to Reason in 13 Parameters” (arXiv:2602.04118) makalesine dayanmaktadır.
Örnek:
>>> from transformers import AutoModelForCausalLM
>>> from peft import TinyLoraConfig, get_peft_model
>>> base_model = AutoModelForCausalLM.from_pretrained("facebook/opt-125m")
>>> config = TinyLoraConfig(r=2, u=64, target_modules=["q_proj", "v_proj"])
>>> model = get_peft_model(base_model, config)Öznitelikler:
- model (PreTrainedModel) — Uyarlanacak model.
- peft_config (TinyLoraConfig): TinyLoRA modelinin yapılandırması.
Bir adaptörü silin ve model düzeyindeki paylaşılan v parametrelerini temizleyin.