PEFT documentation
Polytropon
Polytropon
Polytropon adalah model multitask dengan sejumlah adapter LoRA yang berbeda dalam “inventaris”-nya. Model ini mempelajari kombinasi adapter yang tepat dari inventaris tersebut menggunakan fungsi routing untuk memilih subset modul terbaik untuk tugas tertentu. PEFT juga mendukung Multi-Head Adapter Routing (MHR) untuk Polytropon, yang membangun dan meningkatkan fungsi routing dengan menggabungkan kepala adapter secara lebih granular. Kepala-kepala adapter dipisahkan ke dalam blok-blok yang tidak tumpang tindih, dan fungsi routing yang berbeda dipelajari untuk masing-masing blok, sehingga memungkinkan ekspresivitas yang lebih besar.
Abstrak dari makalah tersebut adalah:
Desain modular mendorong model neural untuk memisahkan dan menggabungkan kembali berbagai aspek pengetahuan agar dapat digeneralisasi secara lebih sistematis ke tugas-tugas baru. Dalam karya ini, kami mengasumsikan bahwa setiap tugas terkait dengan subset dari kumpulan keterampilan diskrit laten (yang mungkin kecil). Sebaliknya, keterampilan tersebut berkorespondensi dengan parameterisasi model yang efisien secara parameter (sparse / low-rank). Dengan mempelajari secara bersama-sama parameterisasi ini dan matriks alokasi tugas-keterampilan, jaringan untuk setiap tugas diinstansiasi sebagai rata-rata dari parameter keterampilan yang aktif. Untuk mendorong partisi lunak keterampilan yang tidak sepele di antara tugas-tugas, kami bereksperimen dengan serangkaian bias induktif, seperti prior Indian Buffet Process dan learning rate dua kecepatan. Kami mengevaluasi model keterampilan laten kami pada dua pengaturan utama: 1) pembelajaran penguatan multitask untuk mengikuti instruksi yang berakar pada 8 level platform BabyAI; dan 2) adaptasi few-shot dari model generatif teks-ke-teks yang telah dilatih sebelumnya pada CrossFit, sebuah benchmark yang terdiri dari 160 tugas NLP. Kami menemukan bahwa desain modular dari jaringan secara signifikan meningkatkan efisiensi sampel dalam pembelajaran penguatan dan generalisasi few-shot dalam pembelajaran terawasi, dibandingkan dengan baseline yang menggunakan parameter yang sepenuhnya dibagikan, spesifik tugas, atau dihasilkan secara kondisional, di mana pengetahuan terjerat di antara tugas-tugas. Selain itu, kami menunjukkan bagaimana keterampilan diskrit membantu interpretabilitas, karena menghasilkan hierarki tugas yang eksplisit.
Abstrak dari makalah tersebut adalah:
Pemurnaan ulang yang efisien parameter (PEFT) untuk generalisasi lintas tugas terdiri dari pra-pelatihan adapter pada set pelatihan multi-tugas sebelum adaptasi few-shot ke tugas uji. Polytropon [Ponti et al., 2023] (Poly) secara bersama-sama mempelajari inventaris adapter dan fungsi routing yang memilih subset (ukuran variabel) adapter untuk setiap tugas selama pra-pelatihan dan adaptasi few-shot. Dalam makalah ini, kami menyelidiki peran yang dimainkan oleh routing adapter dalam keberhasilannya dan merancang varian baru berdasarkan temuan kami. Pertama, kami membangun intuisi bahwa routing yang lebih granular memberikan ekspresivitas yang lebih besar. Oleh karena itu, kami mengusulkan MHR (Multi-Head Routing), yang menggabungkan subset parameter adapter dan melampaui Poly di bawah anggaran parameter yang sebanding; dengan hanya melakukan pemurnaan ulang pada fungsi routing dan bukan adapter (MHR-z), kami mencapai kinerja yang kompetitif dengan efisiensi parameter yang ekstrem. Kedua, kami menemukan bahwa kinerja Poly/MHR adalah hasil dari optimasi multi-tugas yang lebih baik, bukan bias induktif modular yang memfasilitasi rekombinasi adapter dan adaptasi lokal, seperti yang sebelumnya dihipotesiskan. Faktanya, kami menemukan bahwa MHR menunjukkan keselarasan gradien yang lebih tinggi antar tugas dibandingkan metode lain. Karena ini menyiratkan bahwa routing hanya krusial selama pra-pelatihan multi-tugas, kami mengusulkan MHR-mu, yang membuang routing dan melakukan pemurnaan ulang pada rata-rata adapter yang telah dipra-latih selama adaptasi few-shot. Hal ini menetapkan MHR-mu sebagai metode yang efektif untuk pemurnaan ulang single-adapter.
Jika Anda ingin mencoba routing terlebih dahulu tanpa pelatihan, Anda dapat melihat varian Arrow LoRA.
API
PolyConfig
kelas peft.PolyConfig
< 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 = 8target_modules: Optional[Union[list[str], str]] = Noneexclude_modules: Optional[Union[list[str], str]] = Nonemodules_to_save: Optional[list[str]] = Noneinit_weights: bool = Truepoly_type: Literal['poly'] = 'poly'n_tasks: int = 1n_skills: int = 4n_splits: int = 1 )
Parameter
- r (
int) — Dimensi perhatian dari setiap Lora dalam Poly. - target_modules (
Union[List[str],str]) — Nama-nama modul yang akan diterapkan Poly. - 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. - modules_to_save (
List[str]) — Daftar modul selain lapisan Poly yang akan diatur sebagai dapat dilatih dan disimpan dalam checkpoint akhir. - init_weights (bool) — Apakah akan melakukan inisialisasi bobot Poly.
- poly_type (
Literal["poly"]) — Varian modul Poly yang akan digunakan. Saat ini, hanya “poly” yang didukung. - n_tasks (
int) — Jumlah tugas dalam skenario multitasking. - n_skills (
int) — Jumlah skill (LoRA) di setiap lapisan Poly. - n_splits (
int) — Jumlah split di dalam setiap LoRA dari lapisan Poly. Nilai yang lebih besar dari 1 menunjukkan penggunaan Multi-Head Routing (MHR).
Ini adalah kelas konfigurasi untuk menyimpan konfigurasi dari PolyModel.
PolyModel
kelas peft.PolyModel
< source >( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )