PEFT documentation

MiSS

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

MiSS

MiSS (Matrix Shard Sharing) adalah metode PEFT yang mencapai keseimbangan yang baik antara kinerja model dan efisiensi komputasi. Metode ini hanya memerlukan satu matriks yang dapat dilatih dan memperkenalkan mekanisme berbagi shard yang berbeda dari LoRA.

Abstrak dari makalah tersebut adalah:

Metode Fine-Tuning yang Efisien Parameter (PEFT), khususnya Low-Rank Adaptation (LoRA), secara efektif mengurangi jumlah parameter yang dapat dilatih pada Large Language Models (LLM). Namun, seiring terus membesarnya skala model, kebutuhan akan sumber daya komputasi tetap menjadi tantangan signifikan. Varian LoRA yang ada sering kali kesulitan mencapai keseimbangan optimal antara kemampuan adaptasi (kinerja model dan kecepatan konvergensi) dan efisiensi (beban komputasi, penggunaan memori, dan waktu inisialisasi). Kertas kerja ini memperkenalkan MiSS (Matrix Shard Sharing), pendekatan PEFT baru yang mengatasi trade-off ini melalui mekanisme berbagi shard yang sederhana. MiSS memanfaatkan wawasan bahwa adaptasi low-rank dapat dicapai dengan mendekomposisi matriks bobot menjadi beberapa matriks fragmen dan memanfaatkan fragmen bersama yang dapat dilatih. Metode ini membangun matriks pembaruan low-rank melalui replikasi shard-partisi bersama ini. Kami juga mengusulkan implementasi yang efisien secara hardware dan luas penerapannya untuk MiSS. Eksperimen ekstensif yang dilakukan pada berbagai tugas, bersama dengan analisis sistematis kinerja komputasi, menunjukkan keunggulan MiSS. Hasilnya menunjukkan bahwa MiSS secara signifikan melampaui LoRA standar dan variannya yang menonjol dalam metrik kinerja model maupun efisiensi komputasi, termasuk kecepatan inisialisasi dan throughput pelatihan. Dengan menyeimbangkan kekuatan ekspresif dan pemanfaatan sumber daya secara efektif, MiSS menawarkan solusi yang menarik untuk mengadaptasi model berskala besar secara efisien.

Ikhtisar benchmark

Kapan menggunakan MiSS

MiSS adalah pilihan yang tepat ketika:

  • Anda menginginkan inisialisasi yang lebih cepat dan throughput pelatihan yang lebih tinggi daripada skema inisialisasi LoRA lanjutan yang menggunakan setup mahal (seperti PiSSA, LoRA-GA, atau OLoRA).
  • Anda menginginkan alternatif drop-in untuk LoRA dengan perubahan konfigurasi yang minimal.

Jika Anda membutuhkan ekspresivitas yang lebih kuat dengan mengorbankan sedikit efisiensi, pertimbangkan varian inisialisasi bat (lihat di bawah).

mode init_weights

MiSS mendukung tiga mode inisialisasi melalui parameter init_weights:

  • True (default): Inisialisasi MiSS standar. Titik awal terbaik untuk sebagian besar kasus penggunaan.
  • "bat": Mengaktifkan pembaruan nonlinier di antara shard yang berbeda. Menghasilkan hasil yang lebih baik daripada MiSS standar, tetapi menggunakan lebih banyak memori dan sekitar dua kali lebih lambat. Gunakan ini ketika performa menjadi prioritas di atas efisiensi.
  • "mini": Menggunakan rank yang lebih kecil di sepanjang dimensi out_features, dikendalikan oleh mini_r. Hal ini mengurangi jumlah parameter yang dapat dilatih lebih lanjut. Saat menggunakan mode ini, mini_r harus diatur dan out_features harus dapat dibagi habis oleh mini_r.

Mulai cepat

import torch
from peft import MissConfig, get_peft_model
from transformers import AutoModelForCausalLM, AutoTokenizer

model = AutoModelForCausalLM.from_pretrained(
    "meta-llama/Llama-2-7b-hf",
    torch_dtype=torch.bfloat16,
    device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-2-7b-hf")
tokenizer.pad_token_id = tokenizer.eos_token_id

# Standard MiSS
config = MissConfig(
    r=64,
    miss_dropout=0.01,
    task_type="CAUSAL_LM"
)

# BAT variant β€” better performance, more memory
# config = MissConfig(
#     r=64,
#     init_weights="bat",
#     task_type="CAUSAL_LM"
# )

# Mini variant β€” fewer trainable parameters
# config = MissConfig(
#     r=64,
#     init_weights="mini",
#     mini_r=8,
#     task_type="CAUSAL_LM"
# )

model = get_peft_model(model, config)
model.print_healthcheck()

Untuk contoh fine-tuning lengkap yang mencakup pelatihan dan inferensi, lihat contoh fine-tuning MiSS.

API

MissConfig

kelas peft.MissConfig

< >

( 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 = 64miss_dropout: float = 0.0mini_r: int = 1target_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Noneinit_weights: bool | Literal['bat', 'mini'] = Truelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[str] = Nonebias: str = 'none'modules_to_save: Optional[list[str]] = None )

Parameter

  • r (int) β€” Rank dari MiSS di berbagai lapisan. Disarankan untuk mengatur β€˜r’ ke bilangan genap; jika tidak, metode inisialisasi default tidak akan berfungsi. Rank dari MiSS sesuai dengan dekomposisi low-rank di sepanjang dimensi in_features.
  • miss_dropout (float) β€” Probabilitas dropout untuk lapisan MiSS.
  • mini_r (int) β€” Rank dari MiSS sesuai dengan dekomposisi low-rank sepanjang dimensi out_features. Ketika Anda mengatur init_weights=mini, Anda perlu mengatur mini_r. Pastikan bahwa out_features dapat dibagi habis oleh mini_r.
  • 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 | Literal[β€œbat”, β€œmini”]) β€” Inisialisasi yang berbeda sesuai dengan varian MiSS yang berbeda. Secara default (balance), metode yang paling efisien dan umum dalam MiSS akan digunakan. β€˜bat’: Dalam mode ini, Anda dapat mengaktifkan pembaruan nonlinier di antara shard yang berbeda. β€˜mini’: Dalam mode ini, Anda dapat mengatur rank yang lebih kecil untuk menggunakan parameter yang dapat dilatih lebih sedikit, tetapi disarankan untuk menjaga out_features % mini_r == 0.
  • 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 (str) β€” Nama pola layer, hanya digunakan jika layers_to_transform berbeda dari None.
  • bias (str) — Bias type for MiSS. Can be 'none', 'all' or 'MiSS_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 MissModel.

MissModel

kelas peft.MissModel

< >

( 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 (MissConfig) β€” Konfigurasi dari model MiSS.
  • adapter_name (str) β€” Nama adapter, secara default "default".
  • low_cpu_mem_usage (bool, optional, defaults to False) β€” Membuat bobot adapter kosong pada perangkat meta. Berguna untuk mempercepat proses pemuatan.

Mengembalikan

torch.nn.Module

Model MiSS.

Membuat model adaptasi refleksi Householder (MiSS) dari model pretrained. Metode ini dijelaskan dalam https://huggingface.co/papers/2409.15371

Contoh:

>>> from diffusers import StableDiffusionPipeline
>>> from peft import MissModel, MissConfig

>>> config_te = MissConfig(
...     r=8,
...     target_modules=["k_proj", "q_proj", "v_proj", "out_proj", "fc1", "fc2"],
...     init_weights=True,
... )
>>> config_unet = MissConfig(
...     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 = MissModel(model.text_encoder, config_te, "default")
>>> model.unet = MissModel(model.unet, config_unet, "default")

Atribut:

  • model (~torch.nn.Module) β€” Model yang akan diadaptasi.
  • peft_config (MissConfig): Konfigurasi model MiSS.
Update on GitHub