DPO Fine-tuning & vLLM

Jin·2025년 6월 2일

1. Fine-tuning이란?

  • 이미 학습된 대형 언어 모델(LLM)에 대해,
  • 내가 원하는 작업 / 스타일 / 분야에 맞게 추가로 학습시키는 것
  • 예를 들어:
    • 공손한 답변을 잘하게
    • 특정 도메인(법률, 의학 등)에 맞게
    • 특정 문체나 길이로 답변하도록

Fine-tuning이 필요한 이유

1️⃣ 범용 모델은 모든 걸 잘하진 않기 때문
=> 내 회사의 서비스, 특수한 말투, 특정 도메인 지식에는 부족할 수 있다.

2️⃣ 내가 원하는 방식으로 정확히 동작하게 하려면
=> " 나는 "공손한 응답"이 항상 필요해"," 나는 "답변을 짧게" 해줬으면 좋겠어" 같은 명확한 요구사항을 반영하려면, 파인튜닝이 필수이다.

그렇다면 그냥 프롬프트로 말투 바꾸고 스타일 조절하면 되는데 굳이 파인튜닝이 왜 필요할까? 라는 의문이 들 수 있다.


프롬프트만으로는 한계가 있는 이유

1️⃣ 일관성 부족
프롬프트를 써도 응답이 매번 다를 수 있고 , 프롬프트를 빼먹으면 말투나 방식이 흐트러진다.

2️⃣ 복잡한 작업에선 prompt만으로 부족
특정 형식(JSON, Markdown 등)으로 출력하길 원하거나 복잡한 규칙이나 조건을 내장시켜야 할 때는 그걸 매번 프롬프트로 다 쓰기엔 너무 길고 불안정하다.

3️⃣ 프롬프트는 지시사항일 뿐, 모델의 ‘성향’을 바꾸진 못함
프롬프트는 "지금만 이렇게 해줘"이고 , 파인튜닝은 "앞으로 계속 이렇게 해"라고 할 수 있다.

파인튜닝된 모델은 그냥 출력만 바꾼 게 아니라, 생각 방식(=파라미터)이 아예 바뀐다.


Fine-tuning 종류

분류 기준종류설명
적용 범위Full fine-tuning전체 파라미터를 모두 학습시킴 (비용 큼)
Partial fine-tuningLoRA 등으로 일부분만 학습 (효율적)
지도 여부Supervised Fine-tuning (SFT)정답 데이터를 기준으로 학습
Unsupervised Fine-tuning정답 없이 문장 생성 스타일 위주 학습

파인튜닝은 “어디를 얼마나 학습하느냐”와 “정답을 주느냐”로 나뉜다


2. LLM에서 Fine-tuning이 필요한 이유

  1. 원하는 스타일 / 답변 구조를 정확히 따라주지 않음
  2. 도메인 지식이 부족한 경우 존재 (예: 법률, 의료)
  3. 회사/브랜드/서비스마다 말투나 응답 전략이 다름
  4. Retrieval-Augmented Generation (RAG)만으로는 부족할 수 있음
  5. 사소한 설정 차이로 일관되지 않은 결과 발생

3. DPO (Direct Preference Optimization)

개념 요약

두 개의 답변(chosen vs rejected)을 비교하여
좋은 답변을 더 높은 확률로 선택하도록 훈련

  • 보상모델 없이 비교(pairwise feedback)만으로 학습
  • 복잡한 강화학습(PPO) 대신 간단한 수식 적용
  • 안정적이며 빠르게 선호 반영 가능

4. DPO 학습 파이프라인

1️⃣ 문제 만들기 (make_problem.py)

  • 백준 스타일로 문제 + 정답 코드 생성

2️⃣ 질문 만들기 (make_question.py)

  • 실수한 학생 질문 구성
      1. 틀린 이유
      1. 질문
      1. 잘못된 코드
      1. 에러 메시지
      1. 오답 출력 예시

3️⃣ 질문 검증 (verify_question.py)

  • GPT가 질문을 스스로 검토하고 문제와 안 맞으면 수정

4️⃣ DPO 쌍 생성 (make_dataset.py)

  • GPT에게 틀린 설명 (rejected)
  • 이후 “다시 설명해줘” → 정답 설명 (chosen)
  • → DPO용 데이터셋 생성
{
  "prompt": "학생 질문 내용",
  "chosen": "정확한 설명",
  "rejected": "틀린 설명"
}

5️⃣ 쌍 검증 (verify_dataset.py)

  • chosen과 rejected가 역할을 잘 수행했는지 평가
  • 틀리면 다시 생성 (_revised.md로 저장)

5. vLLM이란?

GPT 모델을 OpenAI API처럼 빠르게 서빙하는 고속 추론 엔진

  • 메모리 효율적으로 수백 명의 요청 처리 가능
  • LoRA 파인튜닝 모델도 사용 가능
  • DPO 학습 모델을 실시간 챗봇 API로 제공 가능

6. 전체 흐름 요약

[ 문제 생성 ]
     ↓
[ 질문 생성 ]
     ↓
[ 틀린 답변 → 정답 답변 생성 ]
     ↓
[ prompt / chosen / rejected 저장 ]
     ↓
[ DPO 학습 → 파인튜닝된 모델 ]
     ↓
[ vLLM으로 API처럼 서빙 ]

정리

DPO는 좋은 답변 vs 나쁜 답변을 비교해서
"사람 선호"를 직접 반영할 수 있는 간단하고 강력한 파인튜닝 방법이다.

→ vLLM을 활용하면 이 모델을 빠르게 서비스로 제공할 수 있다.

profile
develop을 꿈꾸는

0개의 댓글