Unsloth - Lora Fine-Tuning Hyperparameters
1. LoRA 핵심 개념
1.1 문제: Full Fine-Tuning
Full Fine-Tuning은 모든 파라미터 \(W \in \mathbb{R}^{d \times k}\)를 업데이트한다.
\[W' = W_0 + \Delta W\]문제점: 70B 모델 기준 \(\Delta W\)만 해도 140GB+ 메모리 필요.
1.2 LoRA의 핵심
Fine-tuning시 weight 변화량 \(\Delta W\)는 Low-Rank 구조를 가진다.
Low-Rank = 압축 가능하다는 뜻
JPEG 압축처럼 원본 10MB → 500KB로 줄여도 품질이 비슷한 이유는,
정보에 중복과 패턴이 있기 때문.LLM Fine-tuning도 마찬가지.
연구 결과, weight 변화량이 엄청 복잡하게 변하는 게 아니라
몇 개의 주요 방향으로만 변한다는 것을 발견 이미 언어를 잘 아는 LLM에게 “의료 용어 좀 더 잘 알아듣게” 같은 미세 조정만 하면 되기 때문
즉, \(\Delta W\)를 두 개의 작은 행렬로 분해 가능:
\[\Delta W = BA\] \[\begin{align} B &\in \mathbb{R}^{d \times r} \\ A &\in \mathbb{R}^{r \times k} \\ r &\ll \min(d, k) \end{align}\]1.3 파라미터 비교
| Full Fine-Tuning | LoRA (r=8) | |
|---|---|---|
| 파라미터 수 | \(d \times k\) | \(d \times r + r \times k\) |
| 예시 (4096×4096) | 16.7M | 65K |
| 압축률 | 1x | ~256x |
2. 수학적 구조
2.1 Forward Pass
\[h = W_0 x + \frac{\alpha}{r} \cdot BAx\]
Input x
│
├─────────────────┐
▼ ▼
┌───────┐ ┌───────┐
│ W₀ │ │ A │ (r × k)
│frozen │ └───┬───┘
└───┬───┘ ▼
│ ┌───────┐
│ │ B │ (d × r)
│ └───┬───┘
│ │ × (α/r)
▼ ▼
└────────(+)──────┘
│
▼
Output h
Matrix 크기 예제
구체적인 숫자로 이해해보자. d=64, k=32, r=4로 설정한 경우:
| 행렬 | 크기 | 파라미터 수 | 설명 |
|---|---|---|---|
| \(W_0\) | 64 × 32 | 2,048 | 원본 weight (frozen) |
| \(A\) | 4 × 32 | 128 | LoRA down-projection |
| \(B\) | 64 × 4 | 256 | LoRA up-projection |
| \(\Delta W = BA\) | 64 × 32 | - | \(W_0\)와 같은 크기로 복원 |
LoRA 파라미터: \(A + B = 128 + 256 = 384\) (Full의 18.75%)
2.2 초기화
- A: Kaiming/Gaussian 초기화
- B: Zero 초기화 → 학습 시작 시 \(\Delta W = BA = 0\)
nn.init.kaiming_uniform_(self.lora_A, a=math.sqrt(5))
nn.init.zeros_(self.lora_B) # 핵심: 0으로 시작
2.3 Scaling Factor α
\[\text{scaling} = \frac{\alpha}{r}\]| r | α | α/r | 효과 |
|---|---|---|---|
| 8 | 8 | 1.0 | 기본 |
| 8 | 16 | 2.0 | LoRA 효과 2배 |
| 16 | 16 | 1.0 | rank↑, 스케일 유지 |
3. 적용 위치 (Target Modules)
Transformer에서 LoRA 적용 가능한 위치:
[Attention] [MLP (SwiGLU)]
├── q_proj ✓ ├── gate_proj ✓
├── k_proj ✓ ├── up_proj ✓
├── v_proj ✓ └── down_proj ✓
└── o_proj ✓
권장: 전부 적용 (Unsloth 기본값)
4. Hyperparameters 정리
| Parameter | 권장값 | 설명 |
|---|---|---|
r |
16~64 | rank. 높을수록 표현력↑, 메모리↑ |
lora_alpha |
r과 동일 | scaling = α/r |
lora_dropout |
0 | 필요시 0.05 |
target_modules |
all | Attention + MLP 모두 |
5. QLoRA
Base model을 4-bit 양자화 + LoRA:
- Base: 4-bit (frozen)
- LoRA adapters: 16-bit (trainable)