PEFT documentation
PVeRA: Adaptasi Matriks Acak Berbasis Vektor Probabilistik
PVeRA: Adaptasi Matriks Acak Berbasis Vektor Probabilistik
PVeRA adalah teknik fine-tuning yang efisien secara parameter, yang didasarkan pada VeRA, dalam keluarga adapter berbasis LoRA. Teknik ini mempertahankan anggaran parameter yang sangat rendah dari VeRA, tetapi meningkatkan kinerja dengan mempelajari distribusi adaptasi laten. Hal ini juga memungkinkan model yang diadaptasi dengan PVeRA untuk menghasilkan estimasi interval kepercayaan Monte Carlo, dengan melakukan sampling dari distribusi yang dipelajari saat inferensi.
Saat menyimpan parameter adapter, Anda dapat memilih untuk tidak menyimpan matriks rank rendah dengan mengatur save_projection=False pada PveraConfig. Dalam kasus tersebut, matriks ini akan dipulihkan berdasarkan seed acak tetap dari argumen projection_prng_key. Hal ini mengurangi ukuran checkpoint, tetapi kami tidak dapat menjamin reproduktibilitas di semua perangkat dan untuk semua versi PyTorch di masa depan. Jika Anda ingin memastikan reproduktibilitas, atur save_projection=True (yang merupakan nilai default).
Untuk menangani bentuk lapisan yang diadaptasi yang berbeda, PVeRA menginisialisasi matriks A dan B bersama dengan ukuran terbesar yang diperlukan untuk setiap dimensi. Selama jalur maju, submatriks A dan B untuk lapisan tertentu dipotong dari matriks bersama ini dan digunakan seperti yang dijelaskan dalam makalah. Sebagai contoh, mengadaptasi dua lapisan linear dengan bentuk (100, 20) dan (80, 50) akan membuat matriks A dan B dengan bentuk (rank, 50) dan (100, rank) masing-masing. Kemudian, untuk mengadaptasi lapisan dengan bentuk (100, 20), submatriks A dan B dengan bentuk (rank, 20) dan (100, rank) akan diekstrak.
PVeRA saat ini memiliki batasan berikut:
- Hanya lapisan
nn.Linearyang didukung. - Representasi laten tidak mudah diakses untuk pelatihan menggunakan divergensi KL.
Abstrak dari makalah tersebut adalah:
Model fondasi besar telah muncul dalam beberapa tahun terakhir dan mendorong batas kinerja untuk berbagai tugas. Pelatihan atau bahkan penyesuaian halus (finetuning) model semacam itu membutuhkan dataset dan sumber daya komputasi yang sangat besar, yang sering kali langka dan mahal. Metode adaptasi menyediakan solusi yang efisien secara komputasi untuk mengatasi keterbatasan ini dengan memungkinkan model tersebut disesuaikan halusnya pada sejumlah kecil data dan daya komputasi. Hal ini dicapai dengan menambahkan modul baru yang dapat dilatih ke tulang punggung (backbone) yang dibekukan, dengan hanya sebagian kecil parameter yang dapat dilatih, dan hanya menyesuaikan modul-modul tersebut pada tugas-tugas baru. Baru-baru ini, adapter VeRA terbukti unggul dalam adaptasi yang efisien secara parameter dengan memanfaatkan sepasang matriks ber-rank rendah acak yang dibekukan dan dibagikan di semua lapisan. Dalam makalah ini, kami mengusulkan PVeRA, versi probabilistik dari adapter VeRA, yang memodifikasi matriks ber-rank rendah dari VeRA secara probabilistik. Modifikasi ini secara alami memungkinkan penanganan ambiguitas bawaan dalam input dan memungkinkan konfigurasi sampling yang berbeda selama pelatihan dan pengujian. Evaluasi komprehensif dilakukan pada benchmark VTAB-1k dan tujuh adapter, dengan PVeRA melampaui VeRA dan adapter lainnya.
Ikhtisar benchmark
API
PveraConfig
kelas peft.PveraConfig
< 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 = 256target_modules: Optional[Union[list[str], str]] = Noneprojection_prng_key: int = 0save_projection: bool = Truepvera_dropout: float = 0.0d_initial: float = 0.1fan_in_fan_out: bool = Falsebias: str = 'none'modules_to_save: Optional[list[str]] = Noneinit_weights: bool = Truelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Nonesample_at_inference: bool = Falsegenerator_seed: Optional[int] = None )
Parameter
- r (
int, opsional, default256) β Dimensi parameter PVeRA (βrankβ). Pilih nilai yang lebih tinggi daripada rank LoRA di sini, karena PVeRA berbagi parameter antar lapisan dan karenanya menggunakan jauh lebih sedikit parameter daripada LoRA. - target_modules (
Union[List[str], str]) β Nama-nama modul yang akan diterapkan PVeRA. Hanya lapisan linear yang didukung. Saat meneruskan string, pencocokan regex akan dilakukan. Jika ini ditentukan sebagai βall-linearβ, maka semua modul linear/Conv1D akan dipilih. Jika ini tidak ditentukan, modul akan dipilih sesuai dengan arsitektur model. Jika arsitekturnya tidak diketahui, error akan dilempar. - projection_prng_key (
int) β Kunci inisialisasi PRNG PVeRA. Digunakan untuk menginisialisasi pvera_A dan pvera_B untuk model baru atau saat memuat checkpoint yang tidak menyertakan proyeksi ini. Nilai defaultnya adalah0. - save_projection (
bool) β Apakah akan menyimpan proyeksi pvera_A / pvera_B dalam state dict bersama bobot lambda_b / lambda_d per layer. Hal ini akan meningkatkan ukuran checkpoint, tetapi menjamin bahwa checkpoint dapat dimuat ulang di semua konfigurasi sistem. Defaultnya adalahTrue. - pvera_dropout (
float) β Probabilitas dropout untuk lapisan PVeRA. - d_initial (
float, opsional, default0.1) β Nilai awal untuk vektorpvera_lambda_dyang digunakan saat menginisialisasi parameter PVeRA. Nilai kecil (<=0.1) disarankan. - 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) — Bias type for PVeRA. Can be ‘none’, ‘all’ or ‘pvera_only’. If ‘all’ or ‘pvera_only’, the corresponding biases will be updated during training. Be aware that this means that, even when disabling the adapters, the model will not produce the same output as the base model would have without adaptation. - modules_to_save (
List[str]) β Daftar modul di luar lapisan PVeRA yang akan diset sebagai trainable dan disimpan dalam checkpoint akhir. - init_weights (
bool) β Apakah akan menginisialisasi bobot lapisan PVeRA 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, transformasi PVeRA akan diterapkan pada indeks layer yang tercantum dalam daftar ini. Jika satu bilangan bulat tunggal diberikan, transformasi PVeRA akan diterapkan pada layer di indeks tersebut. - layers_pattern (
Optional[Union[List[str], str]]) β Nama pola layer, hanya digunakan jikalayers_to_transformberbeda dariNone. Ini harus menargetkannn.ModuleListdari model, yang sering disebut'layers'atau'h'. - sample_at_inference (
bool, defaultnyaFalse) β Apakah akan mengambil sampel dari distribusi PVeRA yang dipelajari saat inferensi. Jika False, rata-rata yang dipelajari akan digunakan. - generator_seed (
int, defaultnya None) β Biji acak untuk generator yang digunakan untuk mengambil sampel dari distribusi yang dipelajari.
Ini adalah kelas konfigurasi untuk menyimpan konfigurasi dari PveraModel.
Makalah: https://www.arxiv.org/abs/2512.07703.
PveraModel
kelas peft.PveraModel
< 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 (PveraConfig) β Konfigurasi model PVeRA.
- adapter_name (
str) β Nama adapter, secara default"default". - low_cpu_mem_usage (
bool,optional, defaults toFalse) β Membuat bobot adapter kosong pada perangkat meta. Berguna untuk mempercepat proses pemuatan.
Mengembalikan
torch.nn.Module
Model PVeRA.
Membuat model Probabilistic Vector-based Random Matrix Adaptation (PVeRA) dari model transformers yang telah dilatih sebelumnya.
Contoh:
>>> from transformers import AutoModel
>>> from peft import PveraConfig, get_peft_model
>>> base_model = AutoModel.from_pretrained("facebook/dinov2-base")
>>> config = PveraConfig(r=128, sample_at_inference=False)
>>> model = get_peft_model(base_model, config)Atribut:
- model (PreTrainedModel) β Model yang akan diadaptasi.
- peft_config (PveraConfig): Konfigurasi dari model PVeRA.