ai-orchestration
CHAPTER 57 / 59
읽기 약 2분
FUNCTION
파인튜닝 vs RAG: 언제 무엇을
핵심 개념
파인튜닝 필요 시 vs RAG로 충분 — 비용·품질·유지보수 비교 + LoRA/QLoRA 기초.
본문
결정 매트릭스
RAG 파인튜닝
적합한 경우 사실 기반 Q&A 특정 문체/톤·전문 도메인
자주 변경되는 반복 패턴이 명확
데이터 데이터 충분 (1000+)
비용 낮음 ($0.1~10/mo) 높음 ($100~10000+)
업데이트 새 문서 추가만 재훈련 필요
품질 검색 품질 의존 높지만 hallucination
유지보수 쉬움 어려움
구축 시간 1~7일 2주~3개월RAG가 적합한 경우
# ✅ 회사 문서 Q&A 봇
# - 매주 새 문서 추가
# - 정확한 출처 인용 필요
# - 비용 $5/mo로 충분
vectorstore.add_documents([new_policy_doc])
# 즉시 새 정책 반영파인튜닝이 필요한 경우
# ✅ 특정 톤의 카피 작성
# - "당사 브랜드 보이스로 항상 답변"
# - 1만 개 예시 데이터 보유
# - 일관된 출력 필수
# RAG로는 어려움 — 매번 컨텍스트로 보이스 가르쳐도 흔들림
# 파인튜닝하면 모델이 톤 자체를 학습
# ✅ 특수 도메인 (의료/법률 코드 생성)
# - 일반 LLM이 약한 영역
# - 데이터 충분 + 정확도 결정적
# RAG로 보강 가능하지만 파인튜닝이 더 정확LoRA — Low-Rank Adaptation
일반 파인튜닝:
- 모델 전체 가중치 업데이트
- 70B 모델이면 280GB+ 메모리
- 비용 매우 높음
LoRA:
- 작은 어댑터 행렬만 학습 (전체의 0.1%)
- 8GB GPU에서도 가능
- 성능은 거의 동일# pip install peft transformers accelerate
from transformers import AutoModelForCausalLM, AutoTokenizer
from peft import LoraConfig, get_peft_model
# 1. 베이스 모델 로드
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-3.2-3B",
torch_dtype=torch.float16,
device_map="auto",
)
tokenizer = AutoTokenizer.from_pretrained("meta-llama/Llama-3.2-3B")
# 2. LoRA 설정
config = LoraConfig(
r=8, # rank — 4~32
lora_alpha=32,
target_modules=["q_proj", "v_proj"],
lora_dropout=0.1,
bias="none",
task_type="CAUSAL_LM",
)
model = get_peft_model(model, config)
model.print_trainable_parameters()
# trainable params: 2,097,152 (0.07% of total)
# 3. 학습 (Trainer로)
from transformers import TrainingArguments, Trainer
args = TrainingArguments(
output_dir="./lora-out",
num_train_epochs=3,
per_device_train_batch_size=4,
learning_rate=2e-4,
save_steps=500,
)
trainer = Trainer(model=model, args=args, train_dataset=ds)
trainer.train()
# 4. 어댑터 저장 (수십 MB)
model.save_pretrained("./my-adapter")QLoRA — 양자화 + LoRA
# 4비트 양자화 + LoRA → 7B 모델을 8GB GPU에서
from transformers import BitsAndBytesConfig
bnb_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_compute_dtype=torch.bfloat16,
bnb_4bit_use_double_quant=True,
)
model = AutoModelForCausalLM.from_pretrained(
"meta-llama/Llama-3.2-7B",
quantization_config=bnb_config,
device_map="auto",
)
# 이후 LoRA 적용 — 위와 동일의사결정 플로우차트
[새 LLM 기능 필요]
↓
[현재 LLM 기본 능력으로 충분?]
↓ Yes → 그대로 사용
↓ No
[정보 검색이 핵심 문제?]
↓ Yes → RAG
↓ No
[1만 개 이상 학습 데이터 보유?]
↓ No → RAG + 좋은 프롬프트
↓ Yes
[일관된 톤·스타일 핵심?]
↓ Yes → LoRA 파인튜닝
↓ No
[특수 작업 (코딩·요약·분류)?]
↓ Yes → 파인튜닝
↓ No → RAG로 충분비용 비교 (월간, 1만 요청 기준)
RAG (Claude Sonnet + Pinecone):
- LLM: 1만 × $0.005 = $50
- 벡터 DB: $70
- 총: $120/mo
파인튜닝 후 자체 호스팅 (Llama-3.2-7B):
- GPU 서버: $400/mo (RunPod)
- 학습: 1회 $50 (LoRA)
- 총: $450/mo (단, 처리량 무한)
파인튜닝 OpenAI:
- gpt-4o-mini fine-tuning: $25/1M tokens
- 추론: $3/1M input tokens
- 총: 사용량에 따라 $50~500/mo
→ 1만 req 이하: RAG가 저렴
→ 100만 req 이상: 파인튜닝이 저렴 (자체 호스팅)다음 챕터
CH.9 "프로덕션 배포: Docker + FastAPI + LangServe" — AI 서비스 배포 표준.
AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
무료 모델
Gemini 2.5 Flash(무료) + Claude Sonnet 4.6(무료) + Grok 4.1(무료)
무료 Llama 모델 + 무료 GPU(Colab)로 첫 LoRA 파인튜닝 가이드를 비용 0원으로 알려줘.
소자본 모델
Claude API + Cursor $20/mo + Make.com — 월 10~30만원
Claude API + RAG + Cursor로 30일 안에 실용 챗봇 출시하는 패턴을 알려줘.
프로덕션 모델
Claude Opus + CrewAI + LangGraph — 월 100만원+
프로덕션 LoRA 파인튜닝 + 자체 호스팅 + A/B 테스트 통합한 LLMOps 아키텍처를 설계해줘.
스택 프롬프트
0원→$20/mo→$100/mo 단계별 스택 비교
RAG 단독 → RAG + few-shot → RAG + LoRA 단계별 비용/품질/유지보수를 비교해줘.
⭐ 이것만 기억하세요
파인튜닝 vs RAG: 언제 무엇을은 이 3가지만 확실히 잡으세요
1.RAG는 자주 변경되는 사실 데이터, 파인튜닝은 톤·스타일·특수 작업
2.LoRA/QLoRA로 8GB GPU에서도 7B 모델 파인튜닝 가능 — 풀 파인튜닝 대비 비용 1/100
3.다음 챕터 CH.9에서 프로덕션 배포 — Docker + FastAPI + LangServe
공유하기
진행도 57 / 59