//
파인튜닝은 모델 전체나 일부를 추가로 학습시켜 특정 작업에 맞게 모델을 조정하는 과정이다. 최근에는 메모리 효율성이 높은 파라미터 효율적 파인튜닝(PEFT)이 대세로 자리 잡았다.
파인튜닝의 목표는 모델이 특정 작업을 충분히 잘 수행하도록 만드는 것이다. 파인튜닝은 전이학습(Transfer Learning)의 한 방법으로, 한 작업에서 얻은 지식을 새롭지만 관련된 작업에 활용해 학습 속도를 높이는 데 중점을 둔다.
프롬프트 엔지니어링만으로 충분하지 않을 때 파인튜닝을 고려한다.
| 상황 | 프롬프트 엔지니어링 | 파인튜닝 |
|---|---|---|
| 특정 형식/톤 강제 | 불안정 | 안정적 |
| 도메인 특화 지식 | RAG로 해결 가능 | 모델 내재화 |
| 추론 비용 절감 | 긴 시스템 프롬프트 필요 | 짧은 프롬프트로 동일 품질 |
| 소형 모델 활용 | 성능 한계 | 큰 모델 수준으로 끌어올림 |
전체 파라미터를 파인튜닝하면 메모리와 비용이 막대하다. PEFT는 모델의 일부 파라미터만 학습하여 이 문제를 해결한다. 대표적인 방법이 LoRA(Low-Rank Adaptation)다.
LoRA는 원본 가중치 행렬에 저랭크(low-rank) 분해된 작은 행렬을 추가하는 방식이다. 원본 모델은 그대로 두고, 추가된 작은 행렬만 학습하기 때문에 메모리를 크게 절약할 수 있다. 학습 파라미터 수는 보통 원본의 0.1~1% 수준이다.
양자화(Quantization)는 모델의 정밀도를 낮추는 것이다. 모델의 메모리 사용량을 줄이는 저렴하면서도 매우 효과적인 방법이다.
모델이 완전히 학습된 후에 양자화하는 것을 말하며, 가장 널리 사용되는 방식이다.
정밀도가 낮아지는 흐름은 다음과 같다.
| 시기 | 정밀도 | 메모리 (7B 모델 기준) | 비고 |
|---|---|---|---|
| 딥러닝 초기 | 32비트 (FP32) | ~28GB | 학습과 서빙의 표준 |
| 2010년 후반 | 16비트 (FP16/BF16) | ~14GB | 낮은 정밀도 서빙이 보편화 |
| 2022년 연구 | 8비트 (INT8) | ~7GB | 추론 정밀도 하락 |
| QLoRA | 4비트 (NF4) | ~3.5GB | 극도의 경량화 |
낮은 정밀도로 추론하는 것이 이제는 표준이다. 4비트 양자화의 경우 원본 대비 메모리를 약 75% 절감하면서도 품질 저하가 매우 작다.
QLoRA는 양자화와 LoRA를 결합한 기법으로, 4비트로 양자화된 모델 위에 LoRA 어댑터를 학습한다. 이를 통해 단일 소비자급 GPU(24GB VRAM)에서도 70억 파라미터 모델을 파인튜닝할 수 있게 되었다.
# PyTorch AMP 사용 예시
from torch.cuda.amp import autocast, GradScaler
scaler = GradScaler()
for batch in dataloader:
with autocast(): # 자동으로 FP16/FP32 혼합
output = model(batch)
loss = criterion(output, target)
scaler.scale(loss).backward()
scaler.step(optimizer)
scaler.update()파인튜닝은 프롬프트 엔지니어링만으로 충분하지 않을 때 모델 성능을 끌어올리는 핵심 기법이다. 특히 PEFT와 양자화의 조합(QLoRA 등)은 제한된 리소스에서도 파인튜닝을 가능하게 만들어, 실용적인 AI 엔지니어링의 문을 넓히고 있다. 정밀도를 낮추더라도 모델 품질을 유지하는 양자화 기법의 발전이 인상적이다.