PEFT documentation

Adaptasi Rank Tinggi yang Langka

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

Adaptasi Rank Tinggi yang Langka

Sparse High Rank Adapters atau SHiRA adalah jenis adapter alternatif yang terbukti memiliki keunggulan signifikan dibandingkan adapter low rank. Secara spesifik, SHiRA mencapai akurasi yang lebih baik daripada LoRA untuk berbagai tugas visi dan bahasa. SHiRA juga menawarkan fusi multi-adapter yang lebih sederhana dan berkualitas tinggi dengan mengurangi secara signifikan konsep loss, sebuah masalah umum yang dihadapi oleh adapter low rank. SHiRA secara langsung melakukan finetuning pada sejumlah kecil parameter model dasar untuk menyesuaikan model pada tugas adaptasi apa pun.

SHiRA saat ini memiliki batasan berikut:

  • Hanya lapisan nn.Linear yang didukung.

Abstrak dari makalah tersebut adalah:

Low Rank Adaptation (LoRA) telah menarik perhatian besar dalam penelitian AI generatif terkini. Salah satu keunggulan utama LoRA adalah kemampuannya untuk digabungkan (fused) dengan model pretrained, tanpa menambah overhead selama inferensi. Namun, dari sudut pandang deployment mobile, kita dapat menghindari overhead inferensi dalam mode fused tetapi kehilangan kemampuan untuk mengganti adapter dengan cepat, atau mengalami latensi inferensi yang signifikan (hingga 30% lebih tinggi) sambil memungkinkan penggantian cepat dalam mode unfused. LoRA juga menunjukkan konsep-loss (kehilangan konsep) ketika beberapa adapter digunakan secara bersamaan. Dalam makalah ini, kami mengusulkan Sparse High Rank Adapters (SHiRA), paradigma baru yang tidak menimbulkan overhead inferensi, memungkinkan penggantian cepat, dan secara signifikan mengurangi konsep-loss. Secara spesifik, SHiRA dapat dilatih dengan menyetel langsung hanya 1-2% dari bobot model dasar sambil membiarkan yang lain tetap tidak berubah. Hal ini menghasilkan adapter yang sangat sparse (jarang) yang dapat diganti langsung dalam mode fused. Kami juga memberikan wawasan teoretis dan empiris tentang bagaimana sparsity tinggi dalam SHiRA dapat membantu fusi multi-adapter dengan mengurangi konsep-loss. Eksperimen ekstensif kami pada LVMs dan LLMs menunjukkan bahwa finetuning hanya sebagian kecil parameter dalam model dasar secara signifikan melampaui kinerja LoRA sambil memungkinkan baik penggantian cepat maupun fusi multi-adapter. Terakhir, kami menyediakan implementasi SHiRA yang efisien dalam hal latensi dan memori berdasarkan Parameter-Efficient Finetuning (PEFT) Library, yang melatih dengan kecepatan hampir sama dengan LoRA sambil mengonsumsi hingga 16% lebih rendah memori GPU puncak, sehingga membuat SHiRA mudah diadopsi untuk kasus penggunaan praktis. Untuk menunjukkan manfaat penggantian cepat selama inferensi, kami menunjukkan bahwa memuat SHiRA pada model dasar dapat 5x-16x lebih cepat daripada fusi LoRA pada CPU.

Ikhtisar benchmark

API

ShiraConfig

kelas peft.ShiraConfig

< >

( 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 = 32mask_type: Literal['random'] = 'random'random_seed: Optional[int] = Nonetarget_modules: Optional[Union[list[str], str]] = Nonefan_in_fan_out: bool = Falseinit_weights: bool = Truemodules_to_save: Optional[list[str]] = None )

Parameter

  • r (int, opsional, defaultnya 32) β€” Untuk modul target tertentu, jumlah parameter SHiRA dihitung sebagai r(m+n), di mana dimensi tensor aslinya adalah m x n. Ini berarti jumlah parameter SHiRA sama dengan jumlah parameter untuk adapter LoRA. SHiRA adalah adapter ber-rank tinggi. Menetapkan parameter r ini tidak membatasi rank ke nilai tersebut.
  • mask_type (str, defaults to random) — Type of mask function. Defaults to a random sparse mask. An optional user-defined mask_fn to compute the mask value can also be supplied by instantiating config = ShiraConfig(...) and then setting config.mask_fn = <your custom mask function>. For a pretrained weight with shape m x n, the custom mask function must return only one mask (shape: m x n) which must be binary 0 or 1 with num_shira_parameters = r(m + n) for linear layers. Device and dtype of mask must be same as base layer’s weight’s device and dtype. Please see mask_functions.py for more details and to see the default random sparse mask implementation.
  • random_seed (int, opsional, defaultnya None) β€” benang acak untuk generator torch untuk random_mask.
  • target_modules (Union[List[str], str]) β€” Daftar nama modul atau ekspresi regex dari nama modul yang akan diganti dengan SHiRA. Misalnya, [β€˜q’, β€˜v’] atau β€˜.decoder.(SelfAttention|EncDecAttention).*(q|v)$β€˜. Hanya lapisan linear yang didukung.
  • 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.
  • init_weights (bool, defaultnya True) β€” Inisialisasi bobot SHiRA agar memiliki nilai nol. Jika diset ke False, bobot SHiRA akan diinisialisasi ke nilai randn sebagai pengganti nol, dan ini hanya digunakan untuk pengujian.
  • modules_to_save (List[str]) β€” Daftar modul di luar lapisan SHiRA yang akan diatur sebagai dapat dilatih dan disimpan dalam checkpoint akhir.

Ini adalah kelas konfigurasi untuk menyimpan konfigurasi dari ShiraModel.

ShiraModel

kelas peft.ShiraModel

< >

( 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 (ShiraConfig) β€” Konfigurasi model SHiRA.
  • adapter_name (str) β€” Nama adapter, secara default "default".

Mengembalikan

torch.nn.Module

Model SHiRA.

Membuat Model Sparse High Rank Adapter (SHiRA) dari model pretrained.

Contoh:

>>> from transformers import AutoModelForCausalLM
>>> from peft import ShiraConfig, get_peft_model

>>> base_model = AutoModelForCausalLM.from_pretrained("facebook/opt-125m")
>>> config = ShiraConfig(r=32)
>>> model = get_peft_model(base_model, config)

Atribut:

Update on GitHub