Lensa ML

LoRA dan Fine-Tuning

Langkah 1 dari 6: Masalah Fine-Tuning

Kenapa memperbarui semua parameter itu mahal

Ukuran model (miliar)7
Fine-tuning penuh: perbarui SEMUA parameter7B parameterSetiap blok harus diperbarui, disimpan, dan didiferensialkanMemori GPU yang dibutuhkan
Total parameter
7B
Memori weight
28.0 GB
Memori training
56.0 GB

Model 7B parameter tergolong kecil, tetapi dua state optimizer Adam saja sudah memakan ~56.0 GB. Itu sudah butuh GPU yang serius.

Geser Ukuran model dari 1 ke 70 miliar dan lihat readout memori bertambah. Readout weight mengasumsikan float 32-bit, yaitu 4 byte per parameter. Fine-tuning penuh dengan Adam butuh lebih banyak: satu gradient untuk tiap weight dan dua estimasi moment, sekitar 16 byte per parameter dalam fp32, belum termasuk aktivasi. Untuk model 70B, totalnya kira-kira 1,1 TB. Mixed precision menurunkan totalnya tanpa mengubah polanya. Fine-tuning penuh juga meninggalkan salinan lengkap model untuk setiap tugas, dan biaya penyimpanan itu sama-sama menjadi sasaran LoRA seperti halnya memori.

Langkah 2 dari 6: Intuisi Low-Rank

Update weight bersifat low-rank

Rank r1
ΔW ≈ jumlah 1 outer product rank-1Matriks ΔW hasil aproksimasikualitas 30%
Rank
1
Kualitas aproksimasi
30%
Suku
1

Dengan rank 1, hanya pola dominan di ΔW yang terbawa. Aproksimasinya kasar (30%), tetapi biayanya hanya 1 pasang vector.

Geser Rank r dari 1 ke 16 dan lihat hasil 8 × 8 terisi seiring suku rank-1 ditambahkan. Setiap suku adalah outer product u vᵀ, satu kolom dikali satu baris, yang membentuk matriks penuh 8 × 8 dari 16 angka. Jumlah r suku seperti itu punya rank paling tinggi r. Hu dkk. mengecek hal ini di GPT-3: update yang dipelajari pada rank 8 dan rank 64 punya arah teratas yang sama, dan r = 1 sudah bagus untuk sebagian tugas. Kurva kualitas di sini hanya bentuk untuk pengajaran, bukan hasil pengukuran.

Langkah 3 dari 6: Dekomposisi LoRA

ΔW ≈ B × A

Rank r4
ΔW ≈ B × AΔW512×512≈B512×4×A4×512Perbandingan parameter (LoRA vs penuh)1.56%
Parameter penuh
262K
Parameter LoRA
4.1K
% dari penuh
1.56%
Rank
4

Dengan rank 4, LoRA hanya memakai 4.1K parameter, bukan 262K, berkurang 98.4%. Matriks B berukuran 512×4 dan A berukuran 4×512. Hasil kalinya membentuk kembali update 512×512.

Geser Rank r dari 1 ke 32 dan bandingkan jumlah parameter penuh dengan LoRA. Untuk weight d_out × d_in, B berukuran d_out × r dan A berukuran r × d_in, jadi LoRA melatih r(d_in + d_out) angka, bukan d_in · d_out. Dengan d = 512 dan r = 4, itu berarti 4.096 dibanding 262.144. Forward pass menghitung h = W₀x + (α / r) · B(Ax), menerapkan A lebih dulu sehingga ΔW tidak pernah dibentuk saat training. Pembagian dengan r mengurangi penyetelan ulang ketika r berubah. Pada GPT-3 175B, LoRA memangkas parameter yang dilatih sekitar 10.000 kali.

Langkah 4 dari 6: Di Mana LoRA Diterapkan

Memilih komponen transformer

Komponen: Q (Query)0
Blok TransformerMulti-Head AttentionQ+ LoRAKVOFeed-Forward NetworkQ (Query): 512 → 512 (rank 8)8,192 parameter yang bisa dilatih
Komponen
Q
Parameter penuh
262K
Parameter LoRA
8.2K

Menerapkan LoRA pada projection Q (Query) di attention. Dengan budget parameter yang tetap, paper asli LoRA mendapat hasil terbaik saat mengadaptasi Q dan V bersamaan.

Geser slider Komponen melewati Q, K, V, O, dan FFN, lalu bandingkan jumlah parameter pada rank 8. Projection persegi 512 × 512 memakan 8.192 parameter LoRA, sedangkan feed-forward layer 512 → 2.048 memakan 20.480. Paper aslinya hanya mengadaptasi weight attention di GPT-3 dan membiarkan feed-forward layer tetap dibekukan. QLoRA (Dettmers dkk., 2023) kemudian menemukan bahwa memasang adapter di setiap linear layer lebih berpengaruh daripada pilihan rank. Metode ini melakukan fine-tuning model 65B di satu GPU 48 GB dengan menyimpan base yang dibekukan dalam presisi 4-bit.

Langkah 5 dari 6: Melatih LoRA

Weight dibekukan, adapter dilatih

Training step0
W₀dibekukan+B×AAkurasi Tugas50%95%
Langkah
0
Akurasi
30.0%
Status W₀
Dibekukan

Sebelum training, B bernilai nol dan A berisi nilai acak kecil, jadi B×A = 0 dan model mulai persis sama dengan aslinya.

Geser Training step dari 0 ke 20 dan lihat B dan A diperbarui sementara W₀ tetap dibekukan. Karena B dimulai dari nol, forward pass pertama persis sama dengan model pretrained, jadi training berawal dari titik yang sudah terbukti baik. Hanya B dan A yang butuh gradient dan state optimizer, dan dari situlah penghematan memori berasal. Aktivasi tetap harus disimpan, karena backprop melewati layer yang dibekukan untuk mencapai adapter. Training LoRA sering memakai learning rate yang lebih besar daripada fine-tuning penuh. Untuk GPT-3, checkpoint LoRA berukuran sekitar 35 MB, bukan 350 GB.

Langkah 6 dari 6: Merging dan Stacking

Menggabungkan dan mengganti adapter

Scaling factor α1.00
W_final = W₀ + α · B · AW₀+α=1.00W_mergedGanti adapter per tugas, base model tetap samaSentimenLoRA #1RingkasanLoRA #2Membuat KodeLoRA #3Base Model (dipakai bersama)
Alpha (α)
1.00
Performa
93.0%
Adapter
3 tugas

Pada α = 1.00, inilah merge LoRA standar. Adapter yang ringan (~MB) bisa diganti per tugas di satu base model bersama (~GB).

Geser scaling factor α dari 0 ke 2 dan perhatikan batang LoRA serta readout performa. Merging menghitung W = W₀ + α · BA sekali dan menyimpan hasilnya, jadi biaya inference sama dengan base model. Adapter layer versi lama justru menambah komputasi di setiap forward pass. Dengan memisahkan adapter, satu server bisa menyimpan base model dan berganti adapter per permintaan. Adapter untuk tugas berbeda juga bisa dijumlahkan dengan weight masing-masing, walaupun saling mengganggu kalau mengubah arah yang sama. Alat gambar memakai α ini untuk mengatur kekuatan LoRA gaya.

Apa itu LoRA (low-rank adaptation)?

LoRA (low-rank adaptation) adalah metode fine-tuning yang membekukan weight model pretrained dan melatih update low-rank kecil di samping matriks weight tertentu. Setiap update adalah hasil kali dua matriks tipis, B dan A, sehingga satu layer menghitung W₀x + BAx. Hanya B dan A yang dilatih, dan jumlahnya biasanya jauh di bawah 1% parameter model.

LoRA adalah cara paling umum untuk mengadaptasi model bahasa besar dan generator gambar di perangkat keras sederhana. Metode ini dipakai untuk fine-tuning model terbuka seperti Llama dan Mistral untuk chat, coding, atau data milik perusahaan, serta untuk melatih adapter gaya dan karakter di Stable Diffusion. Karena setiap adapter hanya beberapa megabyte, satu base model bisa melayani banyak tugas, dan adapter bisa digabungkan ke weight sehingga inference berjalan secepat model aslinya.

Ide utama

  • LoRA membekukan weight pretrained dan melatih update low-rank ΔW = BA di samping setiap matriks yang dipilih.
  • Untuk weight d × d, LoRA melatih 2dr parameter, bukan d², penghematan besar ketika r kecil.
  • B dimulai dari nol, jadi training berawal persis dari model pretrained.
  • Adapter yang sudah dilatih bisa digabungkan ke weight, sehingga inference tidak menambah biaya apa pun.
  • Satu base model bisa melayani banyak tugas dengan mengganti adapter yang masing-masing berukuran beberapa megabyte.
  • QLoRA memadukan LoRA dengan base 4-bit yang dibekukan untuk fine-tuning model sangat besar di satu GPU.

Ulasan singkat tentang topik ini

Pertanyaan umum

Rank berapa yang sebaiknya dipakai untuk LoRA?

Rank dari 4 sampai 64 umum dipakai, dan 8 atau 16 adalah titik awal yang biasa. Tugas yang lebih sulit atau selisih yang lebih besar dari data pretraining bisa membenarkan rank yang lebih tinggi. Kalau adapter mengalami underfitting, menaikkan rank atau menambah layer target biasanya lebih membantu daripada berlatih lebih lama.

Apa fungsi lora_alpha?

Update diskalakan dengan α / r sebelum ditambahkan ke output yang dibekukan. Mengubah α kira-kira sama efeknya dengan mengubah learning rate adapter. Setelan yang umum adalah α sama dengan r atau dua kali r.

Apakah LoRA sebagus fine-tuning penuh?

Pada tugas-tugas di paper aslinya, termasuk GLUE dengan RoBERTa dan DeBERTa serta beberapa benchmark GPT-3, LoRA menyamai atau mengalahkan fine-tuning penuh. Studi berikutnya menemukan selisih pada tugas yang butuh banyak pengetahuan baru, seperti melanjutkan training pada kode atau matematika. Di sini LoRA belajar lebih sedikit, tetapi juga lebih sedikit melupakan apa yang sudah diketahui base model.

Bisakah LoRA dipakai untuk model gambar?

Bisa. Di Stable Diffusion, adapter LoRA biasanya dilatih pada attention layer dari denoising network untuk mengajarkan gaya, karakter, atau objek dari beberapa puluh gambar. Berkasnya cukup kecil untuk dibagikan dan ditumpuk, karena itulah LoRA menjadi format umum di komunitas pembuatan gambar.

Penjelasan terkait

Referensi

  1. Hu et al. (2021), "LoRA: Low-Rank Adaptation of Large Language Models"
  2. Dettmers et al. (2023), "QLoRA: Efficient Finetuning of Quantized LLMs"
  3. Houlsby et al. (2019), "Parameter-Efficient Transfer Learning for NLP"

Terakhir diperbarui