PEFT documentation

UniLoRA

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

UniLoRA

Uni-LoRA, düşük rütbeli adaptör ağırlıkları arasında kompakt bir eğitilebilir vektör bankası paylaşan bir PEFT yöntemidir. UniLoRA, her LoRA matris elemanını bağımsız olarak öğrenmek yerine, girdileri deterministik olarak ortak theta_d değerlerine yansıtır ve adaptör güncellemesi tarafından kullanılan ortak parametreleri öğrenir.

Hızlı Başlangıç

from peft import UniLoraConfig, get_peft_model
from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.2-3B")

config = UniLoraConfig(
    r=32,
    theta_d_length=256,
    proj_seed=42,
    target_modules=["q_proj", "v_proj"],
    unilora_dropout=0.0,
    init_weights=True,
    task_type="CAUSAL_LM",
)

peft_model = get_peft_model(model, config)
peft_model.print_healthcheck()

Önemli Parametreler

r, düşük rütbeli adaptör boyutunu kontrol eder. Daha büyük değerler, adaptör kapasitesini ve bellek kullanımını artırır.

theta_d_length, paylaşılan UniLoRA vektör bankasının uzunluğunu kontrol eder. Bu, projelendirilmiş adaptör girdileri tarafından paylaşılan ana eğitilebilir depolama alanıdır.

proj_seed, theta_d içine yapılan sabit projeksiyonlar için deterministik indeks üretimini kontrol eder. Aynı tohum ve yapılandırmanın yeniden kullanılması, üretilen adaptör indekslerinin yeniden üretilebilir olmasını sağlar.

target_modules, UniLoRA adaptörlerinin hangi modüllere uygulanacağını seçer. Model mimarisi tarafından desteklendiğinde ["q_proj", "v_proj"] gibi modül sonekleri, bir regex dizesi veya "all-linear" kullanın.

unilora_dropout, eğitim sırasında UniLoRA adaptör katmanlarının içinde dropout uygular.

init_weights, UniLoRA parametre başlatma işlemini kontrol eder. Başlatmayı manuel olarak yönetmeniz gerektiğinde, rastgele bir theta_d başlatmasını korumak için bu değeri False olarak ayarlayın.

save_indices, UniLoRA kontrol noktalarının, oluşturulan indeks ve ölçek tensörlerini ortak theta_d parametreleriyle birlikte kaydederken bu tensörlerin kaydedilip kaydedilmeyeceğini kontrol eder. Bu ayar devre dışı bırakıldığında kontrol noktaları daha küçük olur ve indeksler proj_seed üzerinden yeniden oluşturulur; ayar etkinleştirildiğinde ise kaydedilen adaptörler, gelecekteki indeks oluşturma değişikliklerinden bağımsız hale gelir.

Karma performans değerlendirmesi genel bakış

API

UniLoraConfig

sınıf peft.UniLoraConfig

< >

( 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 = 4proj_seed: int = 42theta_d_length: int = 256target_modules: list[str] | str | None = Noneunilora_dropout: float = 0.0fan_in_fan_out: bool = Falsebias: str = 'none'modules_to_save: list[str] | None = Noneinit_theta_d_bound: float = 0.02init_weights: bool = Truesave_indices: bool = Falselayers_to_transform: list[int] | int | None = Nonelayers_pattern: list[str] | str | None = None )

Parametreler

  • r (int) — Düşük rütbeli uyarlamanın rütbesi. Bu, UniLora güncellemesinin ifade kapasitesini kontrol eder.
  • proj_seed (int) — Sabit indeks atamasını üretmek için kullanılan rastgele tohum. Bu, çalıştırmalar arasında tekrarlanabilirliği sağlar.
  • theta_d_length (int) — Paylaşılan UniLora vektörü theta_d'nin uzunluğu.
  • target_modules (Union[list[str], str], isteğe bağlı) — UniLora adaptörlerinin uygulanacağı modüllerin adları veya desenleri.
    • Bir dize sağlanırsa, bir düzenli ifade olarak ele alınır.
    • Bir liste sağlanırsa, modüller tam ad veya sonek eşleşmesine göre eşleştirilir.
    • Özel değer ‘all-linear’, UniLora’yı çıktı katmanı hariç tüm Linear / Conv1D katmanlarına uygular. Belirtilmezse, modüller model mimarisinden çıkarılır. Mimari desteklenmiyorsa bir hata oluşturulur.
  • unilora_dropout (float) — UniLora katmanları içinde uygulanan dropout olasılığı.
  • fan_in_fan_out (bool) — Değiştirilen katmanın ağırlıkları (fan_in, fan_out) biçiminde saklayıp saklamadığı. GPT-2 gibi Conv1D katmanları kullanan modeller için bu değer True olarak ayarlanmalıdır.
  • bias (str) — Eğitilebilir bias terimlerini belirtir:
    • ‘none’: önyargı parametreleri güncellenmez
    • ‘all’: tüm bias parametreleri güncellenir
    • ‘unilora_only’: yalnızca UniLora katmanlarındaki önyargılar güncellenir Not: önyargı güncellemelerini etkinleştirmek, adaptörler devre dışı olsa bile model çıktılarını değiştirir.
  • modules_to_save (list[str], isteğe bağlı) — UniLora katmanlarının dışında, eğitilebilir kalması ve nihai checkpoint'te kaydedilmesi gereken ek modüller. Bu, sınıflandırıcılar gibi görev özel başlıkları için yaygın olarak kullanılır.
  • init_theta_d_bound (float) — UniLora vektör bankası için başlatma sınırı. Vektörler [-init_theta_d_bound, init_theta_d_bound] aralığından düzgün olarak örneklenir. Sıfırla başlatma, kaybolan gradyanları önlemek için kaçınılır. Kararlı eğitim için küçük değerler (ör. 0.02) önerilir.
  • init_weights (bool) — theta_d'nin varsayılan UniLora başlatmasıyla başlatılıp başlatılmayacağı. False olarak ayarlanırsa, theta_d rastgele bir başlatmayı korur.
  • save_indices (bool) — Üretilen UniLora endeks ve ölçek tamponlarının theta_d ile birlikte kaydedilip kaydedilmeyeceğini belirtir. Bu, kontrol noktası boyutunu artırır ancak kaydedilen adaptörlerin, endeks üretim rutinindeki gelecekteki değişikliklerden bağımsız olmasını sağlar.
  • layers_to_transform (Union[list[int], int], isteğe bağlı) — UniLora'nın uygulandığı transformer katmanlarının indeksleri. Belirtilirse, yalnızca bu katmanlar değiştirilir. Bu seçenek yalnızca target_modules bir liste olduğunda geçerlidir.
  • layers_pattern (Union[list[str], str], isteğe bağlı) — Model standart katman adlandırma kurallarına uymadığında layers_to_transform ile birlikte kullanılan özel katman adı deseni. Bu seçenek yalnızca target_modules bir liste olduğunda geçerlidir.

UniLora adaptörleri için yapılandırma sınıfı.

Bu sınıf, PEFT çerçevesi içinde UniLora katmanlarını başlatmak ve uygulamak için gereken tüm hiperparametreleri tanımlar. Yapılandırma bilinçli olarak minimal tutulmuş olup yalnızca mevcut UniLora uygulaması tarafından aktif olarak kullanılan parametreleri içerir.

Referans: Uni-LoRA: Tek Vektör Her Şey İçin Gerekli Olan https://arxiv.org/abs/2506.00799

UniLoraModel

sınıf peft.UniLoraModel

< >

( modelconfigadapter_namelow_cpu_mem_usage: bool = Falsestate_dict: dict[str, torch.Tensor] | None = None )

Önceden eğitilmiş bir modelin etrafında bir UniLora adaptörü oluşturur.

generate_index

< >

( lora_param_count: inttheta_d_length: intproj_seed: int )

Düzleştirilmiş UniLora parametre uzayına deterministik theta_d indeksleri atayın.

Düz bir np.random.choice(np.arange(theta_d_length), size=lora_param_count) her konumu bağımsız olarak örnekler; bu da daha küçük adaptörlerde bazı theta_d girdilerinin kullanılmamasına yol açabilir. UniLora bunun yerine dengeli ve deterministik bir atama kullanır: her indeks, D düzleştirilmiş LoRA parametre sayısı ve d theta_d_length olduğunda, floor(D / d) veya ceil(D / d) kez görünür. Bu, atamayı proj_seed ile karıştırırken indeks başına normalizasyonun kararlı kalmasını sağlar.

Update on GitHub