PEFT documentation
LoRA Blok-Diagonal untuk Menghilangkan Overhead Komunikasi dalam Penyajian LoRA Paralel Tensor
LoRA Blok-Diagonal untuk Menghilangkan Overhead Komunikasi dalam Penyajian LoRA Paralel Tensor
Block-Diagonal LoRA (BD-LoRA) adalah varian LoRA di mana beberapa faktor LoRA dibatasi menjadi blok-diagonal. Hal ini memungkinkan penyajian (serving) yang lebih cepat dengan menghilangkan overhead komunikasi saat menjalankan inferensi pada beberapa GPU. Meskipun ada pembatasan blok-diagonal, BD-LoRA memiliki performa yang setara dengan LoRA biasa pada jumlah parameter yang serupa.
BD-LoRA dirancang untuk digunakan dengan tensor parallelism, yang berarti membagi bobot model di antara beberapa GPU. Strategi sharding yang populer adalah Megatron Sharding Strategy. Untuk dua lapisan linear $W_1$, yang berurutan (misalnya proyeksi up dan down dalam modul MLP transformer), kita akan melakukan sharding pada lapisan pertama secara column-parallel (yang mengharuskan LoRA B menjadi block-diagonal) dan lapisan kedua secara row-parallel (yang mengharuskan LoRA A menjadi block-diagonal). Untuk modul attention, hal ini dapat dicapai dengan cara serupa dengan mengambil proyeksi Q, K, dan V bersama sebagai dan proyeksi out sebagai $W_2$, dengan sharding yang sesuai. Sharding ini memungkinkan mesin inferensi yang kompatibel untuk mendistribusikan setiap shard block-diagonal ke GPU yang berbeda, sehingga mengurangi kebutuhan untuk mengomunikasikan hasil parsial di antara GPU. Pada gambar di bawah, Anda dapat melihat strategi sharding yang tepat dan bagaimana hal ini menghemat upaya komputasi.
Makalah: https://hf.co/papers/2510.23346

Kinerja, peringkat, dan jumlah parameter
BD-LoRA mencapai kinerja yang serupa dengan LoRA (lihat gambar di bawah, atau folder method_comparison di akar repositori peft) pada jumlah parameter yang sama. Namun, karena setiap faktor lain dalam BD-LoRA bersifat blok-diagonal, adapter BD-LoRA akan memiliki lebih sedikit parameter daripada adapter LoRA pada rank yang sama. Kinerja BD-LoRA hanya kompetitif ketika rank ditingkatkan secara sesuai. Kami menyediakan contoh kode untuk rank-matching di akhir notebook contoh ini.

API
BdLoraConfig
kelas peft.BdLoraConfig
< source >( target_modules_bd_a: Optional[list[str]] = Nonetarget_modules_bd_b: Optional[list[str]] = Nonenblocks: int = 1match_strict: bool = True )
Parameter
- target_modules_bd_a —
Modul di mana LoRA-A bersifat blok-diagonal. Cocokkan setiap pola dalam daftar dengan nama modul melalui
pattern is in target_name. Contoh: [‘up_proj’, ‘q_proj’, ‘v_proj’, ‘k_proj’] - target_modules_bd_b —
Modul di mana LoRA-B bersifat blok-diagonal. Cocokkan setiap pola dalam daftar dengan nama modul melalui
pattern is in target_name. Contoh: [‘out_proj’, ‘down_proj’] - nblocks — Jumlah blok dalam matriks blok-diagonal
- match_strict — Jika diset ke true, setiap target_module diwajibkan memiliki LoRA-A atau LoRA-B blok-diagonal, dan akan menghasilkan error jika tidak. Anda dapat mengatur ini ke False untuk mencampur pelatihan LoRA dan BD-LoRA, misalnya jika beberapa lapisan dalam modul Anda tidak diuntungkan oleh BD-LoRA.
Konfigurasi untuk BD-LoRA (Block-Diagonal LoRA). BD-LoRA adalah varian LoRA yang dapat digunakan untuk penyajian multi-LoRA yang efisien di mesin inferensi. Percepatan berasal dari pengurangan komunikasi antar-GPU dengan mengatur modul-modul LoRA tertentu menjadi blok-diagonal.
Untuk menentukan faktor LoRA mana yang harus diset sebagai blok-diagonal, ikuti panduan berikut:
- Untuk attention, atur
- Proyeksi Q,K,V menjadi blok diagonal LoRA-B
- Proyeksi keluaran untuk menjadi blok diagonal LoRA-A
- Untuk MLP, atur
- Up, Gate proyeksi untuk menjadi blok diagonal LoRA-B
- Proyeksi turun untuk menjadi blok diagonal LoRA-A
Untuk modul dan/atau arsitektur lainnya, periksa kode mesin inferensi target Anda. Modul yang di-shard per baris harus memiliki LoRA-A blok-diagonal, sedangkan modul yang di-shard per kolom harus memiliki LoRA-B blok-diagonal.