PEFT documentation
FRoD: Fine-Tuning Efisien Penuh-Rang dengan Derotasi
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.Lineardantransformers.pytorch_utils.Conv1Dyang 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
< 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 = 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 adalahTrue. - 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 menggunakanConv1Dyang menyimpan bobot seperti (fan_in, fan_out) sehingga ini harus diatur keTrue. - 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 jikalayers_to_transformberbeda dariNone. Ini harus menargetkannn.ModuleListdari 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 adalah0.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 adalah1e-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 adalahTrue. - 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 adalahFalse.
Ini adalah kelas konfigurasi untuk menyimpan konfigurasi dari FrodModel.
FrodModel
kelas peft.FrodModel
< source >( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )