PEFT documentation

TinyLoRA: 13 Parametrede Nedenlemeyi Öğrenme

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

and get access to the augmented documentation experience

to get started

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.Embedding ve transformers.pytorch_utils.Conv1D katmanları 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

< >

( 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ılan 2) — Donmuş U, Sigma, V ayrıştırması için SVD rütbesi. Makale r=2 önermektedir.
  • u (int, opsiyonel, varsayılan 64) — 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ılan 0.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ılan 42) — Sabit projeksiyon matrisleri P'yi üretmek için kullanılan rastgele tohum.
  • save_projection (bool, isteğe bağlı, varsayılan True) — 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ılan 0.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ızca nn.Linear, nn.Embedding ve transformers.pytorch_utils.Conv1D katmanları desteklenir.
  • tinylora_dropout (float, isteğe bağlı, varsayılan 0.0) — TinyLoRA katmanları için dropout olasılığı.
  • fan_in_fan_out (bool, isteğe bağlı, varsayılan False) — 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 saklayan Conv1D kullanı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ılan True) — 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. False geç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ızca layers_to_transform None değ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

< >

( 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ılan False) — 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:

delete_adapter

< >

( adapter_name: str )

Bir adaptörü silin ve model düzeyindeki paylaşılan v parametrelerini temizleyin.

Update on GitHub