OPEN HYPER STEP
← 목록으로 (AI Orchestration)
AI-ORCHESTRATION · 57 / 59
ai-orchestration
CHAPTER 57 / 59
읽기 약 2
FUNCTION

파인튜닝 vs RAG: 언제 무엇을


핵심 개념

파인튜닝 필요 시 vs RAG로 충분 — 비용·품질·유지보수 비교 + LoRA/QLoRA 기초.

본문

결정 매트릭스

📋 코드 (10줄)
                    RAG               파인튜닝
적합한 경우         사실 기반 Q&A      특정 문체/톤·전문 도메인
                    자주 변경되는      반복 패턴이 명확
                    데이터              데이터 충분 (1000+)

비용                 낮음 ($0.1~10/mo)  높음 ($100~10000+)
업데이트            새 문서 추가만     재훈련 필요
품질                 검색 품질 의존    높지만 hallucination
유지보수            쉬움              어려움
구축 시간           1~7일              2주~3개월

RAG가 적합한 경우

PYTHON📋 코드 (7줄)
# ✅ 회사 문서 Q&A 봇
# - 매주 새 문서 추가
# - 정확한 출처 인용 필요
# - 비용 $5/mo로 충분

vectorstore.add_documents([new_policy_doc])
# 즉시 새 정책 반영

파인튜닝이 필요한 경우

PYTHON📋 코드 (14줄)
# ✅ 특정 톤의 카피 작성
# - "당사 브랜드 보이스로 항상 답변"
# - 1만 개 예시 데이터 보유
# - 일관된 출력 필수

# RAG로는 어려움 — 매번 컨텍스트로 보이스 가르쳐도 흔들림
# 파인튜닝하면 모델이 톤 자체를 학습


# ✅ 특수 도메인 (의료/법률 코드 생성)
# - 일반 LLM이 약한 영역
# - 데이터 충분 + 정확도 결정적

# RAG로 보강 가능하지만 파인튜닝이 더 정확

LoRA — Low-Rank Adaptation

📋 코드 (9줄)
일반 파인튜닝:
- 모델 전체 가중치 업데이트
- 70B 모델이면 280GB+ 메모리
- 비용 매우 높음

LoRA:
- 작은 어댑터 행렬만 학습 (전체의 0.1%)
- 8GB GPU에서도 가능
- 성능은 거의 동일
PYTHON📋 코드 (45줄)
# 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

PYTHON📋 코드 (16줄)
# 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 적용 — 위와 동일

의사결정 플로우차트

📋 코드 (17줄)
[새 LLM 기능 필요]
   ↓
[현재 LLM 기본 능력으로 충분?]
   ↓ Yes → 그대로 사용
   ↓ No
[정보 검색이 핵심 문제?]
   ↓ Yes → RAG
   ↓ No
[1만 개 이상 학습 데이터 보유?]
   ↓ No → RAG + 좋은 프롬프트
   ↓ Yes
[일관된 톤·스타일 핵심?]
   ↓ Yes → LoRA 파인튜닝
   ↓ No
[특수 작업 (코딩·요약·분류)?]
   ↓ Yes → 파인튜닝
   ↓ No → RAG로 충분

비용 비교 (월간, 1만 요청 기준)

📋 코드 (18줄)
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