PEFT documentation
DeLoRA: Adaptasi Rank Rendah Terpisah
DeLoRA: Adaptasi Rank Rendah Terpisah
DeLoRA adalah teknik fine-tuning yang efisien secara parameter, yang secara implisit mempertahankan batas Frobenius terhadap bobot pretrained dengan menormalisasi dan menskalakan matriks low-rank yang dapat dipelajari. Hal ini secara efektif memisahkan pembelajaran arah (istilah BA) dan magnitudo (istilah batas) dari pembaruan bobot, sehingga menghindari pergeseran katastrofik pada bobot yang diadaptasi serta meningkatkan ketahanan terhadap pilihan hiperparameter.
Catatan:
- gunakan learning rate 10-100x lebih besar daripada untuk varian LoRA standar (nilai tipikal dari 1e-3/1e-2/..)
- pastikan parameter batas awal lambda tidak terlalu kecil (nilai tipikal sekitar 10/15/..). Mengatur lambda yang berbeda untuk lapisan yang berbeda dimungkinkan
DeLoRA saat ini memiliki batasan berikut:
- Hanya lapisan nn.Linear yang didukung.
- Lapisan terkuantisasi tidak didukung.
Jika batasan-batasan ini tidak sesuai dengan kasus penggunaan Anda, pertimbangkan metode lain sebagai gantinya.
Abstrak dari makalah tersebut adalah:
Metode Parameter-Efficient FineTuning (PEFT) baru-baru ini meraih popularitas yang signifikan berkat ketersediaan luas model pretrained berskala besar. Metode-metode ini memungkinkan adaptasi cepat ke tugas turunan dengan biaya komputasi minimal. Namun, metode finetuning populer seperti LoRA menunjukkan robustness yang terbatas terkait pilihan hyperparameter atau rezim pelatihan yang diperpanjang, sehingga menghambat performa optimal out-of-the-box. Sebaliknya, pendekatan bounded, seperti ETHER, memberikan robustness yang lebih besar tetapi terbatas pada adaptasi rank yang sangat rendah dan transformasi kekuatan tetap, yang mengurangi kekuatan ekspresif adaptasinya. Dalam karya ini, kami mengusulkan Decoupled Low-rank Adaptation (DeLoRA), sebuah metode finetuning baru yang menormalisasi dan menskalakan matriks low-rank yang dapat dipelajari. Dengan membatasi jarak transformasi, DeLoRA secara efektif memisahkan pembelajaran sudut dari kekuatan adaptasi, meningkatkan robustness tanpa mengorbankan performa. Melalui evaluasi pada generasi gambar yang didorong subjek, pemahaman bahasa alami, dan instruction tuning, kami menunjukkan bahwa DeLoRA menyamai atau melampaui performa metode PEFT kompetitor, sambil menunjukkan robustness yang lebih kuat.
Ikhtisar benchmark
API
DeloraConfig
kelas peft.DeloraConfig
< 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 = 8delora_lambda: int = 15module_dropout: float = 0.0target_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonebias: Literal['none', 'all', 'delora_only'] = 'none'init_weights: bool = Truelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Nonerank_pattern: Optional[dict] = <factory>lambda_pattern: Optional[dict] = <factory>modules_to_save: Optional[list[str]] = None )
Parameter
- r (
int) β Rank dari adapter DeLoRA. - delora_lambda (
int) β Nilai awal dari batas adapter DeLoRA. Variabel ini menetapkan batas atas pada norma Frobenius dari perubahan bobot, sehingga model yang telah ditala ulang tidak menyimpang terlalu jauh dari model aslinya. - module_dropout (
float) β Probabilitas dropout untuk menonaktifkan modul DeLoRA selama pelatihan. - target_modules (
Optional[Union[List[str], str]]) β Nama-nama modul yang akan diterapkan adapter-nya. Jika ini ditentukan, hanya modul dengan nama yang ditentukan yang akan diganti. Saat meneruskan string, pencocokan regex akan dilakukan. Saat meneruskan daftar string, pencocokan persis akan dilakukan atau diperiksa apakah nama modul diakhiri dengan salah satu string yang diteruskan. Jika ini ditentukan sebagai βall-linearβ, maka semua modul linear/Conv1D akan dipilih, kecuali lapisan output. Jika ini tidak ditentukan, modul akan dipilih sesuai dengan arsitektur model. Jika arsitekturnya tidak diketahui, error akan dilempar β dalam hal ini, Anda harus menentukan modul target secara manual. - exclude_modules (
Optional[Union[List[str], str]]) β Nama-nama modul yang tidak akan diterapkan adapter. Saat melewatkan string, pencocokan regex akan dilakukan. Saat melewatkan daftar string, pencocokan persis akan dilakukan atau diperiksa apakah nama modul berakhiran dengan salah satu string yang dilewatkan. - bias (
str) — Bias type for DeLoRA. Can be ‘none’, ‘all’ or ‘delora_only’. If ‘all’ or ‘delora_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. - init_weights (
bool) β Apakah akan melakukan inisialisasi bobot adapter. JikaTrue(default): A diinisialisasi dengan inisialisasi kaiming uniform, sedangkan B diinisialisasi dengan nol. JikaFalse: A dan B keduanya diinisialisasi dengan kaiming uniform, sehingga langsung memberikan delta yang tidak nol. Hal ini umumnya tidak disarankan untuk penggunaan normal. - layers_to_transform (
Union[List[int], int]) β Indeks layer yang akan ditransformasi. Jika daftar int yang dilewatkan, adapter akan diterapkan pada indeks layer yang ditentukan dalam daftar ini. Jika satu integer yang dilewatkan, transformasi akan diterapkan pada layer di indeks ini. - 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'. - rank_pattern (
dict) β Pemetaan dari nama layer atau ekspresi regexp ke rank yang berbeda dari rank default yang ditentukan olehr. Sebagai contoh,{'^model.decoder.layers.0.encoder_attn.k_proj': 16}. - lambda_pattern (
dict) β Pemetaan dari nama layer atau ekspresi regexp ke lambdas yang berbeda dari lambda default yang ditentukan olehdelora_lambda. Sebagai contoh,{'^model.decoder.layers.0.encoder_attn.k_proj': 16}. - modules_to_save (
Optional[List[str]]) β Daftar modul selain lapisan adapter yang akan diatur sebagai dapat dilatih dan disimpan dalam checkpoint akhir.
Ini adalah kelas konfigurasi untuk menyimpan konfigurasi dari DeloraModel.
DeloraModel
kelas peft.DeloraModel
< 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 (
torch.nn.Module) β Model yang akan diadaptasi. - config (DeloraConfig) β Konfigurasi model DeLoRA.
- adapter_name (
str) β Nama adapter, secara default"default".
Mengembalikan
torch.nn.Module
Model DeLoRA.
Membuat model DeLoRA dari model transformers yang telah dilatih sebelumnya.
Metode ini dijelaskan secara rinci dalam DeLoRA: Decoupled Low-rank Adaptation.
Atribut:
- model (PreTrainedModel) β Model yang akan diadaptasi.
- peft_config (DeloraConfig): Konfigurasi model DeLoRA.