모델 커스터마이징
파운데이션 모델을 도메인에 맞게 커스터마이징하는 전략
모델 커스터마이징
CPT · SFT · DPO · GRPO · Distillation · Bedrock Fine-tuning
범용 모델을 도메인 전문가로 바꾸는 5가지 방법
파운데이션 모델의 한계 극복 — 프롬프트로 안 되면 가중치를 바꾼다
커스터마이징 개요
파운데이션 모델 한계 · 5가지 기법 · 의사결정 흐름
커스터마이징
파운데이션 모델의 한계와 5가지 대응 기법
프롬프트로 안 되면 가중치를 바꾼다
범용 파운데이션 모델의 4대 한계를 5가지 기법으로 넘습니다 — 항상 비용이 낮은 방법부터 시도합니다.
- 프롬프트 엔지니어링 — 비용 $0 · 대부분의 유스케이스 해결
- RAG — 인프라 비용 · 환각 대폭 감소
- SFT — GPU 시간 · 태스크 특화
- DPO/GRPO — 선호·보상 정렬
- CPT — 클러스터 · 최후 수단
대부분은 프롬프트 엔지니어링 + RAG로 충분합니다 — 안 될 때만 가중치를 건드립니다.
파운데이션 모델의 4대 한계
범용 모델이 프로덕션에서 부딪히는 근본적 문제
도메인 전문성 부족
의료·법률·금융 특수 용어와 추론 패턴을 학습하지 못함
환각 (Hallucination)
사내 전용 데이터·최신 정보 미반영 → 그럴듯한 오답 생성
지시 수행 불일치
특정 포맷(JSON, SQL)·응답 톤·길이 제어가 불안정
비용 비효율
단순 반복 태스크에 대형 모델 호출 → 과잉 비용
5가지 기법 스펙트럼
비용이 낮은 순서대로 시도 — 대부분은 프롬프트 엔지니어링 + RAG로 충분
의사결정 흐름
항상 비용이 낮은 방법부터 시도
-
1
프롬프트로 해결?
프롬프트 최적화 (DSPy/GEPA) — GEPA는 GRPO를 평균 6%·최대 20% 능가 (ICLR 2026)
-
2
RAG로 해결?
검색으로 최신/도메인 정보 주입 — 대부분의 환각 문제 해결
-
3
포맷/톤 필요?
SFT — 1K~10K 데이터로 응답 형식 각인
-
4
안전성/정렬?
DPO/GRPO — 선호 쌍 또는 검증 가능 보상으로 정렬
-
5
도메인 지식?
CPT — 수십억 토큰 비레이블 코퍼스, 최후 수단
질문 다섯 개를 비용 순서대로 던집니다 — 앞 단계에서 해결되면 거기서 멈춥니다.
SFT와 LoRA
Instruction Tuning · LoRA/QLoRA · Bedrock Fine-tuning
SFT와 LoRA
행동을 각인하는 가장 표준적인 경로
행동을 각인한다
Instruction-Response 쌍으로 응답 형식과 태스크를 학습시킵니다 — LoRA가 단일 GPU 학습을 가능하게 만듭니다.
- SFT — Instruction-Response 쌍 1K~10K
- LoRA/QLoRA — 전체 가중치의 0.1~1%만 학습
- 단일 GPU — H100 수 시간
- Bedrock Fine-tuning — 관리형 SFT
학습 파라미터를 0.1~1%로 줄여도 성능은 Full의 95~99% — LoRA가 SFT의 기본값이 된 이유입니다.
SFT 동작 원리
Instruction-Response 쌍으로 모델의 행동을 각인
-
1
데이터 준비
(Instruction, Response) 쌍 1K~10K 고품질 샘플 — JSONL 포맷
-
2
LoRA 적용
전체 가중치의 0.1~1%만 학습 — rank 16~64, 메모리 대폭 절감
-
3
학습
단일 GPU(H100) 수 시간 — 에포크 1~3, lr 1e-5~5e-5
-
4
평가
홀드아웃 세트에서 정확도·포맷 일치율 측정 → 배포 결정
데이터 준비 → LoRA 적용 → 학습 → 평가 — 홀드아웃 평가를 통과해야 배포로 넘어갑니다.
Full FT vs LoRA vs QLoRA
파라미터 효율적 학습으로 비용을 대폭 절감 — 표의 메모리·시간은 규모 가늠용 예시
| 기법 | 학습 파라미터 | GPU 메모리 | 학습 시간 | 성능 |
|---|---|---|---|---|
| Full Fine-Tuning | 100% (전체) | 8× GPU | 수 일 | ★★★ 최고 |
| LoRA | 0.1~1% | 1× GPU | 수 시간 | ★★★ Full의 95~99% |
| QLoRA | 0.1~1% (4bit 양자화) | 1× GPU (더 작은) | 수 시간 | ★★☆ Full의 90~95% |
현 시점 권장: QLoRA SFT on unsloth — 단일 H100에서 7B~70B 모델 학습이 가능합니다.
SFT 데이터 포맷
Bedrock Fine-tuning이 요구하는 JSONL 형식
{"system": "AWS 비용 분석 전문가. JSON으로 답변.",
"messages": [
{"role": "user", "content": "지난달 EC2 비용 알려줘"},
{"role": "assistant", "content": "{\"service\": \"EC2\", \"cost\": 1234.56, \"change\": \"+12%\"}"}
]}
{"system": "AWS 비용 분석 전문가. JSON으로 답변.",
"messages": [
{"role": "user", "content": "S3 비용 추이 보여줘"},
{"role": "assistant", "content": "{\"service\": \"S3\", \"cost\": 89.12, \"change\": \"-3%\"}"}
]}
Bedrock Fine-tuning API
CreateModelCustomizationJob — S3에 데이터 올리고 API 한 번 호출
import boto3
# ① 컨트롤 플레인 "bedrock" 클라이언트로 잡 생성 (bedrock-runtime 아님)
client = boto3.client("bedrock", region_name="us-east-1")
response = client.create_model_customization_job(
jobName="cost-analyst-sft",
customModelName="cost-analyst-v1",
roleArn="arn:aws:iam::123456789012:role/BedrockFTRole",
# ② 베이스 모델 + 커스터마이징 유형 선택
baseModelIdentifier="amazon.nova-pro-v1:0",
customizationType="FINE_TUNING",
# ③ 학습 데이터(JSONL)와 출력 경로는 S3 URI — roleArn에 접근 권한 필요
trainingDataConfig={
"s3Uri": "s3://my-bucket/training.jsonl"
},
outputDataConfig={
"s3Uri": "s3://my-bucket/output/"
},
# ④ 하이퍼파라미터는 모두 문자열로 전달
hyperParameters={
"epochCount": "3",
"learningRate": "0.00001",
},
)
- boto3.client("bedrock") — 잡 생성은 컨트롤 플레인, 추론(bedrock-runtime)과 다른 클라이언트
- customizationType="FINE_TUNING" — SFT 지정, baseModelIdentifier로 베이스 모델 선택
- trainingDataConfig / outputDataConfig — JSONL과 산출물 모두 S3 URI, roleArn이 접근 권한 보유
- hyperParameters — 전부 문자열로 전달 (Nova는 epochCount 1~5 · learningRate 1e-6~1e-4)
Bedrock Fine-tuning 옵션
관리형 학습 · Nova Forge · RFT
관리형
S3에 JSONL 업로드 → CreateModelCustomizationJob → 완료 시 On-Demand 호출
Nova 모델 지원
Nova 2 Pro (Preview)/Lite + Nova Forge SDK — SFT·Reinforcement fine-tuning·Distillation 지원
RFT (강화 미세조정)
검증 가능한 보상으로 자가 개선 — Nova 2 Lite·gpt-oss-20B·Qwen3 32B 지원
Alignment
RLHF → DPO → GRPO · 선호 데이터 · 검증 가능 보상
Alignment
보상 모델을 지워온 정렬의 역사
정렬은 점점 단순해진다
보상 모델을 단계적으로 제거하며 정렬 기법이 단순해져 왔습니다 — 대부분의 정렬은 DPO가 권장입니다.
- RLHF — 보상 모델 + PPO (2022)
- DPO — chosen/rejected 쌍만 (2023)
- GRPO/RFT — 검증 가능 보상 (2025)
- Multi-turn RL — 에이전트 시퀀스 보상 (2026)
순서가 중요합니다 — SFT로 형식을 먼저 잡고, 그 위에 DPO로 품질·안전성을 정렬합니다.
Alignment 진화
보상 모델을 단계적으로 제거하며 단순화
DPO — 실전 적용
chosen/rejected 쌍 5K~50K로 인간 선호에 정렬
데이터 포맷
- 각 샘플 = (prompt, chosen, rejected)
- chosen: 인간이 선호하는 응답
- rejected: 비선호 응답 (환각, 유해, 부정확)
- 5K~50K 쌍이면 효과적
SFT → DPO 레이어링
- 1단계: SFT로 태스크 형식 학습
- 2단계: DPO로 품질·안전성 정렬
- SFT 없이 DPO만 하면 성능 하락
- 순서 중요 — 반드시 SFT 먼저
SFT 없이 DPO만 적용하면 성능이 하락합니다 — 반드시 SFT → DPO 순서를 지킵니다.
RLHF vs DPO vs GRPO
상황에 맞는 정렬 기법 선택
| 기법 | 필요 데이터 | 보상 모델 | 안정성 | 적합 상황 |
|---|---|---|---|---|
| RLHF (PPO) | 선호 쌍 + 보상 모델 | ✓ 필요 | 낮음 (불안정) | 대규모 범용 모델 정렬 |
| DPO | chosen/rejected 쌍만 | ✗ 불필요 | 높음 | 대부분의 정렬 — 권장 |
| GRPO/RFT | 검증 가능 보상 함수 | ✗ 불필요 | 높음 | 수학·코드·논리 태스크 |
| Multi-turn RL | 에이전트 환경 보상 | ✗ 불필요 | 중간 | 에이전트 워크플로우 최적화 |
대부분의 정렬은 DPO로 충분합니다 — 수학·코드처럼 정답이 검증 가능한 태스크라면 GRPO/RFT가 적합합니다.
CPT와 Distillation
Continued Pre-Training · Knowledge Distillation · Bedrock 관리형
CPT와 Distillation
지식을 넣는 기법과 비용을 줄이는 기법
지식을 넣거나, 비용을 줄이거나
CPT는 수십억 토큰 비레이블 코퍼스로 도메인 지식을 확장하고, Distillation은 Teacher의 지식을 소형 Student로 압축합니다.
- CPT — 비레이블 코퍼스 · 지식 확장 · 가장 비용 높음
- Distillation — Teacher→Student 전이
- Bedrock Model Distillation — 관리형 자동 합성·학습·배포
CPT는 지식을 넣는 기법, Distillation은 비용을 줄이는 기법입니다 — 목표가 정반대이니 혼동하지 않습니다.
CPT (Continued Pre-Training)
수십억 토큰 비레이블 코퍼스로 모델의 도메인 지식을 확장
SFT
행동을 가르침
- 레이블 데이터 (Instruction→Response)
- 1K~10K 샘플
- "이렇게 답해" 패턴 학습
- 비용: GPU 시간
SFT는 모델에게 "어떻게 행동할지"를 가르칩니다. 기존 지식 위에 행동 양식을 입히는 것.
CPT
지식을 넣음
- 비레이블 코퍼스 (도메인 문서 그대로)
- 수십억~수천억 토큰
- 도메인 언어·개념 자체를 학습
- 비용: GPU 클러스터
CPT는 모델의 "알고 있는 것"을 확장합니다. 의료 논문, 법률 문서 등 도메인 지식을 가중치에 각인.
SFT는 "어떻게 답할지"를, CPT는 "무엇을 아는지"를 바꿉니다 — 도메인 지식 자체가 부족할 때만 CPT로 갑니다.
Knowledge Distillation
Teacher(대형) → Student(소형) — 성능 유지 · 비용 절감
-
1
Teacher 선택
대형 모델(Nova Premier, Llama 3.1 405B 등)이 고품질 응답 생성 — Bedrock은 동일 프로바이더 페어링만
-
2
합성 데이터 생성
Teacher가 도메인 질문에 대한 응답 수만~수십만 건 생성
-
3
Student 학습
소형 모델(Nova Lite·Micro 등)을 Teacher 응답으로 SFT
-
4
배포
Student 모델로 프로덕션 서빙 — 비용 최대 75% 절감 (AWS 공식, 정확도 손실 2% 미만)
Amazon Bedrock Model Distillation을 쓰면 Teacher 선택만으로 합성·학습·배포가 관리형으로 진행됩니다.
의사결정과 파이프라인
데이터 규모 · 비용 구조 · 파이프라인 자동화
의사결정과 파이프라인
데이터·비용·자동화 세 축
데이터와 비용이 기법을 고른다
기법별 데이터 규모와 비용 구조를 표로 잡고, SageMaker AI 파이프라인 자동화로 마무리합니다.
- 데이터 규모 — SFT 1K~10K · DPO 5K~50K · CPT 1B+ 토큰
- 비용 순서 — 프롬프트 엔지니어링 → RAG → SFT → DPO/GRPO → CPT
- SageMaker AI — 학습→평가→배포 자동화
기법 선택의 첫 질문은 데이터입니다 — 필요한 규모와 형식을 갖췄는지부터 확인합니다.
데이터 규모 가이드
기법별 필요 데이터 양과 형식
| 기법 | 데이터 유형 | 최소 규모 | 권장 규모 | 형식 |
|---|---|---|---|---|
| SFT | (Instruction, Response) 쌍 | 100 | 1K~10K | JSONL — prompt + completion |
| DPO | (prompt, chosen, rejected) 삼중 | 1K | 5K~50K | JSONL — 3필드 |
| GRPO/RFT | 검증 함수 + 시드 프롬프트 | 없음 (자가 생성) | 1K+ 시드 | Python reward fn |
| CPT | 비레이블 도메인 코퍼스 | 100M 토큰 | 1B~100B 토큰 | 원문 텍스트 |
| Distillation | Teacher 합성 응답 | 10K | 50K~500K | JSONL |
SFT는 100건부터 시작할 수 있지만 권장은 1K~10K입니다 — GRPO/RFT는 데이터 대신 검증 함수가 필요합니다.
비용 순위
항상 비용이 낮은 기법부터 시도 — 금액은 규모 가늠용 예시
-
1
프롬프트 엔지니어링 (무료)
프롬프트만 수정. 인프라 비용 $0. DSPy/APO로 자동 최적화하면 SFT급 성능 가능.
-
2
RAG (인프라)
벡터 DB + 임베딩 모델 운영비. 모델 학습 비용 없음. OpenSearch Serverless 기준.
-
3
SFT — QLoRA (GPU)
단일 H100 수 시간. unsloth 사용 시 7B~70B 모델. 약 $10~100/run.
-
4
DPO/GRPO (GPU+)
SFT 이후 추가 학습. 데이터 수집 비용 추가. 약 $50~500/run.
-
5
CPT (클러스터)
다중 GPU 수 일~수 주. 수천 달러~수만 달러. HyperPod 권장.
프롬프트 엔지니어링 $0에서 CPT 수만 달러까지 — 아래로 내려갈수록 비용이 커지므로 위에서부터 시도합니다.
프로덕션 파이프라인
SageMaker AI로 학습→평가→배포 자동화
평가에 합격한 모델만 배포되고, CloudWatch 메트릭이 다시 데이터로 돌아옵니다 — 피드백 루프가 파이프라인을 닫습니다.
대부분은 프롬프트로 충분
프롬프트 엔지니어링 → RAG → SFT → DPO → CPT — 안 될 때만 가중치를 건드리는 비용 순서
대부분은 프롬프트로 충분하다
프롬프트 엔지니어링 → RAG → SFT → DPO → CPT — 비용 순서대로 시도하고, 안 될 때만 가중치를 건드립니다.
프롬프트 엔지니어링 → RAG → SFT → DPO → CPT — 비용 순서대로 시도