PEFT란 무엇인가? 매개변수 효율적 미세 조정 (Parameter-Efficient Fine-Tuning) 가이드
요약
PEFT(매개변수 효율적 미세 조정)의 개념과 LoRA, QLoRA 등 다양한 방법론을 비교하는 기술 가이드입니다. 모델 전체를 학습시키는 대신 소수의 매개변수만 학습하여 메모리 효율성을 높이고 작업 특화 어댑터를 생성하는 원리를 설명합니다.
핵심 포인트
- 모델 전체 가중치를 동결하고 소수의 매개변수만 학습하여 자원 절약
- LoRA, QLoRA, Prompt Tuning 등 다양한 PEFT 기법 비교
- 학습 메모리 요구 사항 및 체크포인트 저장 비용의 획기적 감소
- Hugging Face PEFT 라이브러리를 활용한 실제 운영 배포 고려사항
LoRA, QLoRA, rsLoRA, AdaLoRA, DoRA, IA³, 프롬프트 튜닝 (prompt tuning) 및 어댑터 배포 워크플로우를 비교하는 기술 가이드입니다.
DEHA Research · 2026년 7월 16일 · 읽기 시간 18분
PEFT, 즉 매개변수 효율적 미세 조정 (Parameter-Efficient Fine-Tuning)은 모델의 모든 가중치 (weights)를 수정하는 대신, 모델에 추가된 소수의 매개변수 하위 집합이나 경량화된 구성 요소만을 학습시켜 대규모 사전 학습된 모델 (pretrained model)을 새로운 작업에 적응시키는 방법론의 집합입니다.
그 목적은 단순히 GPU 메모리를 절약하는 것에 그치지 않습니다. PEFT는 동일한 기반 모델 (base model)을 공유하면서 작고 휴대 가능하며 특정 작업에 특화된 어댑터 (adapters)를 생성하는 것도 가능하게 합니다.
실제로 PEFT라는 용어는 두 가지 다른 방식으로 사용됩니다. 첫째, LoRA, IA³, 프롬프트 튜닝 (prompt tuning)을 포함하는 일반적인 방법론의 집합을 의미합니다. 둘째, Transformers, Diffusers, Accelerate와 함께 이러한 기술들을 구현하는 오픈 소스 Hugging Face PEFT 라이브러리를 의미합니다.
이 글에서는 먼저 공학적 접근 방식으로서의 PEFT를 설명한 다음, Hugging Face 라이브러리의 핵심 개념과 실제 운영 배포 (production deployment)를 위해 필요한 결정 사항들을 살펴봅니다.
요약: PEFT란 무엇인가?
PEFT는 기반 모델 가중치의 대부분을 동결 (freeze)하고, 작은 어댑터 (adapters), 스케일링 벡터 (scaling vectors), 또는 학습 가능한 소프트 프롬프트 (learnable soft prompts)만을 학습시킵니다.
최적화 도구 (optimizer)가 더 적은 매개변수에 대한 그래디언트 (gradients)와 상태 (states)를 저장하면 되기 때문에, 학습 메모리 요구 사항과 체크포인트 (checkpoint) 크기가 줄어듭니다.
하지만 PEFT는 품질이 낮은 학습 데이터에 대한 해결책은 아니며, 모든 작업에서 전체 미세 조정 (full fine-tuning)과 동일한 성능을 보장하는 것도 아닙니다.
- PEFT는 왜 개발되었는가?
전체 미세 조정 (full fine-tuning) 과정 중에는 모델의 모든 학습 가능한 가중치에 대해 그래디언트 (gradients)와 최적화 도구 상태 (optimizer states)를 유지해야 합니다.
AdamW를 사용하는 혼합 정밀도 학습 (mixed-precision training) 실행 시, 이러한 상태들은 모델 가중치 자체보다 몇 배 더 많은 메모리를 소비할 수 있습니다. 또한 모델 크기가 커짐에 따라 개별 작업마다 전체 모델 체크포인트를 저장하는 것도 운영 측면에서 비용이 많이 들게 됩니다.
PEFT는 사전 학습된 모델 (Pretrained Model)이 학습한 일반적인 표현 (General Representations)을 보존하는 동시에, 작업 특화적인 변경 사항을 작은 매개변수 예산 (Parameter Budget) 내로 집중시킵니다.
Hugging Face 문서에 따르면, 이 접근 방식은 많은 작업에서 전체 미세 조정 (Full Fine-Tuning)에 근접한 결과를 달성하면서도 학습 가능한 매개변수의 수, 계산 요구 사항 및 저장 비용을 실질적으로 줄일 수 있다고 명시되어 있습니다.
'근접한'이라는 단어는 중요합니다. 결과는 모델, 작업, 데이터셋, PEFT 방법 및 할당된 매개변수 예산에 따라 달라집니다.
- PEFT와 전체 미세 조정 (Full Fine-Tuning)의 주요 차이점
| 특징 | 전체 미세 조정 (Full Fine-Tuning) | PEFT |
|---|---|---|
| 학습되는 매개변수 | 모델 전체 또는 모델의 상당 부분 | 추가되거나 선택된 소수의 매개변수 |
| 옵티마이저 (Optimizer) 메모리 | 매우 높음 | 주로 학습 가능한 매개변수로 제한됨 |
| 체크포인트 (Checkpoint) | 전체 모델 가중치 (Weights) | 대개 작은 어댑터 (Adapter) 파일 |
| 작업별 배포 | 별도의 전체 모델이 필요할 수 있음 | 동일한 베이스 모델 위에서 어댑터를 교체할 수 있음 |
| 적응 능력 (Adaptation Capacity) | 가장 높음 | 선택된 방법 및 매개변수 예산에 의해 제한됨 |
| 베이스 모델 의존성 | 독립적인 전체 체크포인트를 생성할 수 있음 | 올바른 베이스 모델 및 리비전 (Revision)이 필요함 |
PEFT가 모델의 대부분의 계산이 중단된다는 것을 의미하지는 않습니다.
동결된 레이어 (Frozen Layers)는 옵티마이저 상태 (Optimizer States)를 필요로 하지 않지만, 순전파 (Forward Pass)는 여전히 해당 레이어를 통과하며, 어댑터로 그래디언트 (Gradients)를 전파하기 위해서는 역전파 그래프 (Backward Graph)의 상당 부분이 여전히 필요합니다.
긴 시퀀스 활성화 (Long-sequence Activations), 어텐션 연산 (Attention Operations) 및 임시 커널 메모리 (Temporary Kernel Memory)가 여전히 요구됩니다.
따라서 PEFT를 통해 70억 개의 매개변수를 가진 모델을 더 작은 GPU에서 미세 조정하는 것이 가능해질 수는 있지만, 최대 시퀀스 길이 (Maximum Sequence Length)가 무제한이 되는 것은 아닙니다.
- PEFT 방법은 어떻게 분류되는가?
모든 PEFT 기술이 LoRA의 변형인 것은 아닙니다.
방법론들은 모델을 어디서, 어떻게 수정하느냐에 따라 네 가지 실질적인 그룹으로 나눌 수 있습니다.
가중치 또는 어댑터 기반 방법 (Weight- or Adapter-Based Methods)
LoRA, AdaLoRA, DoRA와 같은 방법들은 경량 구조를 사용하여 가중치 업데이트를 나타냅니다.
활성화 스케일링 (Activation Scaling)
IA³와 같은 방법들은 학습 가능한 벡터 (learnable vectors)를 사용하여 어텐션 (attention) 및 피드포워드 (feed-forward) 활성화를 스케일링 (scaling) 합니다.
소프트 프롬프팅 (Soft Prompting)
프롬프트 튜닝 (Prompt tuning) 및 프리픽스 튜닝 (prefix tuning)은 동결된 모델 (frozen model)에 학습 가능한 연속 벡터 (continuous vectors)를 추가합니다.
선택적 튜닝 (Selective Tuning)
이러한 접근 방식은 편향 (biases), LayerNorm 파라미터, 특정 토큰, 또는 모델 레이어의 하위 집합과 같이 선택된 기존 파라미터만을 학습합니다.
가장 적은 수의 파라미터를 학습하는 방법이 반드시 최선의 방법은 아닙니다.
작업이 모델이 이미 보유하고 있는 조종 능력 (steering capabilities)만을 필요로 할 때는 소프트 프롬프트 (soft prompt)만으로도 충분할 수 있습니다.
목표가 새로운 출력 구조를 가르치거나 더 강력한 행동 변화를 유도하는 것이라면, 선형 레이어 (linear layers)에 적용된 LoRA가 더 큰 유연성을 제공할 수 있습니다.
사용 가능한 파라미터 및 메모리 예산이 극도로 제한적인 경우에는 IA³를 고려할 수 있습니다.
- LoRA: 가장 널리 사용되는 PEFT 방법
LoRA는 동결된 가중치 행렬 (weight matrix) W에 대한 업데이트를 두 개의 더 작은 행렬의 곱으로 나타냅니다:
W′ = W + sBA
랭크 (rank) r은 두 행렬 사이의 좁은 중간 차원을 결정합니다.
d_out × d_in 차원을 가진 선형 레이어 (linear layer)의 경우, 전체 가중치 업데이트에는 다음의 학습 가능한 파라미터가 필요합니다:
d_out × d_in
LoRA는 대략 다음과 같은 학습 가능한 파라미터를 추가합니다:
r × (d_in + d_out)
예시:
4096 × 4096 선형 레이어
전체 가중치:
16,777,216 파라미터
r = 16인 LoRA:
16 × (4096 + 4096) = 131,072 파라미터
이 레이어에 대해 학습 가능한 파라미터가 약 128배 적습니다.
전체 감소량은 얼마나 많은 레이어가 LoRA 어댑터 (adapters)를 받는지, 그리고 어떤 모듈을 대상으로 하는지에 따라 달라집니다.
원래의 LoRA 연구는 학습 가능한 파라미터 수와 관련 메모리 요구 사항을 실질적으로 줄이면서도 여러 작업에 걸쳐 강력한 결과를 보고했습니다.
주요 LoRA 구성 결정 사항에는 다음이 포함됩니다:
r,
lora_alpha,
target_modules,
dropout,
저장해야 하는 추가 모듈.
랭크 (Rank)는 어댑터의 용량을 결정하며, alpha는 그 기여의 스케일 (scale)을 결정합니다.
- QLoRA는 PEFT 방법인가, 양자화 (Quantization) 방법인가?
QLoRA는 두 가지 별개의 아이디어를 결합합니다.
동결된(frozen) 베이스 모델 가중치는 4비트 정밀도(4-bit precision)로 로드되며, 계산 중에 적절한 연산 정밀도(compute precision)로 일시적으로 역양자화(dequantized)됩니다. 학습 가능한 LoRA 어댑터(adapters)는 더 높은 정밀도를 유지합니다.
따라서 양자화(Quantization)는 베이스 모델이 메모리에 어떻게 표현되는지를 다루는 반면, LoRA는 어떤 매개변수(parameters)를 학습시킬지를 결정합니다.
단순히 모델을 4비트 정밀도로 로드하는 것은 미세 조정(fine-tuning)이 아닙니다.
마찬가지로, 베이스 모델을 양자화하지 않고 LoRA를 사용하는 것은 LoRA이지 QLoRA가 아닙니다.
QLoRA는 다음과 같은 기술들을 사용합니다:
NormalFloat 4-bit, 또는 NF4,
이중 양자화 (double quantization),
페이지드 옵티마이저 (paged optimizers).
그 목적은 더 제한된 GPU 자원을 사용하여 대규모 모델을 적응(adapt)시키는 것을 가능하게 하는 것입니다.
4비트 베이스 모델로 학습한다고 해서 어댑터 체크포인트(adapter checkpoint) 자체가 4비트 정밀도로 저장된다는 의미는 아닙니다.
양자화로 인해 발생하는 품질 차이는 각 모델과 작업(task)에 대해 별도로 측정되어야 합니다.
- rsLoRA, AdaLoRA, DoRA는 무엇을 바꾸는가? rsLoRA
표준 LoRA는 다음을 사용하여 어댑터의 기여도를 조절합니다:
alpha / r
Rank-Stabilized LoRA, 또는 rsLoRA는 대신 다음을 사용합니다:
alpha / √r
이 공식은 높은 랭크(ranks)에서 학습 신호(learning signal)가 과도하게 작아지는 것을 방지하기 위해 설계되었습니다.
Hugging Face PEFT에서는 다음과 같이 활성화할 수 있습니다:
use_rslora=True
이 접근 방식은 표준 스케일링 공식이 랭크 자체의 효과를 혼동하는 것을 방지하는 것을 목표로 하기 때문에, 서로 다른 랭크를 비교할 때 특히 유용합니다.
AdaLoRA
표준 LoRA는 일반적으로 대부분의 대상 행렬(matrices)에 동일한 랭크 예산(rank budget)을 할당합니다.
AdaLoRA는 학습 중에 서로 다른 레이어(layers)의 중요도를 평가하고 제한된 매개변수 예산을 적응적으로 분배합니다. 이는 중요도가 낮은 업데이트와 관련된 특이값(singular values)을 가지치기(prunes)합니다.
이 방법은 특히 예산이 매우 제한적인 경우, 균등한 랭크 할당보다 사용 가능한 매개변수 예산을 더 효율적으로 사용하는 것을 목표로 합니다.
DoRA
DoRA는 가중치(weight)를 크기(magnitude) 성분과 방향(directional) 성분으로 분해합니다.
이는 크기(magnitude) 성분을 별도로 학습하는 동안, LoRA를 사용하여 방향(directional) 성분을 업데이트합니다.
그 목표는 LoRA와 전체 미세 조정 (full fine-tuning) 사이의 훈련 역학 (training dynamics) 차이를 줄이는 것입니다.
DoRA에 관한 연구는 언어, 시각 및 멀티모달 (multimodal) 작업에서 LoRA보다 향상된 성능을 보고했습니다.
트레이드오프 (trade-off)는 훈련 연산량 (training compute)과 일시적인 메모리 소비량이 일반적인 (vanilla) LoRA보다 더 높을 수 있다는 점입니다.
- IA³: 행렬을 업데이트하는 대신 활성화 함수를 스케일링하기
IA³는 다음 요소들에 학습 가능한 스케일링 벡터 (scaling vectors)를 추가합니다:
- 어텐션 키 (attention key) 활성화,
- 어텐션 값 (attention value) 활성화,
- 중간 피드포워드 (intermediate feed-forward) 활성화.
저차원 행렬 (low-rank matrix) 업데이트 대신 벡터를 사용하기 때문에, 학습 가능한 매개변수의 수가 LoRA보다 훨씬 더 적을 수 있습니다.
T-Few 연구는 IA³를 소개하는 동시에, 매개변수 효율적 미세 조정 (parameter-efficient fine-tuning)이 특정 퓨샷 (few-shot) 작업에서 정확도와 계산 효율성 모두에서 인컨텍스트 학습 (in-context learning)보다 뛰어난 성능을 낼 수 있음을 입증했습니다.
IA³는 극도로 작은 어댑터 (adapter)와 작업 간의 빠른 전환이 필요할 때 매력적입니다.
하지만, 복잡한 행동 변화에 있어서는 LoRA의 행렬 기반 적응 능력이 더 유연할 수 있습니다.
따라서 결정은 체크포인트 (checkpoint) 크기뿐만 아니라, 대상 작업 평가 및 서빙 아키텍처 (serving architecture)를 기반으로 이루어져야 합니다.
- 프롬프트 튜닝 (Prompt Tuning) 및 프리픽스 튜닝 (Prefix Tuning)
소프트 프롬프트 (Soft-prompt) 방식은 사람이 읽을 수 있는 프롬프트 단어를 생성하지 않습니다.
대신, 역전파 (backpropagation)를 통해 모델의 임베딩 공간 (embedding space) 내에서 연속적인 벡터를 학습합니다.
프롬프트 튜닝 (Prompt Tuning)
프롬프트 튜닝은 모델 입력에 학습 가능한 가상 토큰 (virtual tokens)을 추가합니다.
연구에 따르면 모델 규모가 커짐에 따라, 프롬프트 튜닝은 일부 T5 작업에서 전체 모델 튜닝 (full-model tuning)과의 성능 격차를 줄일 수 있습니다.
프리픽스 튜닝 (Prefix Tuning)
프리픽스 튜닝은 각 트랜스포머 (Transformer) 레이어의 어텐션 메커니즘에 학습 가능한 프리픽스 키 (prefix key) 및 값 (value) 표현을 제공합니다.
해당 원본 연구는 모델 매개변수의 약 0.1%만을 학습시키면서도, table-to-text 생성 및 요약 (summarization) 작업에서 전체 미세 조정 (full fine-tuning)에 근접한 결과를 보고했습니다.
이러한 방식들로 생성된 어댑터 (adapter) 파일은 크기가 매우 작을 수 있습니다.
하지만, 가상 토큰 (virtual tokens) 및 프리픽스 (prefixes)는 다음과 같은 요소에 영향을 미칠 수 있습니다:
사용 가능한 컨텍스트 (context)의 양,
KV 캐시 (KV cache),
추론 아키텍처 (inference architecture).
또한 소프트 프롬프트 (soft prompt)는 다른 토크나이저 (tokenizer)나 다른 베이스 모델 (base-model) 버전으로 자유롭게 전이될 수 있는 자연어 프롬프트 (natural-language prompt)가 아닙니다.
- 어떤 PEFT 방법을 선택해야 하는가?
| 요구 사항 | 우선순위 후보 | 반드시 평가해야 할 사항 |
|---|---|---|
| 일반적인 지시 사항 또는 포맷팅 적응 | LoRA | 타겟 모듈 (target modules), 랭크 (rank), 알파 (alpha) |
| 단일 GPU에서 대규모 모델 적응 | QLoRA | 4비트 품질 차이 및 연산 데이터 타입 (compute dtype) |
| 높은 랭크에서 더 높은 안정성 | rsLoRA | 알파 (alpha) 및 학습률 (learning rate) 결합 |
| 극도로 제한된 매개변수 예산 | AdaLoRA 또는 IA³ | 실제 작업 수행 능력 |
| LoRA와 전체 미세 조정 간의 품질 격차 감소 | DoRA | 추가 연산 및 VRAM |
| 작업당 매우 작은 상태 (state) | 프롬프트 또는 프리픽스 튜닝 (Prompt or prefix tuning) | 모델 규모 및 컨텍스트 비용 |
| 새롭거나 빈번하게 변경되는 지식 추가 | RAG 우선 | 정보의 최신성 및 출처 요구 사항 |
PEFT는 행동 및 작업 적응 (behavioral and task adaptation)에 강력합니다.
하지만 빈번하게 변경되는 조직의 지식을 모델 가중치 (weights)에 기록하는 기본 방법이 되어서는 안 됩니다.
정보가 최신 상태를 유지해야 하고 그 출처를 보여주어야 하는 경우에는 검색 증강 생성 (RAG, retrieval-augmented generation)이 더 적절한 경우가 많습니다.
PEFT와 RAG는 함께 사용될 수도 있습니다.
예를 들어, 어댑터는 원하는 답변 구조를 가르치고, 검색 (retrieval)은 현재의 뒷받침 근거를 제공할 수 있습니다.
- Hugging Face PEFT를 이용한 기본적인 LoRA 워크플로우
from peft import LoraConfig, get_peft_model
config = LoraConfig(
task_type="CAUSAL_LM",
r=16,
lora_alpha=32,
lora_dropout=0.05,
target_modules=[
"q_proj",
"k_proj",
"v_proj",
"o_proj",
"gate_proj",
"up_proj",
"down_proj",
],
bias="none",
use_rslora=True,
)
model = get_peft_model(base_model, config)
model.print_trainable_parameters()
target_modules에서 사용되는 이름은 모델 아키텍처(model architectures)에 따라 다르며, 다른 모델의 설정을 맹목적으로 복사해서는 안 됩니다.
학습을 시작하기 전에 개발자는 다음 사항을 검토하고 기록해야 합니다:
- 학습 가능한 매개변수 (trainable parameters) 목록
- 학습 가능한 매개변수의 비율 (percentage of trainable parameters)
- 여러 어댑터 텐서 (adapter tensors)의 데이터 타입 (data types)
- 해당 텐서들이 위치한 장치 (devices)
PEFT는 또한 Transformers와의 통합을 통해 어댑터를 추가, 활성화 및 삭제하는 기능을 지원합니다.
print_trainable_parameters()가 예상보다 훨씬 높은 비율을 보고하는 경우, 임베딩 레이어 (embedding layer), 언어 모델 헤드 (language-model head) 또는 편향 매개변수 (bias parameters)가 의도치 않게 활성화되었을 수 있습니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기