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 adalah metode PEFT yang berbagi bank vektor trainable yang ringkas di antara bobot adapter low-rank. Alih-alih mempelajari setiap elemen matriks LoRA secara independen, UniLoRA memproyeksikan entri secara deterministik ke nilai theta_d yang dibagikan dan mempelajari parameter bersama yang digunakan oleh pembaruan adapter.

Mulai Cepat

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()

Parameter Penting

r mengontrol dimensi adapter rank rendah. Nilai yang lebih besar meningkatkan kapasitas adapter dan penggunaan memori.

theta_d_length mengontrol panjang bank vektor UniLoRA bersama. Ini adalah penyimpanan utama yang dapat dilatih dan dibagikan oleh entri adapter yang diproyeksikan.

proj_seed mengontrol generasi indeks deterministik untuk proyeksi tetap ke theta_d. Menggunakan ulang seed dan konfigurasi yang sama membuat indeks adapter yang dihasilkan dapat direproduksi.

target_modules memilih modul mana yang menerima adapter UniLoRA. Gunakan sufiks modul seperti ["q_proj", "v_proj"], string regex, atau "all-linear" jika didukung oleh arsitektur model.

unilora_dropout menerapkan dropout di dalam lapisan adapter UniLoRA selama pelatihan.

init_weights mengontrol inisialisasi parameter UniLoRA. Atur menjadi False untuk mempertahankan inisialisasi theta_d acak ketika Anda perlu mengelola inisialisasi secara manual.

save_indices mengontrol apakah checkpoint UniLoRA menyimpan tensor indeks dan skala yang dihasilkan bersama dengan parameter theta_d yang dibagikan. Membiarkan opsi ini nonaktif menghasilkan checkpoint yang lebih kecil dan meregenerasi indeks dari proj_seed; mengaktifkannya membuat adapter yang disimpan menjadi independen dari perubahan generasi indeks di masa depan.

Ikhtisar benchmark

API

UniLoraConfig

kelas 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 )

Parameter

  • r (int) — Rank dari low-rank adaptation. Ini mengontrol kapasitas ekspresif dari pembaruan UniLora.
  • proj_seed (int) — Biji acak yang digunakan untuk menghasilkan penugasan indeks tetap. Hal ini memastikan reproduktibilitas antar eksekusi.
  • theta_d_length (int) — Panjang vektor UniLora bersama theta_d.
  • target_modules (Union[list[str], str], opsional) — Nama atau pola modul tempat adapter UniLora diterapkan.
    • Jika string diberikan, string tersebut diperlakukan sebagai ekspresi reguler.
    • Jika daftar disediakan, modul dicocokkan berdasarkan nama persis atau akhiran.
    • Nilai khusus ‘all-linear’ menerapkan UniLora ke semua lapisan Linear / Conv1D kecuali lapisan output. Jika tidak ditentukan, modul disimpulkan dari arsitektur model. Kesalahan akan dilemparkan jika arsitektur tidak didukung.
  • unilora_dropout (float) — Probabilitas dropout yang diterapkan di dalam lapisan UniLora.
  • fan_in_fan_out (bool) — Apakah lapisan yang diganti menyimpan bobot dalam format (fan_in, fan_out). Ini harus diatur ke True untuk model seperti GPT-2 yang menggunakan lapisan Conv1D.
  • bias (str) — Menentukan istilah bias mana yang dapat dilatih:
    • ‘none’: tidak ada parameter bias yang diperbarui
    • ‘all’: semua parameter bias diperbarui
    • ‘unilora_only’: hanya bias di dalam lapisan UniLora yang diperbarui Catatan: mengaktifkan pembaruan bias mengubah keluaran model bahkan ketika adapter dinonaktifkan.
  • modules_to_save (list[str], opsional) — Modul tambahan (di luar lapisan UniLora) yang harus tetap dapat dilatih dan disimpan dalam checkpoint akhir. Ini umum digunakan untuk kepala tugas tertentu seperti klasifikator.
  • init_theta_d_bound (float) — Batas inisialisasi untuk bank vektor UniLora. Vektor diambil secara seragam dari [-init_theta_d_bound, init_theta_d_bound]. Inisialisasi dengan nol dihindari untuk mencegah gradien yang menghilang. Nilai kecil (misalnya, 0.02) direkomendasikan untuk pelatihan yang stabil.
  • init_weights (bool) — Apakah akan menginisialisasi theta_d dengan inisialisasi UniLora default. Jika diatur ke False, theta_d akan tetap menggunakan inisialisasi acak.
  • save_indices (bool) — Apakah menyimpan indeks UniLora yang dihasilkan dan buffer skala bersama dengan theta_d. Hal ini meningkatkan ukuran checkpoint, tetapi membuat adapter yang disimpan menjadi independen dari perubahan rutin generasi indeks di masa depan.
  • layers_to_transform (Union[list[int], int], opsional) — Indeks lapisan transformer tempat UniLora diterapkan. Jika ditentukan, hanya lapisan-lapisan ini yang dimodifikasi. Opsi ini hanya valid ketika target_modules berupa daftar.
  • layers_pattern (Union[list[str], str], opsional) — Pola nama layer kustom yang digunakan bersama dengan layers_to_transform ketika model tidak mengikuti konvensi penamaan layer standar. Opsi ini hanya valid ketika target_modules berupa daftar.

Kelas konfigurasi untuk adapter UniLora.

Kelas ini mendefinisikan semua hiperparameter yang diperlukan untuk menginisialisasi dan menerapkan lapisan UniLora di dalam kerangka kerja PEFT. Konfigurasi ini sengaja dibuat minimal dan hanya mencakup parameter yang secara aktif digunakan oleh implementasi UniLora saat ini.

Reference: Uni-LoRA: One Vector Is All You Need https://arxiv.org/abs/2506.00799

UniLoraModel

kelas peft.UniLoraModel

< >

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

Membuat adapter UniLora di sekitar model pretrained.

generate_index

< >

( lora_param_count: inttheta_d_length: intproj_seed: int )

Tetapkan indeks theta_d deterministik ke ruang parameter UniLora yang telah diratakan.

Panggilan sederhana np.random.choice(np.arange(theta_d_length), size=lora_param_count) mengambil sampel setiap posisi secara independen, yang dapat menyebabkan beberapa entri theta_d tidak terpakai untuk adapter yang lebih kecil. UniLora justru menggunakan penugasan deterministik yang seimbang: setiap indeks muncul sebanyak floor(D / d) atau ceil(D / d) kali, di mana D adalah jumlah parameter LoRA yang telah diratakan dan d adalah theta_d_length. Hal ini menjaga normalisasi per indeks tetap stabil sambil tetap mengacak penugasannya dengan proj_seed.

Update on GitHub