이미 학습된 모델을 내 데이터로 한 번 더 학습시켜 매번 길게 설명하지 않아도 원하는 형식·말투·판단 기준대로 답하게 만드는 방법이다. 최신 정보는 RAG에 맡기고, 프롬프트나 RAG로도 일관된 톤과 도메인 감각이 안 잡힐 때 마지막 카드로 쓴다.
| 원하는 것 | 맞는 방법 |
|---|---|
| 최신 정보, 사내 문서 내용 | RAG |
| 정해진 형식, 말투, 도메인 감각 | 파인튜닝 |
| 둘 다 | 함께 쓴다 |
데이터를 모으고 다듬는 데 손이 많이 들고, 원본 모델이 새 버전으로 바뀌면 다시 학습해야 한다. 그래서 아래 순서대로 시도해 보고, 마지막 단계에서도 부족할 때 쓴다.
| 순서 | 먼저 해 볼 것 |
|---|---|
| 1 | 프롬프트 다듬기 |
| 2 | 예시 몇 개를 프롬프트에 넣기 (퓨샷) |
| 3 | RAG로 문서 붙이기 |
| 4 | 그래도 형식·톤이 부족하고, 좋은 예시를 수백~수천 건 만들 수 있으면 파인튜닝 |
작은 오픈 모델을 파인튜닝해 대형 모델 API를 대신하면 속도와 비용을 줄이고 데이터도 직접 쥘 수 있다. 실제로 파인튜닝을 고르는 가장 흔한 이유다.
재료는 질문과 이상적인 답을 짝지은 예시를 한 줄씩 담은 JSONL 파일이다. 모델이 이 답을 흉내 내도록 학습시키는 단계를 지도 파인튜닝(SFT)이라 부른다. 예전엔 모델 전체를 다시 학습해야 해서 GPU가 여러 장 필요했지만, 지금은 원본은 그대로 두고 작은 부품만 학습하는 방식이 표준이 됐다.
| 방식 | 특징 | 필요 장비 |
|---|---|---|
| 전체 학습 | 모델 전체를 다시 학습 | 비싼 GPU 여러 장 |
| LoRA | 작은 보조 부품만 학습, 성능은 거의 같음 | 훨씬 적음 |
| QLoRA | LoRA + 원본 모델 압축 | 24GB GPU 한 장으로 7~8B 모델 |
직접 돌리려면 Hugging Face의 peft나 Unsloth를 쓰고, 인프라 관리가 부담이면 OpenAI 등의 관리형 파인튜닝에 JSONL 파일만 올리면 된다.
SFT는 정답을 따라 하게 할 뿐, 좋은 답과 아쉬운 답의 미묘한 차이까지는 가르치기 어렵다. 이럴 땐 SFT 뒤에 같은 질문의 두 답 중 어느 쪽이 나은지 표시한 데이터로 DPO를 돌린다. 파인튜닝과 거의 같은 코드로 돌릴 수 있어 개인 프로젝트에서도 쓰기 쉽다. 수학·코드처럼 정답을 자동 채점할 수 있다면 채점 결과로 강화학습(RLVR)까지 갈 수 있다.
좁은 데이터만 집중해서 학습시키면 원래 잘하던 상식이나 추론 능력이 흐려질 수 있다(파괴적 망각). 특화 데이터에 일반 예시를 섞고, 학습 뒤엔 평가 세트로 기존 실력을 함께 확인한다.
성능이 이유 없이 떨어졌다면 먼저 채팅 템플릿을 본다. 학습 때와 실제 서비스할 때 역할 표기나 특수 토큰이 다르면 파인튜닝이 실패한 것처럼 보인다.
가장 흔한 방식은 반복되는 좁은 작업을 작은 모델에 학습시켜 대형 모델 API 대신 쓰는 것이다. 매번 긴 프롬프트로 규칙을 설명하던 일을 학습된 모델이 알아서 따르게 된다.
| 어디서 | 어떻게 쓰나 |
|---|---|
| 분류·추출 자동화 | 문의 분류, 문서에서 항목 뽑기처럼 대량 작업을 작은 모델로 빠르고 싸게 처리 |
| 정해진 출력 형식 | JSON이나 보고서 양식을 매번 똑같이 지키도록 예시 수백 건으로 학습 |
| 고객 응대 챗봇 | 회사 말투와 응대 기준을 학습시키고, 최신 안내 내용은 RAG로 붙인다 |
| 사내·로컬 모델 | 데이터를 밖으로 내보내기 어려울 때 오픈 모델을 QLoRA로 직접 학습해 내부에서 돌린다 |