PEFT documentation
TinyLoRA: Belajar untuk Bernalar dalam 13 Parameter
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, dantransformers.pytorch_utils.Conv1Dyang 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
< 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 = 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, default2) — Rank SVD untuk dekomposisi U, Sigma, V yang dibekukan. Kertas tersebut merekomendasikan r=2. - u (
int, opsional, default64) — Dimensi vektor yang dapat dilatih per grup. Ini mengontrol ekspresivitas adaptasi. Bisa setinggi 1-13 untuk efisiensi parameter yang ekstrem. - weight_tying (
float, opsional, default0.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, default42) — Seed acak untuk menghasilkan matriks proyeksi P yang tetap. - save_projection (
bool, opsional, defaultTrue) — 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, default0.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 lapisannn.Linear,nn.Embedding, dantransformers.pytorch_utils.Conv1Dyang didukung. - tinylora_dropout (
float, opsional, default0.0) — Probabilitas dropout untuk lapisan TinyLoRA. - fan_in_fan_out (
bool, opsional, defaultFalse) — 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). - 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, defaultTrue) — Cara menginisialisasi vektor v yang dapat dilatih. MengirimkanTrue(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]. MengirimkanFalsemembiarkan 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 jikalayers_to_transformberbeda dariNone.
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
< source >( 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, defaultFalse) — 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:
- model (PreTrainedModel) — Model yang akan diadaptasi.
- peft_config (TinyLoraConfig): Konfigurasi model TinyLoRA.
Hapus adapter dan bersihkan parameter v bersama pada tingkat model.