PEFT documentation

TinyLoRA: Belajar untuk Bernalar dalam 13 Parameter

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

TinyLoRA: Belajar untuk Bernalar dalam 13 Parameter

TinyLoRA adalah teknik fine-tuning yang sangat efisien dalam hal parameter, yang dibangun di atas pendekatan LoRA-XS dengan menggunakan dekomposisi SVD dari bobot yang dibekukan dan memproyeksikan vektor trainable berukuran sangat kecil melalui tensor acak yang tetap. Ketika dikombinasikan dengan metode pelatihan reinforcement learning (RL) seperti GRPO, TinyLoRA dapat mencapai kinerja yang kompetitif dengan hanya 1-13 parameter trainable.

Inovasi utama TinyLoRA adalah mengganti matriks rank rendah yang dapat dilatih R dengan jumlah berbobot dari matriks proyeksi acak yang tetap: R = Σᵢ vᵢ Pᵢ, di mana v ∈ R^u adalah vektor kecil yang dapat dilatih dengan dimensi u dan Pᵢ adalah matriks acak yang tetap. Hal ini secara drastis mengurangi jumlah parameter yang dapat dilatih sambil mempertahankan kinerja yang kompetitif.

TinyLoRA mendukung pengikatan bobot melalui parameter weight_tying, yaitu rasio antara 0.0 dan 1.0 yang mengontrol berapa banyak modul yang berbagi vektor yang dapat dilatih v yang sama. Mengatur weight_tying=0.0 (default) berarti tidak ada pembagian, sedangkan weight_tying=1.0 berarti pembagian penuh di seluruh modul target — mencapai efisiensi parameter yang ekstrem dengan hanya satu vektor u parameter yang dapat dilatih untuk seluruh model.

Saat menyimpan parameter adapter, Anda dapat memilih untuk tidak menyimpan matriks proyeksi acak dengan mengatur save_projection=False pada TinyLoraConfig. Dalam kasus tersebut, matriks ini akan dipulihkan berdasarkan seed acak tetap dari argumen projection_seed. Hal ini mengurangi ukuran checkpoint, tetapi kami tidak dapat menjamin reproduktibilitas di semua perangkat dan untuk semua versi PyTorch di masa depan. Jika Anda ingin memastikan reproduktibilitas, atur save_projection=True (yang merupakan nilai default).

TinyLoRA saat ini memiliki batasan berikut:

  • Hanya lapisan nn.Linear, nn.Embedding, dan transformers.pytorch_utils.Conv1D yang didukung.

Abstrak dari makalah tersebut adalah:

Penelitian terbaru menunjukkan bahwa model bahasa dapat belajar untuk bernalar, sering kali melalui pembelajaran penguatan. Beberapa pekerjaan bahkan melatih parameterisasi ber-rank rendah untuk penalaran, tetapi LoRA konvensional tidak dapat diskalakan di bawah dimensi model. Kami mempertanyakan apakah bahkan LoRA dengan rank=1 diperlukan untuk belajar bernalar dan mengusulkan TinyLoRA, sebuah metode untuk menskalakan adapter ber-rank rendah hingga ukuran sekecil satu parameter. Dalam parameterisasi baru kami, kami mampu melatih ukuran 8B parameter dari Qwen2.5 hingga akurasi 91% pada GSM8K dengan hanya 13 parameter yang dilatih dalam bf16 (26 byte total). Kami menemukan bahwa tren ini berlaku secara umum: kami mampu memulihkan 90% peningkatan kinerja sambil melatih 1000x lebih sedikit parameter di serangkaian benchmark belajar-untuk-bernalar yang lebih sulit seperti AIME, AMC, dan MATH500. Yang patut dicatat, kami hanya mampu mencapai kinerja yang sangat kuat tersebut dengan RL: model yang dilatih menggunakan SFT memerlukan pembaruan 100-1000x lebih besar untuk mencapai kinerja yang sama.

Ikhtisar benchmark

API

TinyLoraConfig

kelas peft.TinyLoraConfig

< >

( 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 = 2u: int = 64weight_tying: float = 0.0projection_seed: int = 42save_projection: bool = Trueinit_v_bound: float = 0.02target_modules: Optional[Union[list[str], str]] = Nonetinylora_dropout: float = 0.0fan_in_fan_out: bool = Falsebias: str = 'none'modules_to_save: Optional[list[str]] = Noneinit_weights: Union[bool, str] = Truelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = None )

Parameter

  • r (int, opsional, default 2) — Rank SVD untuk dekomposisi U, Sigma, V yang dibekukan. Kertas tersebut merekomendasikan r=2.
  • u (int, opsional, default 64) — Dimensi vektor yang dapat dilatih per grup. Ini mengontrol ekspresivitas adaptasi. Bisa setinggi 1-13 untuk efisiensi parameter yang ekstrem.
  • weight_tying (float, opsional, default 0.0) — Tingkat pengikatan bobot antar modul target, sebagai rasio antara 0.0 dan 1.0. Mengontrol berapa banyak modul yang berbagi vektor v yang dapat dilatih. 0.0 berarti tidak ada berbagi (setiap modul memiliki v sendiri). 1.0 berarti berbagi penuh (semua modul berbagi satu v). Nilai di antaranya memberikan berbagi parsial.
  • projection_seed (int, opsional, default 42) — Seed acak untuk menghasilkan matriks proyeksi P yang tetap.
  • save_projection (bool, opsional, default True) — Apakah tensor proyeksi P akan disimpan dalam state dict. Jika False, tensor tersebut akan dibuat ulang dari seed saat dimuat.
  • init_v_bound (float, opsional, default 0.02) — Batas inisialisasi seragam untuk vektor v yang dapat dilatih. Nilai diinisialisasi dalam [-init_v_bound, init_v_bound].
  • target_modules (Union[List[str], str], opsional) — Nama-nama modul yang akan diterapkan TinyLoRA. Ini bisa berupa daftar nama modul (mis. ['q_proj', 'v_proj']), pola regex (mis. '.*decoder.*(q|v)_proj$'), atau kata kunci khusus "all-linear" untuk menargetkan semua modul linear. Hanya lapisan nn.Linear, nn.Embedding, dan transformers.pytorch_utils.Conv1D yang didukung.
  • tinylora_dropout (float, opsional, default 0.0) — Probabilitas dropout untuk lapisan TinyLoRA.
  • fan_in_fan_out (bool, opsional, default False) — 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).
  • bias (str, optional, defaults to "none") — Bias type for TinyLoRA. Can be ‘none’, ‘all’ or ‘tinylora_only’.
  • modules_to_save (List[str], opsional) — Daftar modul selain lapisan TinyLoRA yang akan diatur sebagai trainable dan disimpan.
  • init_weights (bool | Literal["uniform"], opsional, default True) — Cara menginisialisasi vektor v yang dapat dilatih. Mengirimkan True (default) menginisialisasi v ke nol, menjadikan adapter sebagai no-op (operasi identitas). Mengirimkan "uniform" menginisialisasi v dengan nilai acak seragam dalam [-init_v_bound, init_v_bound]. Mengirimkan False membiarkan v tidak terinisialisasi (untuk kasus penggunaan lanjutan).
  • layers_to_transform (Union[List[int], int], opsional) — Indeks layer yang akan ditransformasi. Jika ditentukan, hanya layer-layer ini yang akan diadaptasi.
  • layers_pattern (Optional[Union[List[str], str]], opsional) — Nama pola layer, hanya digunakan jika layers_to_transform berbeda dari None.

Ini adalah kelas konfigurasi untuk menyimpan konfigurasi dari TinyLoraModel.

TinyLoRA adalah metode fine-tuning yang sangat efisien dalam hal parameter, berdasarkan makalah “Learning to Reason in 13 Parameters” (arXiv:2602.04118). Metode ini menggunakan dekomposisi SVD dari bobot yang dibekukan dan memproyeksikan vektor kecil yang dapat dilatih melalui tensor acak yang tetap.

Makalah: https://arxiv.org/abs/2602.04118

Contoh:

from peft import get_peft_model, TinyLoraConfig

config = TinyLoraConfig(
    r=2,  # SVD rank (paper recommends 2)
    u=64,  # Trainable vector dimension
    weight_tying=0.0,  # No weight tying (0.0 = none, 1.0 = full)
    target_modules=["q_proj", "v_proj"],
    projection_seed=42,
)
model = get_peft_model(base_model, config)

TinyLoraModel

kelas peft.TinyLoraModel

< >

( modelconfigadapter_namelow_cpu_mem_usage = False**kwargs ) → torch.nn.Module

Parameter

  • model (PreTrainedModel) — Model yang akan diadaptasi.
  • config (TinyLoraConfig) — Konfigurasi model TinyLoRA.
  • adapter_name (str) — Nama adapter, secara default "default".
  • low_cpu_mem_usage (bool, opsional, default False) — Membuat bobot adapter kosong pada perangkat meta. Berguna untuk mempercepat proses pemuatan.

Mengembalikan

torch.nn.Module

Model TinyLoRA.

Membuat model TinyLoRA dari model transformers yang telah dilatih sebelumnya.

TinyLoRA adalah metode fine-tuning yang sangat efisien dalam hal parameter, yang menggunakan dekomposisi SVD dari bobot yang dibekukan dan memproyeksikan vektor kecil yang dapat dilatih melalui tensor acak yang tetap. Berdasarkan makalah “Learning to Reason in 13 Parameters” (arXiv:2602.04118).

Contoh:

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

>>> base_model = AutoModelForCausalLM.from_pretrained("facebook/opt-125m")
>>> config = TinyLoraConfig(r=2, u=64, target_modules=["q_proj", "v_proj"])
>>> model = get_peft_model(base_model, config)

Atribut:

delete_adapter

< >

( adapter_name: str )

Hapus adapter dan bersihkan parameter v bersama pada tingkat model.

Update on GitHub