# UniLoRA

[Uni-LoRA](https://huggingface.co/papers/2506.00799), düşük rütbeli adaptör ağırlıkları arasında kompakt bir eğitilebilir vektör bankası paylaşan bir PEFT yöntemidir. Her LoRA matris elemanını bağımsız olarak öğrenmek yerine, UniLoRA 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ıç

```python
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, üretilen 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 üretilir; devre dışı bırakılmadığında ise kaydedilen adaptörler, gelecekteki indeks üretim değişikliklerinden bağımsız hale gelir.

## Karma performans değerlendirmesi genel bakış

<iframe src="https://peft-internal-testing-peft-method-comparison-embed.hf.space/?highlight[type]=UNILORA" frameborder="0" width="850" height="1000"
>

# API

## UniLoraConfig[[peft.UniLoraConfig]]

#### peft.UniLoraConfig[[peft.UniLoraConfig]]

```python
peft.UniLoraConfig(task_type: Optional[Union[str, TaskType]] = None, peft_type: Optional[Union[str, PeftType]] = None, auto_mapping: Optional[dict] = None, peft_version: Optional[str] = None, base_model_name_or_path: Optional[str] = None, revision: Optional[str] = None, inference_mode: bool = False, r: int = 4, proj_seed: int = 42, theta_d_length: int = 256, target_modules: list[str] | str | None = None, unilora_dropout: float = 0.0, fan_in_fan_out: bool = False, bias: str = 'none', modules_to_save: list[str] | None = None, init_theta_d_bound: float = 0.02, init_weights: bool = True, save_indices: bool = False, layers_to_transform: list[int] | int | None = None, layers_pattern: list[str] | str | None = None)
```

[Kaynak](https://github.com/huggingface/peft/blob/main/src/peft/tuners/unilora/config.py#L23)

**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, bu bir düzenli ifade olarak ele alınır. - Bir liste sağlanırsa, modüller tam ad veya sonek eşleşmesiyle bulunur. - 'all-linear' özel değeri, çıktı katmanı hariç tüm Linear / Conv1D katmanlarına UniLora 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 ağırlıkları (fan_in, fan_out) biçiminde saklıyor mu. GPT-2 gibi Conv1D katmanları kullanan modeller için bu değer True olarak ayarlanmalıdır.

bias (`str`) : Hangi sapma terimlerinin eğitilebilir olduğunu belirtir: - 'none': hiçbir sapma parametresi güncellenmez - 'all': tüm sapma parametreleri güncellenir - 'unilora_only': yalnızca UniLora katmanları içindeki sapmalar güncellenir Not: sapma 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`'in varsayılan UniLora başlatmasıyla mı başlatılacağı. `False` olarak ayarlanırsa, `theta_d` rastgele bir başlatmayı korur.

save_indices (`bool`) : Üretilen UniLora indeks 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, indeks ü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 Şeydir https://arxiv.org/abs/2506.00799

## UniLoraModel[[peft.UniLoraModel]]

#### peft.UniLoraModel[[peft.UniLoraModel]]

```python
peft.UniLoraModel(model, config, adapter_name, low_cpu_mem_usage: bool = False, state_dict: dict[str, torch.Tensor] | None = None)
```

[Kaynak](https://github.com/huggingface/peft/blob/main/src/peft/tuners/unilora/model.py#L31)

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

#### generate_index[[peft.UniLoraModel.generate_index]]

```python
generate_index(lora_param_count: int, theta_d_length: int, proj_seed: int)
```

[Kaynak](https://github.com/huggingface/peft/blob/main/src/peft/tuners/unilora/model.py#L128)

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

Sadece `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, `proj_seed` ile atamayı karıştırırken indeks başına normalizasyonun kararlı kalmasını sağlar.

