Day 18: 파인튜닝 개념과 전략
사전학습된 LLM을 내 데이터와 용도에 맞게 조정하는 것이 파인튜닝입니다. 하지만 항상 파인튜닝이 정답은 아닙니다. 오늘은 언제, 어떤 방식으로 파인튜닝할지 판단하는 기준을 배웁니다.
프롬프팅 vs 파인튜닝 의사결정
파인튜닝 전에 먼저 프롬프트 엔지니어링으로 해결할 수 있는지 확인하세요. 다음 기준으로 판단합니다.
# 의사결정 트리를 코드로 표현
decision_tree = {
"현재 모델 + 프롬프트로 원하는 품질이 나오는가?": {
"예": "파인튜닝 불필요. 프롬프트 최적화에 집중",
"아니오": {
"Few-shot + RAG로 개선되는가?": {
"예": "RAG 파이프라인 구축 권장",
"아니오": {
"도메인 특화 지식이 필요한가?": {
"예": "파인튜닝 진행 (LoRA/QLoRA 권장)",
"아니오": {
"출력 형식/스타일 변경이 필요한가?": {
"예": "SFT(Supervised Fine-Tuning) 진행",
"아니오": "더 큰 모델로 교체 검토",
}
}
}
}
}
}
}
}
# 판단 기준 요약
criteria = [
("프롬프팅으로 충분", "일반적 질문, 간단한 형식 변환, 번역"),
("RAG가 적합", "최신 정보 필요, 사내 문서 기반 Q&A"),
("파인튜닝 필요", "도메인 전문 용어, 특정 출력 스타일, 일관된 페르소나"),
]
for method, usecase in criteria:
print(f"[{method}] {usecase}")
Full Fine-Tuning vs Parameter-Efficient Fine-Tuning
Full Fine-Tuning은 모든 파라미터를 업데이트합니다. 효과적이지만 GPU 메모리가 막대하게 필요합니다. PEFT(Parameter-Efficient Fine-Tuning)는 소수의 파라미터만 학습하여 비슷한 효과를 냅니다.
# 파인튜닝 방식별 비교표
comparison = {
"방식": ["Full FT", "LoRA", "QLoRA", "프롬프트 튜닝"],
"학습 파라미터": ["100%", "0.1~1%", "0.1~1%", "<0.01%"],
"GPU 메모리": ["7B=28GB+", "7B=16GB", "7B=6GB", "7B=16GB"],
"학습 속도": ["느림", "보통", "보통", "빠름"],
"성능": ["최고", "매우 좋음", "좋음", "제한적"],
"추천 상황": ["대규모 예산","일반 권장", "GPU 제한", "빠른 실험"],
}
# 표 출력
for key, values in comparison.items():
print(f"{key:12} | {' | '.join(values)}")
데이터 요구량 가이드
# 파인튜닝 태스크별 권장 데이터량
data_requirements = {
"텍스트 분류": {"최소": "500개", "권장": "2,000~5,000개", "설명": "클래스당 100개 이상"},
"감성 분석": {"최소": "1,000개", "권장": "5,000~10,000개", "설명": "라벨 균형 중요"},
"요약": {"최소": "1,000쌍", "권장": "5,000~20,000쌍", "설명": "원문-요약 쌍"},
"대화 (챗봇)": {"최소": "500대화", "권장": "3,000~10,000대화", "설명": "다양한 시나리오 포함"},
"도메인 적응": {"최소": "5,000개", "권장": "10,000~50,000개", "설명": "도메인 텍스트"},
"코드 생성": {"최소": "2,000쌍", "권장": "10,000~50,000쌍", "설명": "설명-코드 쌍"},
}
for task, info in data_requirements.items():
print(f"\n[{task}]")
print(f" 최소: {info['최소']}, 권장: {info['권장']}")
print(f" 참고: {info['설명']}")
핵심 원칙: 데이터의 양보다 질이 중요합니다. 잘 정제된 1,000개가 노이즈 섞인 10,000개보다 낫습니다. 파인튜닝 전에 반드시 데이터를 수작업으로 검수하세요.
파인튜닝 비용 추정
7B 모델 기준으로 LoRA 파인튜닝은 A100 1장에서 13시간이면 충분합니다. 클라우드 GPU(Lambda, RunPod 등) 비용은 시간당 13달러 수준이므로, 한 번의 학습에 5~10달러 정도를 예상하세요.
오늘의 연습문제
- 본인의 실무 태스크를 하나 정하고, 위 의사결정 트리를 따라가며 프롬프팅/RAG/파인튜닝 중 무엇이 적합한지 판단하고 그 이유를 작성해보세요.
- Hugging Face Hub에서 7B, 13B, 70B 모델의 파라미터 수와 모델 크기(GB)를 조사하고, Full FT/LoRA/QLoRA 각각에 필요한 GPU 메모리를 추정해보세요.
- 본인의 도메인(의료, 법률, 금융 등)에서 파인튜닝 데이터를 어떻게 수집할 수 있을지, 최소 3가지 데이터 소스를 조사하고 정리해보세요.