PEFT documentation
Menjembatani Kesenjangan antara Adaptasi Ber-rank Rendah dan Adaptasi Ortogonal melalui Adaptasi Refleksi Householder (HRA)
Menjembatani Kesenjangan antara Adaptasi Ber-rank Rendah dan Adaptasi Ortogonal melalui Adaptasi Refleksi Householder (HRA)

HRA memberikan perspektif baru yang menghubungkan LoRA dengan OFT, yang berarti ia dapat memanfaatkan keunggulan dari kedua strategi tersebut, dengan memanfaatkan Householder reflections untuk mengurangi parameter dan biaya komputasi sambil menghukum hilangnya pengetahuan pra-pelatihan. Ia secara konsisten mencapai kinerja yang lebih baik dengan jumlah parameter yang dapat dilatih lebih sedikit dan melampaui adapter state-of-the-art di berbagai model, termasuk large language models (LLM) dan generator gambar kondisional.
HRA membangun rantai dari r refleksi Householder yang dapat dilatih (HR). Karena matriks refleksi Householder adalah matriks ortogonal dan hasil kali matriks ortogonal juga merupakan matriks ortogonal, HRA memenuhi jaminan teoretis dari Orthogonal Finetuning (OFT). Sementara itu, HRA juga dapat dipandang sebagai adapter fine-tuning ber-rank rendah. Semakin tinggi r, semakin banyak parameter yang dapat dilatih, yang menghasilkan kapasitas model yang lebih besar dan kinerja yang lebih baik. Selain itu, karena struktur rantainya, ortogonalitas bidang HR memengaruhi kapasitas dan regularitas HRA. Untuk mencapai keseimbangan antara kapasitas model dan regularitas, regularizer ortogonalitas dari bidang HR ditambahkan ke fungsi loss. Bobot dapat mengontrol kekuatan regularizer.
Abstrak dari makalah tersebut adalah:
Meskipun mengikuti jalur teknis yang berbeda, kedua teknik adaptasi ber-rank rendah dan ortogonal dapat secara efisien mengadaptasi model pra-pelatihan berskala besar untuk tugas atau domain tertentu berdasarkan sebagian kecil parameter yang dapat dilatih. Dalam studi ini, kami menjembatani kesenjangan antara kedua teknik tersebut dengan mengusulkan metode adaptasi yang sederhana namun efektif berdasarkan refleksi Householder. Diberikan sebuah model pra-pelatihan, metode kami melakukan penyesuaian halus (fine-tuning) pada lapisan-lapisannya dengan mengalikan setiap matriks bobot beku dengan matriks ortogonal yang dibangun oleh rantai refleksi Householder (HR) yang dapat dipelajari. Penyesuaian halus ortogonal berbasis HR ini ekuivalen dengan adaptasi ber-rank rendah yang adaptif. Selain itu, kami menunjukkan bahwa sifat ortogonalitas dari bidang-bidang refleksi yang bersesuaian dengan HR berdampak pada kapasitas dan keteraturan model. Analisis ini mendorong kami untuk melakukan regularisasi terhadap ortogonalitas HR, yang mengarah pada berbagai implementasi dari metode adaptasi refleksi Householder (HRA) yang diusulkan. Dibandingkan dengan metode terkini (state-of-the-art), HRA mencapai kinerja yang lebih unggul dengan jumlah parameter yang dapat dipelajari lebih sedikit saat mengadaptasi model bahasa besar dan generator gambar bersyarat. Kode tersedia di peft dan HRA.
API
HRAConfig
kelas peft.HRAConfig
< 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 = 8apply_GS: bool = Falsetarget_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Noneinit_weights: bool = Truelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Nonebias: str = 'none'modules_to_save: Optional[list[str]] = None )
Parameter
- r (
int) β Rank HRA di berbagai lapisan. Disarankan untuk mengatur βrβ ke bilangan genap; jika tidak, metode inisialisasi default tidak akan berfungsi. - apply_GS (
bool) β Apakah akan menerapkan ortogonalisasi Gram-Schmidt. - 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 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. - init_weights (
bool) β Apakah akan melakukan inisialisasi bobot HRA. - 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'. - bias (
str) — Bias type for HRA. Can be'none','all'or'hra_only'. - modules_to_save (
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 HRAModel.
HRAModel
kelas peft.HRAModel
< 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 tempat lapisan tuner adapter akan dilampirkan. - config (HRAConfig) β Konfigurasi model HRA.
- 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 HRA.
Membuat model Householder reflection adaptation (HRA) dari model pretrained. Metode ini dijelaskan dalam https://huggingface.co/papers/2405.17484
Contoh:
>>> from diffusers import StableDiffusionPipeline
>>> from peft import HRAModel, HRAConfig
>>> config_te = HRAConfig(
... r=8,
... target_modules=["k_proj", "q_proj", "v_proj", "out_proj", "fc1", "fc2"],
... init_weights=True,
... )
>>> config_unet = HRAConfig(
... r=8,
... target_modules=[
... "proj_in",
... "proj_out",
... "to_k",
... "to_q",
... "to_v",
... "to_out.0",
... "ff.net.0.proj",
... "ff.net.2",
... ],
... init_weights=True,
... )
>>> model = StableDiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5")
>>> model.text_encoder = HRAModel(model.text_encoder, config_te, "default")
>>> model.unet = HRAModel(model.unet, config_unet, "default")Atribut:
- model (
~torch.nn.Module) β Model yang akan diadaptasi. - peft_config (HRAConfig): Konfigurasi model HRA.