LLM 파인튜닝 방법론

파인튜닝의 주요 방법론 및 고급 기법

파인튜닝은 모델의 모든 파라미터를 업데이트하는 전통적인 방식부터, 컴퓨팅 자원과 시간을 획기적으로 절약하는 효율적인 기법(PEFT)까지 다양하게 발전해왔습니다.

1. 파인튜닝 프로세스: 단계별 이해

파인튜닝은 다음의 체계적인 단계를 거쳐 진행됩니다.

  1. 학습 데이터 준비 (Training Data Preparation):
    • 고품질 데이터셋의 중요성: 파인튜닝의 성패는 학습 데이터셋의 품질에 크게 좌우됩니다. 데이터의 양도 중요하지만, 품질과 다양성이 훨씬 더 중요합니다. 예를 들어, 스탠포드의 Alpaca 모델이 5.2만 개의 예시로 학습되었음에도 불구하고, Meta의 LIMA(Less Is More for Alignment) 모델은 단 1,000개의 고품질 예시만으로 유사하거나 더 나은 성능을 보여주었습니다. 이는 'Less is More' 원칙을 증명합니다.
    • 데이터 선별 및 큐레이션: Microsoft의 Phi-1 모델 사례에서 볼 수 있듯이, '교과서'처럼 교육적 가치가 높고 잘 정제된 데이터셋이 모델의 특정 능력(예: 코딩)을 비약적으로 향상시킬 수 있습니다. 불필요한 노이즈나 낮은 품질의 데이터는 오히려 모델 성능을 저해할 수 있으므로, 데이터 선별 및 정제 과정이 필수적입니다.
    • 형식: OpenAI의 파인튜닝 API는 JSON Lines (JSONL) 형식을 권장하며, 각 예시는 시스템 메시지, 사용자 메시지, 어시스턴트 메시지 등으로 구성된 대화 턴의 형태로 제공됩니다. 이는 모델이 특정 대화 스타일이나 페르소나를 학습하는 데 유용합니다.
  2. 모델 학습 (Train the Pre-trained Model):
    • 초기 가중치 활용: 사전 학습된 LLM의 가중치를 초기 값으로 사용하여 학습을 시작합니다. 이는 무작위 초기화보다 훨씬 효율적입니다.
    • 옵티마이저 및 학습률: Adam, AdamW와 같은 최적화 알고리즘을 사용하며, 학습률(Learning rate)은 일반적으로 0.1~10 범위 내에서 조정하는 것이 권장됩니다.
    • 에포크 수: 전체 데이터셋을 학습시키는 횟수를 의미하며, 너무 적으면 학습 부족, 너무 많으면 과적합이 발생할 수 있습니다.
  3. 결과 평가 (Evaluate Results):
    • 학습된 모델의 성능을 평가하고, 성능이 만족스럽지 않을 경우 데이터 준비나 학습 단계로 돌아가 하이퍼파라미터(Batch size, Learning rate multiplier, Number of epochs 등)를 조정하거나 데이터셋을 보강하는 반복 작업을 수행합니다.
    • 검증 데이터셋: 학습 과정에서 모델의 과적합 여부를 판단하기 위해 별도의 검증 데이터셋을 활용합니다.
  4. 배포 및 활용 (Deploy & Use the Model):
    • 최종적으로 학습된 모델을 배포하여 실제 서비스나 애플리케이션에 활용합니다. OpenAI와 같은 플랫폼은 파인튜닝된 모델을 API 형태로 쉽게 배포하고 호출할 수 있도록 지원합니다.

2. PEFT (Parameter-Efficient Fine-Tuning) 기법: 효율성의 혁신

PEFT는 대규모 LLM의 모든 파라미터를 업데이트하는 'Full Fine-tuning'의 높은 비용과 메모리 요구사항을 해결하기 위해 등장했습니다. 전체 모델의 파라미터를 수정하는 대신, 소수의 파라미터만 학습하거나 모델에 작은 어댑터를 추가하는 방식으로 효율성을 극대화합니다.

  • LoRA (Low-Rank Adaptation):
    • 원리: LoRA는 사전 학습된 모델의 가중치 행렬 $W_0$를 직접 업데이트하는 대신, $W_0$에 작은 랭크(rank)의 두 행렬 $B$와 $A$의 곱($BA$)을 더하여 업데이트합니다. 즉, $W_0 + \Delta W = W_0 + BA$ 형태가 됩니다. 여기서 $B \in \mathbb{R}^{d \times r}$이고 $A \in \mathbb{R}^{r \times k}$일 때, $r \ll \min(d,k)$ 인 작은 랭크 $r$을 사용합니다.
    • 효과: 학습할 파라미터의 수가 $d \times k$에서 $d \times r + r \times k$로 획기적으로 줄어듭니다. 이는 학습에 필요한 연산량과 메모리 사용량을 대폭 감소시키면서도, 기존 모델의 파라미터를 변경하지 않고 특정 태스크에 필요한 지식을 효과적으로 학습합니다. LoRA는 Full Fine-tuning과 유사하거나 더 나은 성능을 보이는 경우가 많습니다.
    • 초기화: $B$는 0으로, $A$는 가우시안 정규 분포 $\mathcal{N}(0, \sigma^2)$로 초기화하여 학습 초기에 $\Delta W = BA$가 0에 가깝도록 합니다.
  • QLoRA (Quantized Low-Rank Adaptation):
    • 원리: LoRA를 더욱 최적화한 기법으로, 사전 학습된 모델의 가중치를 4비트 정밀도로 양자화(Quantization)하여 메모리 사용량을 크게 줄입니다. 이렇게 양자화된 모델에 LoRA 어댑터를 적용하여 학습합니다.
    • 주요 기술:
      • 4-bit NormalFloat (NF4) 양자화: LLM의 가중치 대부분이 정규 분포를 따른다는 점에 착안하여, 정보 이론적으로 최적인 새로운 4비트 데이터 형식(NF4)을 도입합니다. 이는 일반적인 Float 형식에 비해 정확도를 유지하면서 메모리를 절감합니다.
      • Double Quantization (DQ): 양자화된 가중치를 다시 양자화하는 기법으로, 양자화 상수를 8비트(원래 32비트)로 양자화하여 메모리 공간을 추가로 줄입니다. 이를 통해 0.373비트/파라미터의 메모리 절감 효과를 얻습니다.
      • Paged Optimizer (페이지드 옵티마이저): 학습 중 발생하는 메모리 사용량 급증(spikes)을 효율적으로 관리하기 위해, 옵티마이저 상태(optimizer states)를 작은 청크(페이지)로 분할하여 필요에 따라 CPU와 GPU 메모리 간에 페이지를 이동시키는 기술입니다. 이는 VRAM 부족으로 인한 학습 중단(Out Of Memory)을 방지합니다.
    • 효과: QLoRA는 LoRA 대비 훨씬 적은 메모리(예: 4비트)로도 대규모 LLM을 파인튜닝할 수 있게 하여, 개인 컴퓨터나 저사양 GPU에서도 대규모 모델 파인튜닝을 가능하게 합니다.
  • DORA (Weight Decomposed LoRA):
    • 원리: LoRA를 개선한 기법으로, 사전 학습된 가중치를 '크기(Magnitude)'와 '방향(Direction)' 요소로 분해하여 파인튜닝합니다. 특히 LoRA를 사용하여 방향 요소를 효율적으로 업데이트하며, 학습할 파라미터 수를 LoRA보다도 더 줄이면서 성능은 오히려 향상되는 경우가 많습니다.
  • 기타 PEFT 기법:
    • Adapter Layers: LLM의 기존 레이어 사이에 새로운 작은 신경망 모듈(어댑터)을 추가하고, 이 어댑터만 학습시키는 방식입니다.
    • Prefix Tuning: LLM의 입력 시퀀스나 각 트랜스포머 레이어에 학습 가능한 '접두사(Prefix)'를 추가하고, 이 접두사만 학습시키는 방식입니다.

3. RLHF (Reinforcement Learning from Human Feedback): 인간의 선호도를 학습하다

RLHF는 LLM이 인간의 지시를 더 잘 따르고, 유용하며, 안전한 답변을 생성하도록 돕는 고급 파인튜닝 방법론입니다. ChatGPT와 같은 대화형 AI 모델의 성공에 결정적인 역할을 했습니다.

  1. SFT (Supervised Fine Tuning) 모델 학습:
    • 가장 먼저, 인간 라벨러가 직접 생성한 고품질의 '프롬프트-답변' 쌍 데이터셋(일반적으로 1.2만~1.5만 개의 예시)으로 사전 학습된 LLM을 지도 학습(Supervised Learning) 방식으로 파인튜닝합니다. 이 모델을 SFT 모델이라고 합니다.
  2. 보상 모델 (Reward Model, RM) 학습:
    • SFT 모델이 동일한 프롬프트에 대해 여러 개의 다른 답변을 생성하면, 인간 라벨러가 이 답변들의 품질에 순위를 매깁니다.
    • 이렇게 순위가 매겨진 데이터셋(SFT 데이터셋의 약 10배 규모)을 활용하여, 인간의 선호도를 예측하는 별도의 '보상 모델(RM)'을 학습시킵니다. 보상 모델은 LLM의 답변에 대한 '점수'를 부여하는 역할을 합니다.
  3. 강화 학습 (Reinforcement Learning):
    • 학습된 보상 모델을 '피드백'으로 사용하여 SFT 모델을 강화 학습(Reinforcement Learning) 방식으로 추가 학습시킵니다.
    • PPO (Proximal Policy Optimization): 가장 널리 사용되는 강화 학습 알고리즘 중 하나입니다. PPO는 모델(정책)이 너무 급격하게 변화하는 것을 방지하면서 보상 모델이 부여하는 보상을 최대화하도록 학습합니다.
    • KL Loss (Kullback-Leibler Divergence): 강화 학습 과정에서 모델이 보상 모델이 주는 보상을 과도하게 추구하여 원래의 학습된 지식을 잊거나 이상한 답변을 생성하는 것을 방지하기 위해, SFT 모델의 초기 분포와의 KL 다이버전스를 최소화하는 항을 추가합니다. 이는 모델의 답변이 너무 '오버피팅'되지 않도록 균형을 잡아줍니다.
  • DPO (Direct Preference Optimization):
    • 원리: 전통적인 RLHF(PPO 기반)의 복잡성을 줄인 기법입니다. DPO는 보상 모델을 따로 학습할 필요 없이, 인간의 선호도 데이터를 직접 활용하여 LLM의 정책(policy)을 최적화합니다. 이는 RLHF 파이프라인을 단순화하고 안정성을 높입니다.
    • 효과: PPO와 유사하거나 더 나은 성능을 보이면서도 구현이 훨씬 간단하다는 장점이 있습니다.
  • RAFT (RAG + Fine Tuning):
    • RAG와 파인튜닝을 결합한 방법론입니다. 특정 도메인 데이터로 파인튜닝할 때, 정답 문서뿐만 아니라 '부정 샘플(negative documents)'도 함께 학습에 사용하여 LLM이 정확한 정보를 더 잘 구분하도록 돕습니다. 이는 LLM이 검색된 정보의 관련성을 더 잘 판단하게 합니다.

4. 대규모 모델 파인튜닝을 위한 분산 학습 (Distributed Learning)

수십억, 수천억 개의 파라미터를 가진 LLM을 파인튜닝하기 위해서는 단일 GPU로는 불가능하며, 여러 GPU와 서버를 활용하는 분산 학습 기술이 필수적입니다.

  • DeepSpeed: Microsoft에서 개발한 딥러닝 최적화 소프트웨어로, 대규모 모델 학습 및 추론을 위한 효율적인 방법을 제공합니다.
    • 모델/데이터/파이프라인 병렬화 (Model/Data/Pipeline Parallelism): 모델을 여러 장치에 분할하거나(모델 병렬화), 데이터를 분할하거나(데이터 병렬화), 모델의 계층을 여러 장치에 분할하여(파이프라인 병렬화) 학습을 가속화합니다.
    • 혼합 정밀도 학습 (Mixed Precision Training): FP32(32비트 부동소수점)와 FP16(16비트 부동소수점)을 혼합하여 사용하여 메모리 사용량을 줄이고 학습 속도를 높입니다.
  • ZeRO (Zero Redundancy Optimizer): DeepSpeed의 핵심 기술 중 하나로, 옵티마이저 상태, 기울기, 모델 파라미터 등을 여러 GPU에 분산 저장하여 메모리 중복을 제거함으로써, 1000억 개 이상의 파라미터를 가진 모델도 학습할 수 있게 합니다.
    • 단계별 최적화: ZeRO는 세 가지 레벨의 최적화를 제공합니다:
      • ZeRO-1: 옵티마이저 상태를 분산 저장.
      • ZeRO-2: 옵티마이저 상태와 기울기를 분산 저장.
      • ZeRO-3: 옵티마이저 상태, 기울기, 그리고 모델 파라미터까지 모두 분산 저장.
    • 효과: ZeRO는 GPU 메모리 사용량을 획기적으로 줄여, 훨씬 큰 모델을 학습하거나 동일한 하드웨어에서 더 큰 배치 크기로 학습할 수 있게 합니다.
  • FSDP (Fully Sharded Data Parallel): PyTorch에서 제공하는 분산 학습 기법으로, ZeRO-3와 유사하게 모델의 파라미터, 기울기, 옵티마이저 상태를 모든 GPU에 분산 저장하여 메모리 효율성을 극대화합니다. QLoRA와 FSDP를 함께 사용하는 것은 최신 LLM을 효율적으로 파인튜닝하는 강력한 조합입니다.

5. 임베딩 모델 파인튜닝: RAG 성능의 숨겨진 열쇠

LLM 자체뿐만 아니라, RAG 파이프라인의 핵심인 임베딩 모델 또한 특정 도메인이나 태스크에 맞춰 파인튜닝될 수 있습니다.

  • 목적: 임베딩 모델을 파인튜닝하면 특정 도메인의 질의와 문서 간의 의미론적 유사도를 더 정확하게 포착하여 검색 정확도를 크게 향상시킬 수 있습니다.
  • 성능 향상: 특히 임베딩 차원(Dimension)이 작을수록 파인튜닝을 통한 성능 향상 폭이 더 커지는 경향을 보입니다. 이는 작은 모델을 파인튜닝하여 큰 폭의 성능 개선을 얻을 수 있다는 의미입니다.
  • 방법론: Sentence Transformer와 같은 라이브러리를 활용하여 비교적 적은 양의 도메인 특화 데이터(예: 질의-문서 쌍)로 임베딩 모델을 파인튜닝합니다.