오늘 끝나면
Fine-tuning & RAG
- ✓Fine-tuning & RAG의 핵심 문제를 한 문장으로 설명한다
- ✓오른쪽 실습에서 Fine이 어떻게 움직이는지 관찰한다
- ✓다음 강의와 이어지는 한계를 말할 수 있다
실습 미션
LoRA·QLoRA·RAG — 기업 도입 수요 최고 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.
성공 조건
- □실습의 기본값을 먼저 관찰
- □입력값이나 모드를 한 번 이상 바꿔 결과 비교
- □왜 결과가 바뀌었는지 한 문장으로 설명
AI · Day 21 / 실무
모델에 지식을
넣는 두 가지 길
범용 LLM을 "우리 회사의 뇌"로 만드는 길은 둘임.
Fine-tuning(LoRA·QLoRA)은 가중치를 바꾸는 것.
RAG는 모델 밖 지식을 검색해 넣는 것.
오늘은 둘 다 바닥부터 조립함. 뭘 제안할지 고르는 프레임까지 챙김.
회사 규정을 모르는 GPT
한 금융사가 사내 챗봇을 GPT-4로 만듦.
첫날 임원이 물음. "우리 퇴직연금 DC형 수수료 얼마지?"
GPT가 존재하지 않는 수수료율을 자신만만하게 답함.
챗봇은 그날로 신뢰 잃음.
이유는 단순함. 모델이 그 회사 규정을 배운 적이 없음.
범용 LLM엔 치명적 한계 셋임.
도메인 용어 모름.
학습 컷오프 이후 모름.
모르면 그럴싸하게 지어냄.
왜 지어냄?
LLM은 P(다음 토큰 | 앞 토큰)만 최대화함.
사실을 검증하는 회로가 없음.
학습 분포를 따라갈 뿐 진실의 분포는 안 따름.
그래서 해법도 두 갈래임.
가중치에 박아넣기(Fine-tuning).
생성 시점에 주입하기(RAG).
Q. 가장 먼저 던져야 할 의사결정 질문은?
"이건 스타일 문제임, 지식문제임?" 톤·포맷·JSON 출력 같은 형식이면 Fine-tuning. 최신 정보·사내 문서·사실 정확도면 RAG. 둘 다면 Hybrid.세 한계의 해법 = 가중치에 박음(FT) 또는 생성 때 주입함(RAG)
LoRA — 100배 싸게 튜닝
2020년, GPT-3(175B) 나옴.
기업들 "우리 도메인에 맞게 튜닝하자"며 들썩임.
근데 현실은 A100 80GB 16장에 수천만 원. 거의 불가능이었음.
2021년, Microsoft가 던진 통찰은 한 줄임.
"학습으로 생기는 가중치 변화 ΔW는 본래 저차원이다."
그래서 거대한 W는 통째로 얼림.
작은 두 행렬의 곱으로 변화만 학습함. W' = W + B·A.
A는 가우시안, B는 0으로 초기화함.
그래서 처음엔 모델이 그대로임.
숫자로 보면 충격적임.
d=k=4096, r=8이면 Full은 1,677만 개를 학습함.
근데 LoRA는 65,536개뿐. 약 256배, 즉 0.39%만 건드림.
그래도 성능은 거의 같음.
실제로 대기업 HR 챗봇 견적이 1억 2천만 원이었음.
LoRA로 1,200만 원까지 떨어진 적 있음.
거대한 W는 얼림, 작은 B·A만 학습함 — 0.39%로 거의 같은 성능
QLoRA — GPU 한 장의 시대
2023년 5월, Tim Dettmers의 QLoRA 논문이 커뮤니티를 뒤집음.
"LLaMA 65B를 A6000 48GB 한 장에서 튜닝 가능."
전엔 최소 8장 필요했던 일임.
비결은 셋임.
4bit NF4는 정규분포 분위수에 16레벨을 배치하는 것.
신경망 가중치가 정규분포 모양이라, 균등 int4보다 손실이 적음.
Double Quantization은 양자화 스케일 값마저 다시 양자화하는 것.
Paged Optimizer는 메모리가 튈 때만 CPU로 페이징하는 것.
이걸로 OOM을 막음.
결과적으로 7B 튜닝 VRAM이 약 120GB에서 약 15GB로 내려감.
RTX 3090·4090 같은 소비자급 한 장이면 충분함.
클라우드를 못 쓰는 금융·공공도 이제 서버룸 GPU 한두 장으로 자체 LLM을 가질 수 있게 됨.
파이썬 코드 보기
# QLoRA 핵심 세팅 (bitsandbytes)
cfg = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4", # 정규분포 4bit
bnb_4bit_use_double_quant=True, # 스케일도 양자화
bnb_4bit_compute_dtype="bfloat16",
)
# optim="paged_adamw_8bit" -> gradient spike만 페이징| 7B 메모리 | Full | LoRA | QLoRA |
|---|---|---|---|
| Base Model | 28GB | 14GB | 4GB |
| Gradients | 28GB | 0.2GB | 0.2GB |
| Optimizer | 56GB | 0.4GB | 0.4GB |
| Activations | 10GB | 10GB | 10GB |
| 합계 | 약 120 | 약 25 | 약 15 |
RTX 3090·4090(24GB) 한 장으로 7B 튜닝됨 — 단일 GPU의 시대
RAG — 외우지 말고 찾게 하자
2020년, Meta의 Patrick Lewis 팀이 발상을 뒤집음.
"모델이 다 외우게 하지 말고, 필요할 때 찾아보게 하자."
사람이 검색하고 요약하듯 LLM에 retrieval 단계를 붙인 거임.
파이프라인은 이렇게 흐름.
문서를 잘게 자름(Chunking).
벡터로 임베딩해 Vector DB에 넣음.
질문이 오면 코사인 유사도로 후보를 검색(Retrieval)함.
Reranker로 정밀하게 추림.
그 근거만 넣어 LLM이 답함.
그래서 환각 줄고, 최신성 생기고, 근거(citation)까지 붙음.
RAG 품질의 80%는 Chunking과 Reranking에서 나옴.
모델 바꾸기 전에 이 둘부터 튜닝할 것.
Retrieval은 Recall 위해 느슨하게 top-20 뽑음.
Reranker가 Precision 위해 top-3로 좁힘.
이 분업이 정석임. Reranker만 더해도 faithfulness가 10~20%p 오름.
Q. exact match가 중요할 땐 무엇을 더하나요?
제품 코드·사번·법조문 번호처럼 정확한 토큰이 핵심이면 Hybrid Search(BM25 키워드 + Vector 의미)가 Vector 단독보다 월등함.언제 무엇을 쓰나 — 황금률
황금률 한 줄.
"Fine-tuning은 모델의 성격을, RAG는 모델의 기억을 바꾼다."
성격은 자주 바꿀 일 아님. 근데 기억은 매일 업데이트됨.
그래서 대부분의 엔터프라이즈 프로젝트는 RAG로 시작함.
문서가 자주 바뀌는 사내 FAQ는 RAG.
브랜드 톤을 강제하는 마케팅 카피는 LoRA.
최신 판례 반영하며 법무 톤도 지켜야 하면 Hybrid.
클라우드를 못 쓰는 보안 극강 환경이면 QLoRA 온프렘 + 로컬 RAG.
마지막으로 "감"이 아니라 지표로 평가할 것.
Ragas의 세 숫자가 의사결정을 만듦.
faithfulness는 환각 여부.
context_precision은 검색 적절성.
context_recall은 누락 여부.
Q. LLaMA-2 7B를 RTX 3090(24GB) 한 장에서 튜닝하려면?
QLoRA(NF4 4bit + LoRA r=16 + paged AdamW 8bit). 예상 VRAM은 약 10~15GB. batch size 2에 grad accumulation 4 정도 권함.| 요구 | FT | RAG | Hybrid |
|---|---|---|---|
| 최신 정보 | ✕ | ○ | ○ |
| 환각 감소 | △ | ○ | ◎ |
| 말투·포맷 | ◎ | ✕ | ○ |
| 도메인 용어 | ○ | △ | ○ |
| 구축 비용 | 중 | 저 | 중 |
| 업데이트 | 몇 주 | 즉시 | 즉시 |
성격은 FT, 기억은 RAG — 대부분 RAG로 시작함, 필요하면 LoRA 얹음