PEFT documentation

FRoD: Fine-Tuning Efisien Penuh-Rang dengan Derotasi

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

FRoD: Fine-Tuning Efisien Penuh-Rang dengan Derotasi

FRoD adalah metode fine-tuning yang efisien secara parameter, yang menggabungkan basis full-rank bersama dengan derajat rotasi yang dapat dipelajari secara sparse. Pembaruan adapter diekspresikan melalui tensor proyeksi tetap dan koefisien yang dapat dilatih, yang memungkinkan FRoD untuk menerapkan pembaruan full-rank sambil tetap menjaga jumlah parameter yang dilatih tetap kecil.

Paper: Full-Rank Efficient Fine-Tuning with Rotational Degrees.

Saat menyimpan parameter adapter, Anda dapat menghindari penyimpanan tensor proyeksi dengan mengatur save_projection=False pada FrodConfig. Dalam kasus tersebut, proyeksi dipulihkan dari bobot model dasar dan seed acak tetap dari projection_prng_key. Hal ini mengurangi ukuran checkpoint, tetapi nilai default adalah save_projection=True agar pemuatan checkpoint tidak bergantung pada detail regenerasi.

Dibandingkan dengan LoRA, FRoD dapat mengekspresikan pembaruan ber-rank penuh pada setiap lapisan linear yang diadaptasi, sementara hanya melatih koefisien diagonal dan himpunan koefisien rotasi off-diagonal yang jarang. Hal ini dapat berguna ketika pembaruan ber-rank rendah terlalu restriktif. Komprominya adalah FRoD menghitung tensor proyeksi tetap dari bobot dasar selama injeksi adapter, yang membuat setup lebih mahal dan implementasinya kurang didukung secara luas dibandingkan LoRA.

Inisialisasi proyeksi dapat berjalan lambat pada model besar karena FRoD menjalankan dekomposisi matriks di atas kategori modul target sebelum menyuntikkan adapter. Bar progres ditampilkan secara default dan dapat dinonaktifkan dengan FrodConfig(progressbar=False).

Untuk pelatihan dengan keterbatasan memori, runtime_offload_base_weight=True menjaga bobot dasar target tetap di CPU ketika jalur FRoD aktif tidak membutuhkannya. Opsi ini bersifat opt-in karena metode PEFT biasanya mempertahankan semua parameter dasar di akselerator setelah model dipindahkan dan setelah jalur maju (forward passes) dilakukan.

FRoD saat ini memiliki batasan berikut:

  • Hanya lapisan nn.Linear dan transformers.pytorch_utils.Conv1D yang didukung.

Mulai Cepat

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

kelas peft.FrodConfig

< >

( 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 = Falsetarget_modules: Optional[Union[list[str], str]] = Noneprojection_prng_key: int = 0save_projection: bool = Truefrod_dropout: float = 0.0fan_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]] = Nonesparse_rate: float = 0.01regularization_alpha: float = 0.001progressbar: bool = Trueruntime_offload_base_weight: bool = False )

Parameter

  • target_modules (Union[List[str], str]) — Nama-nama modul yang akan diterapkan FRoD. Hanya lapisan linear yang didukung.
  • projection_prng_key (int) — Biji acak yang digunakan saat menginisialisasi pola COO FRoD sparse.
  • save_projection (bool) — Apakah tensor proyeksi FRoD akan disimpan dalam state dict. Hal ini meningkatkan ukuran checkpoint tetapi membuat pemuatan ulang adapter tidak bergantung pada regenerasi cache lokal. Defaultnya adalah True.
  • frod_dropout (float) — Probabilitas dropout untuk lapisan FRoD.
  • 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) — Jenis bias untuk FRoD. Bisa berupa ‘none’, ‘all’, atau ‘frod_only’. Jika ‘all’ atau ‘frod_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 (List[str]) — Daftar modul di luar lapisan FRoD yang akan diset sebagai trainable dan disimpan dalam checkpoint akhir.
  • init_weights (bool) — Apakah akan menginisialisasi bobot lapisan FRoD 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 FRoD akan diterapkan pada indeks layer yang tercantum dalam daftar ini. Jika satu bilangan bulat tunggal diberikan, transformasi FRoD 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'.
  • sparse_rate (float) — Fraksi entri non-diagonal dalam matriks rotasi trainable yang sparse. Nilai yang lebih tinggi meningkatkan kapasitas dan parameter trainable; nilai yang lebih rendah lebih hemat. Defaultnya adalah 0.01.
  • regularization_alpha (float) — Nilai positif kecil yang digunakan saat membangun basis bersama dari bobot dasar. Nilai ini menstabilkan invers matriks ketika lapisan dalam kategori yang sama memiliki bobot yang berkorelasi. Nilai defaultnya adalah 1e-3.
  • progressbar (bool) — Apakah menampilkan bilah kemajuan saat membangun proyeksi FRoD. Inisialisasi proyeksi dapat lambat pada model besar karena menjalankan dekomposisi matriks di atas kategori modul target. Bawaan adalah True.
  • runtime_offload_base_weight (bool) — Apakah mempertahankan bobot dasar target di CPU ketika jalur FRoD aktif tidak membutuhkannya. Hal ini dapat mengurangi memori GPU karena FRoD merekonstruksi bobot yang diadaptasi secara langsung, tetapi mengubah konvensi PEFT yang biasa di mana semua parameter dasar tetap berada di akselerator setelah memindahkan model atau menjalankan forward. Defaultnya adalah False.

Ini adalah kelas konfigurasi untuk menyimpan konfigurasi dari FrodModel.

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

FrodModel

kelas peft.FrodModel

< >

( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )

Update on GitHub