PEFT documentation
AdaMSS
AdaMSS
AdaMSS (AdaMSS: Adaptive Multi-Subspace Approach for Parameter-Efficient Fine-Tuning) adalah metode fine-tuning yang efisien secara parameter, yang menguraikan matriks bobot menggunakan SVD dan mengelompokkan ruang yang diuraikan tersebut menjadi beberapa subspace yang dapat dilatih. Setiap subspace mempelajari pembaruan ber-rank rendah yang independen, sementara bobot asli tetap dibekukan. AdaMSS juga mendukung Adaptive Subspace Allocation (ASA), yang memangkas subspace yang kurang penting secara dinamis selama pelatihan berdasarkan informasi gradien.
Abstrak dari makalah tersebut adalah:
Kami mengusulkan AdaMSS, sebuah pendekatan multi-subruang adaptif untuk penyesuaian halus (fine-tuning) yang efisien parameter pada model besar. Berbeda dengan metode penyesuaian halus efisien parameter tradisional yang beroperasi di dalam satu subruang besar dari bobot jaringan, AdaMSS memanfaatkan segmentasi subruang untuk memperoleh beberapa subruang yang lebih kecil dan secara adaptif mengurangi jumlah parameter yang dapat dilatih selama pelatihan, pada akhirnya hanya memperbarui parameter yang terkait dengan subset kecil subruang yang paling relevan untuk tugas hilir (downstream) target. Dengan menggunakan representasi peringkat terendah (lowest-rank), AdaMSS mencapai ekspresivitas yang lebih ringkas dan penyesuaian yang lebih halus pada parameter model. Analisis teoretis menunjukkan bahwa AdaMSS memiliki jaminan generalisasi yang lebih baik daripada LoRA, PiSSA, dan metode berbasis peringkat rendah (low-rank) subruang tunggal lainnya. Eksperimen ekstensif di berbagai tugas klasifikasi gambar, pemahaman bahasa alami, dan generasi bahasa alami menunjukkan bahwa AdaMSS mencapai kinerja yang sebanding dengan penyesuaian halus penuh (full fine-tuning) dan melampaui metode penyesuaian halus efisien parameter lainnya dalam kebanyakan kasus, semuanya sambil membutuhkan lebih sedikit parameter yang dapat dilatih. Secara khusus, pada model ViT-Large, AdaMSS mencapai akurasi rata-rata 4,7% lebih tinggi daripada LoRA di tujuh tugas, dengan hanya menggunakan 15,4% dari parameter yang dapat dilatih. Pada RoBERTa-Large, AdaMSS melampaui PiSSA dengan 7% dalam akurasi rata-rata di enam tugas sambil mengurangi jumlah parameter yang dapat dilatih sekitar 94,4%. Hasil-hasil ini menunjukkan efektivitas AdaMSS dalam penyesuaian halus yang efisien parameter. Kode untuk AdaMSS tersedia di https: //github.com/jzheng20/AdaMSS.
Saat ini, AdaMSS memiliki batasan berikut:
- Hanya lapisan
nn.Linearyang didukung. - Memerlukan scikit-learn untuk langkah pengelompokan KMeans.
Jika batasan-batasan ini tidak sesuai dengan kasus penggunaan Anda, pertimbangkan metode lain sebagai gantinya.
Ikhtisar benchmark
API
AdamssConfig
kelas peft.AdamssConfig
< 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 = 100num_subspaces: int = 5subspace_rank: int = 1target_modules: Optional[Union[list[str], str]] = Noneinit_weights: Optional[Literal['orthogonal']] = 'orthogonal'modules_to_save: Optional[list[str]] = Nonelayers_to_transform: Optional[Union[list[int], int]] = Nonelayers_pattern: Optional[Union[list[str], str]] = Noneuse_asa: bool = Falseasa_target_subspaces: int = 50init_warmup: int = 50final_warmup: int = 1000mask_interval: int = 100asa_importance_beta: float = 0.85asa_uncertainty_beta: float = 0.85asa_schedule_exponent: float = 3.0use_dynamic_rank: bool = Falsesvd_threshold: float = 0.1random_seed: int = 0 )
Parameter
- r (
int) β Total rank untuk dekomposisi SVD (dilambangkan sebagai R dalam makalah). Nilai ini menentukan berapa banyak vektor singular yang digunakan untuk merepresentasikan matriks bobot sebelum pengelompokan. Nilai yang lebih tinggi menangkap lebih banyak informasi dari bobot asli tetapi memerlukan lebih banyak komputasi dan memori. Nilai yang lebih rendah memberikan regularisasi yang lebih kuat. Nilai tipikal berkisar dari 50 hingga 500. Nilai default adalah 100. - num_subspaces (
int) β Jumlah subspace (K) untuk mengklasterkan ruang yang didekomposisi SVD. Setiap subspace mempelajari pembaruan ber-rank rendah yang independen. Meningkatkan nilai ini memungkinkan adaptasi yang lebih rinci, tetapi meningkatkan jumlah parameter yang dapat dilatih secara proporsional. Saat menggunakan ASA (Adaptive Subspace Allocation), nilai ini menentukan jumlah subspace awal sebelum pruning. Nilai tipikal berkisar dari 3 hingga 10. Nilai default adalah 5. - subspace_rank (
int) β Rank (r_i) untuk setiap subspace yang dapat dilatih. Ini mengontrol kapasitas setiap subspace untuk mempelajari adaptasi. Nilai yang lebih tinggi meningkatkan ekspresivitas tetapi juga meningkatkan jumlah parameter yang dapat dilatih. Total parameter yang dapat dilatih berskala sebagai O(num_subspaces subspace_rank (in_dim + out_dim) / num_subspaces). Untuk sebagian besar tugas, nilai 1-4 bekerja dengan baik. Default adalah 1. - target_modules (
Optional[Union[list[str], str]]) β Nama-nama modul yang akan diterapkan AdaMSS. Jika ditentukan, hanya modul-modul ini yang akan diadaptasi. Dapat berupa daftar nama modul yang persis atau ekspresi regex. Misalnya,['q_proj', 'v_proj']untuk lapisan attention, atau'.*decoder.*(SelfAttention|EncDecAttention).*(q|v)$'untuk pencocokan regex. - modules_to_save (
Optional[list[str]]) β Daftar modul di luar lapisan AdaMSS yang akan diset sebagai trainable dan disimpan dalam checkpoint akhir. Modul-modul ini akan di-fine-tune secara penuh (bukan hanya low-rank). Diperlukan untuk head yang diinisialisasi secara acak seperticlassifieratauscoredalam tugas klasifikasi. - init_weights (
Literal["orthogonal"]) β Metode inisialisasi untuk bobot yang dapat dilatih pada AdaMSS. Saat ini hanya βorthogonalβ yang didukung, yang menggunakan inisialisasi ortogonal untuk matriks B (proyeksi output). Matriks A diinisialisasi ke nol untuk memastikan model dimulai dari bobot pretrained. Atur ke None untuk melewati inisialisasi saat memuat dari checkpoint. Default adalah βorthogonalβ. - layers_to_transform (
Optional[Union[list[int], int]]) β Indeks lapisan spesifik untuk menerapkan AdaMSS. Jika ditentukan, hanya lapisan-lapisan ini yang akan diadaptasi, berguna untuk mencoba lapisan mana yang paling diuntungkan dari adaptasi. Dapat berupa satu bilangan bulat atau daftar bilangan bulat. - layers_pattern (
Optional[Union[list[str], str]]) β Pola untuk mencocokkan nama layer ketikalayers_to_transformditentukan. Digunakan untuk mengekstrak indeks layer dari nama modul yang tidak mengikuti pola umum. - use_asa (
bool) β Apakah akan mengaktifkan Adaptive Subspace Allocation (ASA). Saat diaktifkan, ASA secara dinamis memangkas subspace yang kurang penting selama pelatihan berdasarkan informasi gradien, mengurangi jumlah parameter efektif sambil mempertahankan kinerja. Memerlukan integrasi dengan callback pelatihan. Default adalah False. - asa_target_subspaces (
int) β Total target jumlah subspace aktif di semua lapisan ketika ASA diaktifkan. ASA akan memangkas subspace secara bertahap hingga target ini tercapai. Nilai yang lebih rendah menghasilkan pemangkasan yang lebih agresif dan jumlah parameter yang dapat dilatih lebih sedikit. Harus kurang darinum_subspaces * num_target_modules. Nilai tipikal berkisar dari 20 hingga 100 tergantung pada ukuran model. Default adalah 50. Harus berupa bilangan bulat positif ketikause_asa=True. - init_warmup (
int) β Jumlah langkah pelatihan yang harus ditunggu sebelum memulai pemangkasan ASA. Selama warmup, semua subspace tetap aktif untuk memungkinkan skor kepentingan menstabilkan. Nilai yang lebih tinggi memberikan waktu lebih lama untuk estimasi kepentingan yang akurat tetapi menunda pemangkasan. Nilai tipikal berkisar dari 50 hingga 200. Default adalah 50. Harus lebih kecil darifinal_warmupketikause_asa=True. - final_warmup (
int) β Langkah pelatihan di mana ASA menyelesaikan pemangkasan dan mencapaiasa_target_subspacessubruang aktif. Pemangkasan didistribusikan antarainit_warmupdanfinal_warmup. Sebaiknya diatur berdasarkan total langkah pelatihan; biasanya 1/3 hingga 1/2 dari total langkah pelatihan. Nilai default adalah 1000. Harus lebih besar dariinit_warmupketikause_asa=True. - mask_interval (
int) β Jumlah langkah pelatihan antara pembaruan mask ASA. Nilai yang lebih rendah memungkinkan adaptasi lebih sering tetapi meningkatkan overhead. Nilai yang lebih tinggi memberikan estimasi kepentingan yang lebih stabil antar pembaruan. Nilai tipikal berkisar dari 50 hingga 200. Default adalah 100. Harus berupa bilangan bulat positif ketikause_asa=True. - asa_importance_beta (
float) β Koefisien exponential moving average (EMA) untuk menghaluskan skor pentingnya subspace. Nilai yang lebih tinggi (mendekati 1.0) memberikan bobot lebih besar pada pentingnya historis, sehingga memberikan stabilitas. Nilai yang lebih rendah membuat pentingnya lebih responsif terhadap gradien terbaru. Nilai tipikal berkisar dari 0,8 hingga 0,95. Nilai default adalah 0,85. - asa_uncertainty_beta (
float) β Koefisien EMA untuk menghaluskan estimasi ketidakpastian kepentingan. Mengontrol seberapa cepat ketidakpastian beradaptasi terhadap varians gradien. Mirip dengan asa_importance_beta, nilai yang lebih tinggi memberikan estimasi yang lebih stabil. Nilai tipikal berkisar dari 0,8 hingga 0,95. Nilai default adalah 0,85. - asa_schedule_exponent (
float) β Eksponen jadwal yang mengontrol laju peluruhan dari total subspace keasa_target_subspacesselama ASA warmup. Nilai yang lebih tinggi menghasilkan pemangkasan awal yang lebih cepat (pengurangan awal yang lebih agresif), sedangkan nilai yang lebih rendah memberikan peluruhan yang lebih bertahap, mirip linear. Rumusnya adalah: current_active_subspaces = asa_target_subspaces + (asa_total_subspaces - asa_target_subspaces) * (progress ** exponent). Nilai tipikal berkisar dari 1.0 (linear) hingga 5.0 (agresif). Nilai default adalah 3.0. Harus berupa angka positif saatuse_asa=True(eksponen nol atau negatif akan mendegenerasi jadwal menjadi no-op permanen atau, begituprogressmencapai tepat 0.0, akan memicuZeroDivisionError). - use_dynamic_rank (
bool) β Apakah akan menentukan rank subspace secara dinamis berdasarkan magnitudo nilai singular. Jika True, rank setiap subspace ditentukan dengan menghitung nilai singular di atas ambang batas, sehingga subspace yang berbeda dapat memiliki rank efektif yang berbeda. Jika False, semua subspace menggunakansubspace_rankyang tetap. Nilai default adalah False. - svd_threshold (
float) β Rasio ambang untuk pemilihan rank dinamis, hanya digunakan saatuse_dynamic_rank=True. Nilai singular dianggap signifikan jika melebihithreshold * max_singular_value. Nilai yang lebih tinggi menghasilkan rank efektif yang lebih rendah (truncasi yang lebih agresif). Nilai tipikal berkisar dari 0,05 hingga 0,2. Nilai default adalah 0,1 (10% dari maksimum).
Kelas konfigurasi untuk metode Adamss (Adaptive Multi-Subspaces).
AdaMSS adalah metode fine-tuning yang efisien secara parameter, yang menguraikan matriks bobot menggunakan SVD dan mengelompokkan ruang yang diuraikan tersebut menjadi beberapa subspace yang dapat dilatih. Metode ini mempelajari pembaruan ber-rank rendah di dalam subspace tersebut sambil mempertahankan bobot asli tetap beku.
AdamssModel
kelas peft.AdamssModel
< source >( modelconfigadapter_namelow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict] = None ) β torch.nn.Module
Membuat model Adamss (Adaptive Multi-Subspaces) dari model pretrained.
Metode ini menguraikan matriks bobot menggunakan SVD dan mengelompokkan ruang yang diuraikan menjadi beberapa subspace yang dapat dilatih untuk fine-tuning yang efisien secara parameter.
Contoh:
>>> from transformers import AutoModelForImageClassification
>>> from peft import AdamssConfig, get_peft_model
>>> config = AdamssConfig(
... r=500,
... num_subspaces=5,
... target_modules=["query", "value"],
... )
>>> model = AutoModelForImageClassification.from_pretrained("google/vit-base-patch16-224")
>>> adamss_model = get_peft_model(model, config)Atribut:
- model (
~torch.nn.Module) β Model yang akan diadaptasi. - peft_config (AdamssConfig): Konfigurasi model Adamss.
update_and_allocate
< source >( global_step: int )
Perbarui skor kepentingan dan terapkan masking ASA (jika diaktifkan).
Metode ini harus dipanggil di setiap langkah pelatihan setelah loss.backward() dan sebelum optimizer.zero_grad() ketika ASA diaktifkan. Secara internal, metode ini:
- Mengakumulasi skor kepentingan melalui EMA setiap langkah selama periode pemanasan.
- Pada interval mask, menerapkan masking top-K global dan mengatur ulang pentingnya.
Ini adalah titik masuk tunggal untuk ASA β menggunakan AdamssAsaCallback dengan Trainer HuggingFace hanya mendelegasikan ke metode ini. Untuk loop pelatihan kustom, panggil metode ini secara langsung alih-alih callback.