PEFT documentation
Adaptasi Rank Tinggi yang Langka
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.Linearyang 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
< 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 = 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, defaultnya32) β 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 torandom) — 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 instantiatingconfig = ShiraConfig(...)and then settingconfig.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, defaultnyaNone) β 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 menggunakanConv1Dyang menyimpan bobot seperti (fan_in, fan_out) sehingga ini harus diatur keTrue. - init_weights (
bool, defaultnyaTrue) β 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
< 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 (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:
- model (PreTrainedModel) β Model yang akan diadaptasi.
- peft_config (ShiraConfig): Konfigurasi model SHiRA.