트랜스포머·PEFT 2일 과정8장 · PEFT와 LoRA 학습5 / 18← 이전목차다음 →MetaContents

8장. PEFT와 LoRA 학습

PEFT 기법 한눈에 보기

사진을 고치는 방법에도 여러 가지가 있습니다. 원본 위에 투명 필름을 덮어 그리기, 사진 사이에 작은 쪽지 끼우기, 사진 앞에 설명 카드 붙이기처럼요. PEFT 에도 "어디에 무엇을 붙여 학습하느냐"에 따라 여러 갈래가 있습니다. 이 과정에서 쓰는 것은 LoRA 와 QLoRA 입니다.

LoRA, QLoRA, Adapter, Prompt Tuning 의 네 갈래를 나란히 놓은 비교 그림

그림의 왼쪽 두 칸(LoRA, QLoRA)이 오늘 실습에서 쓰는 방법입니다. QLoRA 는 기반 모델 가중치를 4비트로 줄여(양자화) 얼려 두고, 그 위에 붙인 LoRA 어댑터만 학습합니다. 어댑터는 4비트로 줄이지 않습니다. 오른쪽 두 칸은 다른 갈래의 예입니다.

기법 비교

기법학습하는 위치핵심 생각PEFT 설정 클래스
LoRA고른 선형층 옆가중치의 변화량을 작은 행렬 두 개의 곱으로 나타낸다LoraConfig
QLoRA4비트 기반 모델 위의 LoRA기반 모델은 4비트로 저장·고정, LoRA 어댑터만 학습BitsAndBytesConfig + LoraConfig
Adapter블록 사이작은 모듈을 끼워 넣는다이 과정에서 쓰지 않음
Prompt Tuning, P-Tuning입력 앞학습 가능한 가상 토큰을 붙인다이 과정에서 쓰지 않음
Prefix Tuning층마다 앞쪽층마다 prefix(머리말)를 붙인다이 과정에서 쓰지 않음
(IA)³활성값활성값의 크기만 조절한다이 과정에서 쓰지 않음
DoRALoRA 의 변형LoRA 를 크기와 방향으로 나눈다이 과정에서 쓰지 않음

LLM 파인튜닝에서는 LoRA 와 QLoRA 가 널리 쓰입니다. 학습할 파라미터와 저장할 결과물이 작고, 필요하면 LoRA 를 기반 모델에 병합해 배포할 수도 있기 때문입니다.

짧은 예시

Python
# 업무 5개를 맡길 때 저장 공간 견주기(실습에서 실제로 찍힌 크기를 쓴다)
base_mb = 1885      # 기반 모델 가중치(FP32) 크기, 실습 4의 출력
adapter_mb = 33.60  # 학습한 LoRA 어댑터 파일 크기, 실습 4의 출력
tasks = 5           # 말투 페르소나, 고객 상담, 요약 ... 같은 업무 수

full_ft = base_mb * tasks              # 업무마다 모델 전체를 따로 저장
lora = base_mb + adapter_mb * tasks    # 모델 하나 + 어댑터 5개
print(f"Full Fine-tuning: {full_ft:,.0f} MB")   # 결과: Full Fine-tuning: 9,425 MB
print(f"LoRA            : {lora:,.0f} MB")      # 결과: LoRA            : 2,053 MB

이 코드가 뜻하는 것

사진관에서 손님 다섯 명의 요청을 받았을 때, 원본 사진을 다섯 장 새로 인화하는 경우와 원본 한 장에 필름 다섯 장을 보관하는 경우를 견준 코드입니다. 여기서 원본 사진이 base_mb, 필름 한 장이 adapter_mb 입니다.

줄하는 일쉽게 말하면
base_mb * tasks1,885 × 5 = 9,425원본을 다섯 번 인화
base_mb + adapter_mb * tasks1,885 + 33.60 × 5 = 2,053원본 하나와 필름 다섯 장

업무가 늘어날수록 차이는 더 벌어집니다. 업무 하나를 더할 때 Full Fine-tuning 은 1,885 MB, LoRA 는 33.60 MB 씩 늘어납니다.

주의할 점

  • 어댑터는 자기가 학습된 기반 모델과 함께 써야 합니다. Qwen2.5-0.5B 로 학습한 어댑터를 다른 모델에 붙이면 층 크기가 맞지 않아 동작하지 않습니다.
  • PEFT 기법마다 잘 맞는 과제가 다릅니다. 이 과정은 가장 널리 쓰이는 LoRA 와 QLoRA 만 직접 해 봅니다.
← 이전 절8장 · PEFT, 대부분은 얼리고 일부만 학습하기다음 절 →8장 · LoRA 의 원리