# FRoD: Dönel Dereceler ile Tam Sıralı Verimli İnce Ayar

FRoD, paylaşılan tam-rank bir taban ile seyreltilmiş öğrenilebilir rotasyonel dereceleri birleştiren parametre-verimli bir ince ayar yöntemidir. Adaptör güncellemesi, sabit projeksiyon tensörleri ve eğitilebilir katsayılar aracılığıyla ifade edilir; bu da FRoD'ün eğitilen parametre sayısını düşük tutarken tam-rank güncellemeler uygulamasına olanak tanır.

Makale: [Full-Rank Efficient Fine-Tuning with Rotational Degrees](https://doi.org/10.1609/aaai.v40i31.39813).

Adaptör parametrelerini kaydetirken, `FrodConfig` üzerinde `save_projection=False` olarak ayarlayarak projeksiyon tensörlerini depolamaktan kaçınılabilir. Bu durumda, projeksiyonlar temel model ağırlıklarından ve `projection_prng_key` içindeki sabit rastgele tohumdan geri yüklenir. Bu, kontrol noktası boyutunu azaltır ancak kontrol noktası yükleme işleminin yeniden üretim detaylarından bağımsız olması için varsayılan değer `save_projection=True`'dür.

LoRA ile karşılaştırıldığında FRoD, yalnızca köşegen katsayıları ve seyrek bir köşegen dışı döndürme katsayıları kümesini eğiterek, uyarlanan her doğrusal katmanda tam sıralı bir güncelleme ifade edebilir. Düşük sıralı bir güncelleme kısıtlayıcı olduğunda bu durum faydalı olabilir. Bunun bedeli, FRoD'nin adaptör enjeksiyonu sırasında temel ağırlıklardan sabit projeksiyon tensörleri hesaplamasıdır; bu da kurulumu daha maliyetli hale getirir ve uygulamanın LoRA'ya kıyasla daha az yaygın desteklenmesine yol açar.

Büyük modellerde, FRoD adaptörleri enjekte etmeden önce hedef modül kategorileri üzerinde matris ayrıştırmaları çalıştırdığı için projeksiyon başlatma işlemi yavaş olabilir. Varsayılan olarak bir ilerleme çubuğu gösterilir ve `FrodConfig(progressbar=False)` ile devre dışı bırakılabilir.

Bellek kısıtlı eğitim için, `runtime_offload_base_weight=True` parametresi, aktif FRoD yolunun bunlara ihtiyaç duymadığı durumlarda hedef temel ağırlıkları CPU'da tutar. PEFT yöntemleri, modelin taşınmasının ve ileri geçişlerin ardından genellikle tüm temel parametreleri hızlandırıcıda tuttuğu için bu özellik varsayılan olarak devre dışıdır ve açıkça etkinleştirilmelidir.

FRoD şu anda aşağıdaki kısıta sahiptir:

- Yalnızca `nn.Linear` ve `transformers.pytorch_utils.Conv1D` katmanları desteklenir.

## Hızlı Başlangıç

```python
from transformers import AutoModelForSequenceClassification

from peft import FrodConfig, TaskType, get_peft_model

model = AutoModelForSequenceClassification.from_pretrained("google-bert/bert-base-uncased", num_labels=2)

peft_config = FrodConfig(
    task_type=TaskType.SEQ_CLS,
    target_modules=["query", "value"],
    modules_to_save=["classifier"],
    sparse_rate=0.02,
    frod_dropout=0.0,
    runtime_offload_base_weight=True,
)

model = get_peft_model(model, peft_config)
model.print_healthcheck()
```

## FrodConfig[[peft.FrodConfig]]

#### peft.FrodConfig[[peft.FrodConfig]]

```python
peft.FrodConfig(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, target_modules: Optional[Union[list[str], str]] = None, projection_prng_key: int = 0, save_projection: bool = True, frod_dropout: float = 0.0, fan_in_fan_out: bool = False, bias: str = 'none', modules_to_save: Optional[list[str]] = None, init_weights: bool = True, layers_to_transform: Optional[Union[list[int], int]] = None, layers_pattern: Optional[Union[list[str], str]] = None, sparse_rate: float = 0.01, regularization_alpha: float = 0.001, progressbar: bool = True, runtime_offload_base_weight: bool = False)
```

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

**Parametreler:**

target_modules (`Union[List[str], str]`) : FRoD'nin uygulanacağı modüllerin adları. Yalnızca doğrusal katmanlar desteklenir.

projection_prng_key (`int`) : Seyrek FRoD COO desenini başlatırken kullanılan rastgele tohum.

save_projection (`bool`) : FRoD projeksiyon tensörlerinin state dict'te kaydedilip kaydedilmeyeceğini belirtir. Bu, checkpoint boyutunu artırır ancak adapter yeniden yükleme işlemini yerel önbellek yeniden oluşturulmasından bağımsız hale getirir. Varsayılan değeri `True`'dir.

frod_dropout (`float`) : FRoD katmanları için dropout olasılığı.

fan_in_fan_out (`bool`) : 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 ve bu nedenle bu değer `True` olarak ayarlanmalıdır.

bias (`str`) : FRoD için sapma türü. 'none', 'all' veya 'frod_only' olabilir. 'all' veya 'frod_only' seçilirse, ilgili sapmalar eğitim sırasında güncellenir. Bu, adaptörler devre dışı bırakılsa bile, modelin adaptasyon olmadan temel modelin üreteceğiyle aynı çıktıyı üretmeyeceği anlamına gelir.

modules_to_save (`List[str]`) : Son kontrol noktasında eğilebilir olarak ayarlanacak ve kaydedilecek, FRoD katmanları dışındaki modüllerin listesi.

init_weights (`bool`) : FRoD katmanlarının ağırlıklarının varsayılan başlatma yöntemiyle başlatılıp başlatılmayacağını belirtir. Tam olarak ne yaptığınızı biliyorsanız bu ayarı değiştirmeyin.

layers_to_transform (`Union[List[int],int]`) : Dönüştürülecek katman indeksleri. Bu argüman belirtilirse, FRoD dönüşümleri bu listede belirtilen katman indekslerine uygulanır. Tek bir tamsayı geçirilirse, FRoD dönüşümleri bu indeksteki katmana uygulanır.

layers_pattern (`Optional[Union[List[str], str]]`) : Katman desen adı, yalnızca `layers_to_transform` `None`'den farklıysa kullanılır. Bu, genellikle `'layers'` veya `'h'` olarak adlandırılan modelin `nn.ModuleList`'ini hedeflemelidir.

sparse_rate (`float`) : Seyreltilmiş eğitilebilir rotasyon matrisindeki çapraz olmayan girdilerin oranı. Daha yüksek değerler kapasiteyi ve eğitilebilir parametre sayısını artırır; daha düşük değerler daha az maliyetlidir. Varsayılan değer `0.01`'dir.

regularization_alpha (`float`) : Taban ağırlıklardan ortak taban oluşturulurken kullanılan küçük pozitif değer. Aynı kategorideki katmanların korele ağırlıkları olması durumunda matris tersini kararlı hale getirir. Varsayılan değeri `1e-3`'tür.

progressbar (`bool`) : FRoD projeksiyonları oluşturulurken bir ilerleme çubuğu gösterilip gösterilmeyeceğini belirtir. Hedef modül kategorileri üzerinde matris ayrıştırmaları çalıştırıldığı için büyük modellerde projeksiyon başlatma işlemi yavaş olabilir. Varsayılan değeri `True`'dur.

runtime_offload_base_weight (`bool`) : Aktif FRoD yolunun bunlara ihtiyacı olmadığında hedef temel ağırlıkların CPU'da tutulup tutulmayacağını belirtir. FRoD, uyarlanmış ağırlığı doğrudan yeniden oluşturduğundan bu, GPU belleğini azaltabilir; ancak modelin taşınmasından veya ileri çalıştırma (forward) işleminin ardından tüm temel parametrelerin hızlandırıcıda (accelerator) kalması gerektiğine dair standart PEFT sözleşmesini değiştirir. Varsayılan değeri `False`'dir.

Bu, bir [FrodModel](/docs/peft/main/tr/package_reference/frod#peft.FrodModel) yapılandırmasını depolamak için kullanılan yapılandırma sınıfıdır.

Makale: https://doi.org/10.1609/aaai.v40i31.39813.

## FrodModel[[peft.FrodModel]]

#### peft.FrodModel[[peft.FrodModel]]

```python
peft.FrodModel(model, peft_config: Union[PeftConfig, dict[str, PeftConfig]], adapter_name: str, low_cpu_mem_usage: bool = False, state_dict: Optional[dict[str, torch.Tensor]] = None)
```

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

