GPT, LLaMA 같은 대규모 언어 모델(LLM)을 특정 도메인에 맞게 파인튜닝하고 싶다고 하자. 가장 직관적인 방법은 모델의 모든 파라미터를 업데이트하는 것이다. 하지만 수십억 개의 파라미터를 전부 학습시키려면 GPU 메모리가 수백 GB 단위로 필요하고, 학습 시간도 상당하다. 개인이나 소규모 팀에게는 사실상 불가능한 수준이다.
그렇다면 전체 파라미터를 건드리지 않으면서도 원하는 성능을 끌어낼 수 있는 방법은 없을까? 이 질문에 대한 답이 바로 PEFT(Parameter-Efficient Fine-Tuning) 이다.
Full Fine-tuning의 한계
PEFT를 이해하려면, 먼저 기존 방식인 풀 파인튜닝(Full Fine-tuning) 의 문제점을 알아야 한다.
높은 자원 요구량
풀 파인튜닝은 모델의 모든 파라미터를 업데이트한다. 70억(7B) 파라미터 모델을 FP16으로 학습시킨다고 가정하면, 모델 가중치만 약 14GB, 여기에 옵티마이저 상태와 그래디언트까지 합치면 수십 GB의 GPU 메모리가 필요하다. 모델 크기가 커질수록 이 문제는 기하급수적으로 악화된다.
파국적 망각 (Catastrophic Forgetting)
모든 파라미터를 새로운 데이터에 맞춰 업데이트하면, 모델이 사전 학습에서 배운 일반적인 지식을 잊어버리는 현상이 발생할 수 있다. 이를 파국적 망각(Catastrophic Forgetting) 이라 한다. 특정 태스크에 과적합되면서 범용성을 잃는 것이다.
저장 비효율
태스크마다 풀 파인튜닝된 모델을 따로 저장해야 한다면, 각각 수십 GB의 체크포인트가 필요하다. 10개의 태스크에 대해 각각 파인튜닝하면, 동일한 모델 구조를 10벌이나 보관해야 하는 셈이다.
PEFT란?
PEFT(Parameter-Efficient Fine-Tuning) 는 모델의 전체 파라미터 대신 소수의 파라미터만 학습하여 파인튜닝하는 기법의 총칭이다. 원본 모델의 가중치는 동결(freeze)시키고, 작은 규모의 학습 가능한 파라미터만 추가하거나 선택하여 학습한다.
비유하자면, 이미 완성된 건물(사전 학습 모델)의 구조를 통째로 뜯어고치는 대신 인테리어만 바꾸는 것에 가깝다. 건물의 기초와 골조는 그대로 두고, 목적에 맞게 내부 배치만 조정한다.
PEFT의 대표적인 이점은 다음과 같다.
- 메모리 효율: 학습에 필요한 GPU 메모리가 대폭 줄어든다
- 학습 속도: 업데이트할 파라미터가 적으므로 학습이 빠르다
- 망각 완화: 원본 가중치를 동결하기 때문에 사전 학습 지식이 보존된다
- 저장 효율: 태스크마다 작은 어댑터 가중치만 저장하면 되므로, 수 MB 단위로 관리 가능하다
LoRA (Low-Rank Adaptation)
PEFT 기법 중 가장 널리 사용되는 것이 LoRA(Low-Rank Adaptation) 이다.
핵심 아이디어
LoRA의 핵심 가정은 이렇다. 파인튜닝 과정에서 가중치의 변화량(delta W)은 낮은 랭크(low-rank) 로 근사할 수 있다. 다시 말해, 수십억 개의 파라미터 전부를 바꿀 필요 없이, 변화의 본질은 훨씬 작은 차원에 담겨 있다는 것이다.
원래 모델의 선형 변환이 다음과 같다고 하자.
y = Wx
LoRA는 원래 가중치 행렬 W를 동결시키고, 두 개의 작은 행렬 B와 A를 추가하여 다음과 같이 변환한다.
y = Wx + (a / r) * BAx
여기서 각 요소의 의미는 다음과 같다.
- W: 원본 가중치 행렬 (동결, 학습하지 않음)
- B, A: 저랭크(low-rank) 행렬. W가 d x d 크기라면, A는 r x d, B는 d x r 크기를 갖는다
- r (rank): LoRA의 핵심 하이퍼파라미터. 저랭크 행렬의 차원을 결정하며, 일반적으로 4, 8, 16, 32, 64, 128 중에서 선택한다
- a (alpha): 업데이트의 크기(스케일)를 조절하는 파라미터
왜 효율적인가?
원래 d x d 크기의 가중치를 업데이트하려면 d^2개의 파라미터가 필요하다. 하지만 LoRA에서는 B(d x r)와 A(r x d), 총 2dr개의 파라미터만 학습하면 된다. r이 d보다 훨씬 작으므로(예: d=4096, r=16이면), 학습 파라미터 수가 극적으로 줄어든다.
적용 대상
LoRA는 주로 Transformer의 Self-Attention 레이어에 적용된다. 구체적으로는 다음 프로젝션 행렬이 대상이다.
- q_proj: Query 프로젝션
- k_proj: Key 프로젝션
- v_proj: Value 프로젝션
- o_proj: Output 프로젝션
이 네 행렬에 각각 저랭크 어댑터를 부착하여, 어텐션 메커니즘의 동작을 태스크에 맞게 미세 조정한다. 원본 모델의 나머지 부분은 전혀 건드리지 않기 때문에, 여러 태스크에 대해 각각 다른 LoRA 어댑터를 학습시키고 필요에 따라 교체하는 것도 가능하다.
QLoRA
QLoRA는 이름 그대로 양자화(Quantization) + LoRA를 결합한 기법이다. LoRA가 학습 파라미터 수를 줄였다면, QLoRA는 여기에 더해 모델 자체의 메모리 사용량까지 줄인다.
작동 방식
QLoRA의 핵심은 원본 모델의 가중치를 4비트 정밀도로 양자화하여 GPU 메모리에 올리는 것이다. 일반적인 FP16(16비트) 대비 메모리 사용량이 약 1/4로 줄어든다.
여기에 사용되는 것이 NF4(NormalFloat 4) 라는 4비트 데이터 포맷이다. NF4는 신경망 가중치의 분포가 대체로 정규분포를 따른다는 점을 활용하여, 4비트 안에서 최대한 정보 손실을 줄이도록 설계된 포맷이다.
LoRA와의 관계
QLoRA에서 원본 가중치는 4비트로 양자화되어 동결 상태로 유지된다. 학습은 여전히 LoRA 방식으로 추가된 저랭크 행렬에서만 이루어진다. 즉, 추론 시 메모리 절감(양자화) 과 학습 효율(LoRA) 을 동시에 달성하는 셈이다.
이 덕분에 QLoRA를 사용하면 소비자급 GPU(예: RTX 3090 24GB) 하나로도 65B 파라미터 모델을 파인튜닝할 수 있다. 풀 파인튜닝이라면 상상할 수 없는 일이다.
Prompt Tuning
Prompt Tuning은 모델의 가중치를 아예 건드리지 않고, 입력 단계에서 학습 가능한 프롬프트 토큰을 추가하는 방식이다.
일반적인 프롬프트 엔지니어링에서는 자연어로 된 프롬프트를 사람이 직접 작성한다. 반면 Prompt Tuning에서는 입력 임베딩 앞에 연속적인 벡터(soft prompt) 를 붙이고, 이 벡터만 학습시킨다. 이 벡터들은 사람이 읽을 수 있는 자연어가 아니라, 모델이 최적의 성능을 낼 수 있도록 자동으로 학습된 숫자 값이다.
모델 파라미터는 완전히 동결된 상태이므로, 하나의 모델에 여러 태스크용 프롬프트를 준비해두고 상황에 따라 교체하면 된다.
Prefix Tuning
Prefix Tuning은 Prompt Tuning과 유사하지만, 적용 범위가 더 넓다.
Prompt Tuning이 입력 임베딩 레이어에만 학습 가능한 토큰을 추가하는 반면, Prefix Tuning은 Transformer의 각 레이어에 학습 가능한 prefix 벡터를 삽입한다. 각 어텐션 레이어의 Key와 Value 앞에 학습된 prefix가 추가되어, 모델이 입력을 처리하는 방식 전체에 영향을 미친다.
더 많은 지점에 개입하므로 Prompt Tuning보다 표현력이 높다는 장점이 있지만, 그만큼 학습 파라미터 수도 약간 더 많아진다.
PEFT 기법 비교
| 기법 | 학습 대상 | 적용 위치 | 메모리 절감 | 특징 |
|---|---|---|---|---|
| LoRA | 저랭크 행렬 B, A | Self-Attention 레이어 | 높음 | 가장 범용적, 추론 시 병합 가능 |
| QLoRA | 저랭크 행렬 B, A | Self-Attention 레이어 | 매우 높음 | 4비트 양자화로 메모리 극한 절감 |
| Prompt Tuning | Soft prompt 벡터 | 입력 임베딩 | 매우 높음 | 모델 완전 동결, 가장 가벼움 |
| Prefix Tuning | Prefix 벡터 | 각 Transformer 레이어 | 높음 | Prompt Tuning 대비 표현력 향상 |
정리
풀 파인튜닝은 강력하지만, 자원 소모가 크고 파국적 망각의 위험도 있다. PEFT는 이러한 문제를 해결하면서도 충분한 성능을 달성하는 실용적인 접근법이다.
그중에서도 LoRA는 구현이 간단하고 성능이 검증되어 현재 가장 널리 사용되며, QLoRA는 제한된 하드웨어 환경에서도 대규모 모델 파인튜닝을 가능하게 만든다. Prompt Tuning과 Prefix Tuning은 모델 가중치를 완전히 동결시킨 채 최소한의 파라미터만으로 태스크 적응을 시도하는, 더욱 극단적인 효율 전략이다.
LLM을 실전에서 활용하려는 시점에서, PEFT는 선택이 아닌 필수 지식이 되어가고 있다.