PEFT documentation

PVeRA: Adaptasi Matriks Acak Berbasis Vektor Probabilistik

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

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.Linear yang 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

< >

( 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, default 256) β€” 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 adalah 0.
  • 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 adalah True.
  • pvera_dropout (float) β€” Probabilitas dropout untuk lapisan PVeRA.
  • d_initial (float, opsional, default 0.1) β€” Nilai awal untuk vektor pvera_lambda_d yang 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 menggunakan Conv1D yang menyimpan bobot seperti (fan_in, fan_out) sehingga ini harus diatur ke True.
  • 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 jika layers_to_transform berbeda dari None. Ini harus menargetkan nn.ModuleList dari model, yang sering disebut 'layers' atau 'h'.
  • sample_at_inference (bool, defaultnya False) β€” 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

< >

( 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 to False) β€” 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:

Update on GitHub