PEFT documentation
GraLoRA
GraLoRA
Granular Low-Rank Adaptation (GraLoRA) adalah metode PEFT yang dirancang untuk meningkatkan ekspresivitas adaptasi peringkat rendah sekaligus meningkatkan ketahanan terhadap outlier aktivasi, berdasarkan wawasan dari masalah-masalah yang dikenal dalam kuantisasi.

Berbeda dengan LoRA standar yang menerapkan satu adapter low-rank di seluruh ruang fitur, GraLoRA memperkenalkan skema adaptasi yang terstruktur dan lebih rinci. Skema ini membagi ruang adaptasi menjadi grid berisi pasangan adapter kecil dan independen, di mana masing-masing bertanggung jawab atas subset lokal dari dimensi input dan output. Akibatnya, setiap adapter beroperasi pada subruang yang kali lebih kecil dalam kedua dimensinya dibandingkan adapter LoRA asli.
Dekomposisi yang granular ini memungkinkan pembaruan yang terlokalisasi secara spasial dan sadar konteks, secara efektif meningkatkan kapasitas representasi tanpa menambah parameter atau biaya komputasi. Dengan mengisolasi pengaruh aktivasi ekstrem di dalam subruang yang lebih kecil, GraLoRA memitigasi distorsi gradien dan menjaga keseimbangan antar-saluran selama adaptasi.
Abstrak dari makalah tersebut adalah:
Low-Rank Adaptation (LoRA) adalah metode populer untuk fine-tuning yang efisien secara parameter (PEFT) pada model generatif, yang dihargai karena kesederhanaan dan efektivitasnya. Meskipun telah mengalami peningkatan baru-baru ini, LoRA masih memiliki keterbatasan mendasar: overfitting ketika bottleneck diperlebar. LoRA memberikan hasil terbaik pada rank 32–64, namun akurasinya stagnan atau menurun pada rank yang lebih tinggi, dan masih belum mencapai kinerja full fine-tuning (FFT). Kami mengidentifikasi penyebab utamanya sebagai bottleneck struktural LoRA, yang memperkenalkan gradient entanglement ke channel input yang tidak terkait dan mendistorsi propagasi gradien. Untuk mengatasi hal ini, kami memperkenalkan struktur baru, Granular Low-Rank Adaptation (GraLoRA), yang mempartisi matriks bobot menjadi sub-blok, masing-masing dengan adapter low-rank-nya sendiri. Dengan biaya komputasi atau penyimpanan yang dapat diabaikan, GraLoRA mengatasi keterbatasan LoRA, secara efektif meningkatkan kapasitas representasi, dan lebih mendekati perilaku FFT. Eksperimen pada benchmark generasi kode, penalaran nalar sehat, penalaran matematis, pemahaman bahasa umum, dan generasi gambar menunjukkan bahwa GraLoRA secara konsisten melampaui LoRA dan baseline lainnya, mencapai peningkatan absolut hingga +8,5% pada Pass@1 di HumanEval+. Peningkatan ini bertahan di berbagai ukuran model dan pengaturan rank, menjadikan GraLoRA sebagai solusi yang skalabel dan robust untuk PEFT.
Ikhtisar benchmark
API
GraloraConfig
kelas peft.GraloraConfig
< 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 = 32hybrid_r: int = 0target_modules: list[str] | str | None = Nonealpha: int = 64gralora_dropout: float = 0.0gralora_k: int = 2fan_in_fan_out: bool = Falsebias: str = 'none'modules_to_save: list[str] | None = Noneinit_weights: bool = Truelayers_to_transform: list[int] | int | None = Nonelayers_pattern: str | None = None )
Parameter
- r (
int) — Dimensi perhatian GraLoRA menentukan rank dari adapter GraLoRA. Jumlah total parameter dari adapter GraLoRA sama dengan LoRA dengan rank r yang sama, sementara ekspresivitasnya dikalikan dengan gralora_k. - hybrid_r (
int) — Rank Hybrid GraLoRA menentukan rank yang dialokasikan untuk metode LoRA vanilla saat menggunakan metode Hybrid GraLoRA. Hybrid GraLoRA, kombinasi dari GraLoRA dan LoRA vanilla, menjadi tersedia ketika hybrid_r > 0. Jumlah parameter dari adapter GraLoRA adalah r + hybrid_r. - target_modules (
Union[List[str], str]) — Daftar nama modul atau ekspresi regex dari nama modul yang akan diganti dengan GraLoRA. Misalnya, [‘q’, ‘v’] atau ‘.decoder.(SelfAttention|EncDecAttention).*(q|v)$‘. Ini juga bisa berupa wildcard ‘all-linear’ yang cocok dengan semua linear/Conv1D (jika modelnya adalah PreTrainedModel, lapisan output dikecualikan). Jika tidak dinyatakan, modul akan dipilih sesuai dengan arsitektur model. Jika arsitekturnya tidak diketahui, error akan dilempar — dalam kasus ini, Anda harus menentukan target modul secara manual. - alpha (
int) — GraLoRA alpha. GraLoRA alpha adalah faktor penskalaan untuk adapter GraLoRA. Skala menjadi alpha / (r + hybrid_r). - gralora_dropout (
float) — GraLoRA dropout adalah probabilitas dropout untuk adapter GraLoRA. Digunakan untuk mencegah overfitting dan meningkatkan generalisasi adapter GraLoRA. - gralora_k (
int) — GraLoRA k menentukan jumlah subblok dalam adapter GraLoRA. Rank r harus dapat dibagi habis oleh gralora_k agar adapter GraLoRA valid. Jumlah total parameter tetap terjaga terlepas dari gralora_k. Seluruh rank adapter GraLoRA ditingkatkan sebesar gralora_k, sementara rank setiap subblok dikurangi sebesar gralora_k. gralora_k=2 direkomendasikan untuk rank 32 atau lebih rendah, dan gralora_k=4 direkomendasikan untuk rank 64 atau lebih tinggi. - fan_in_fan_out (
bool) — Atur ini ke True jika layer yang akan diganti menyimpan bobot seperti (fan_in, fan_out). Misalnya, gpt-2 menggunakanConv1Dyang menyimpan bobot seperti (fan_in, fan_out) sehingga ini harus diatur keTrue. - bias (
str) — Jenis bias untuk gralora. Bisa berupa ‘none’, ‘all’, atau ‘gralora_only’. Jika ‘all’ atau ‘gralora_only’, bias yang sesuai akan diperbarui selama pelatihan. Perhatikan bahwa ini berarti, bahkan saat adapter dinonaktifkan, model tidak akan menghasilkan output yang sama seperti model dasar tanpa adaptasi. - modules_to_save (
Optional[list[str]]) — Daftar modul selain lapisan gralora yang akan disetel sebagai trainable dan disimpan dalam checkpoint akhir. Sebagai contoh, dalam tugas Sequence Classification atau Token Classification, lapisan akhirclassifier/scorediinisialisasi secara acak sehingga perlu dibuat trainable dan disimpan. - init_weights (
bool) — Apakah akan menginisialisasi bobot lapisan GraLoRA dengan inisialisasi defaultnya. Jangan ubah pengaturan ini, kecuali Anda tahu persis apa yang Anda lakukan. - layers_to_transform (
Union[List[int], int]) — Indeks layer yang akan ditransformasi. Jika argumen ini ditentukan, PEFT hanya akan mentransformasi indeks layer yang tercantum di dalam daftar ini. Jika satu bilangan bulat tunggal diberikan, PEFT hanya akan mentransformasi layer pada indeks tersebut. Ini hanya berfungsi ketika target_modules adalah daftar str. - layers_pattern (
Optional[Union[List[str], str]]) — Nama pola layer, hanya digunakan jikalayers_to_transformberbeda dari None dan jika pola layer tersebut tidak ada dalam pola layer umum. Ini hanya berfungsi ketika target_modules adalah daftar str. Ini harus menargetkannn.ModuleListdari model, yang sering disebut sebagai'layers'atau'h'.
Ini adalah kelas konfigurasi untuk menyimpan konfigurasi dari GraloraModel.
GraloraModel
kelas peft.GraloraModel
< source >( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None ) → torch.nn.Module
Parameter
- model (PreTrainedModel) — Model yang akan diadaptasi.
- config (GraloraConfig) — Konfigurasi model Gralora.
- adapter_name (
str) — Nama adapter, secara default"default".
Mengembalikan
torch.nn.Module
Model Gralora.
Membuat model Vector-based Random Matrix Adaptation (Gralora) dari model transformers yang sudah dilatih sebelumnya.
Contoh:
>>> from transformers import AutoModelForCausalLM
>>> from peft import GraloraConfig, get_peft_model
>>> base_model = AutoModelForCausalLM.from_pretrained("facebook/opt-125m")
>>> config = GraloraConfig(r=128)
>>> model = get_peft_model(base_model, config)Atribut:
- model (PreTrainedModel) — Model yang akan diadaptasi.
- peft_config (GraloraConfig): Konfigurasi model Gralora.