Capstone 07 — End-to-End 파인튜닝 파이프라인(End-to-End Fine-Tuning Pipeline; Data to SFT to DPO to Serve)
자체 데이터로 훈련한 8B 모델을, 자체 선호(preference)로 직접 선호 최적화(Direct Preference Optimization; DPO) 정렬한 뒤 양자화(quantization)와 추측 디코딩(speculative decoding)을 거쳐, 측정 가능한 100만 토큰당 비용($/1M tokens) 단위로 서빙(serving)까지 수행합니다. 2026년 오픈 스택(open stack)은 Axolotl v0.8, TRL 0.15, 빠른 반복(iteration)을 위한 Unsloth, 양자화를 위한 GPTQ/AWQ/GGUF, EAGLE-3가 결합된 vLLM 0.7로 정리됩니다. 이 캡스톤(Capstone)의 목표는 전체 파이프라인을 재현 가능하게 실행하는 것입니다. YAML 설정을 넣으면 서빙되는 엔드포인트(served endpoint)가 나오고, 2026년판 모델 공개성 프레임워크(Model Openness Framework; MOF)에 따른 모델 카드(model card)를 함께 공개합니다.
유형: Capstone
언어: Python (파이프라인), YAML (설정), Bash (스크립트)
선수 지식: Phase 2 (머신러닝), Phase 3 (딥러닝), Phase 7 (트랜스포머; transformers), Phase 10 (LLM을 처음부터 구현; LLMs from scratch), Phase 11 (LLM 엔지니어링), Phase 17 (인프라), Phase 18 (안전)
활용되는 Phase: P2 · P3 · P7 · P10 · P11 · P17 · P18
예상 시간: 약 35시간
문제
2026년에 진지하게 운영되는 모든 AI 팀은 파인튜닝 파이프라인(fine-tuning pipeline)을 상시 가동 가능한 상태로 갖춰 둡니다. 자체적으로 프런티어 기반 모델(frontier base model)을 출시하기 때문이 아닙니다. 측정 가능한 성과는 결국 하위 적응(downstream adaptation)에서 나오기 때문입니다. 도메인 지도 미세조정(domain SFT), 라벨링된 선호 쌍(labeled preference)에 대한 DPO, 추측 디코딩을 위한 증류된 초안 모델(distilled drafts), EAGLE-3 기반 서빙이 모두 이 영역에 해당합니다. Axolotl v0.8은 다중 GPU(multi-GPU) 지도 미세조정 설정을 처리하고, TRL 0.15는 DPO와 그룹 상대 정책 최적화(Group Relative Policy Optimization; GRPO)를 처리합니다. Unsloth는 단일 GPU(single-GPU) 반복을 빠르게 해 줍니다. EAGLE-3를 결합한 vLLM 0.7은 품질 손실 없이 디코드 처리량(decode throughput)을 2~3배 끌어올립니다. 도구는 이미 잘 작동하고, 실력 차이는 YAML 설정, 데이터 위생(data hygiene), 평가 규율(eval discipline)에서 갈립니다.
이 캡스톤에서는 8B 기반 모델(Llama 3.3, Qwen3, Gemma 3) 가운데 하나를 과제 특화 데이터(task-specific data)로 지도 미세조정(SFT)한 뒤 DPO를 수행하고, 서빙용으로 양자화하며, lm-evaluation-harness, RewardBench-2, MT-Bench-v2, MMLU-Pro 기준으로 성능 향상폭(gain)을 측정합니다. 그리고 2026 MOF에 따른 모델 카드를 만듭니다. 핵심은 재현성입니다. 하나의 명령어로 전체 파이프라인이 처음부터 끝까지 다시 실행되어야 합니다.
개념
파이프라인은 다섯 단계로 구성됩니다. 데이터(Data): 중복 제거(dedup; MinHash / Datatrove), 품질 분류기 필터(Nemotron-CC 스타일 quality filter), 개인정보(PII) 스크럽(scrub), 공개 벤치마크 오염(public benchmark contamination)에 대한 분할 위생 점검(split-hygiene check). 지도 미세조정(SFT, Supervised Fine-Tuning): Axolotl YAML, 8xH100 위에서의 ZeRO-3, 코사인 스케줄(cosine schedule), 시퀀스 패킹(packed sequences), 2~3 에폭(epochs). DPO 또는 GRPO: TRL 설정, 1 에폭, 사람 라벨(human-labeled) 또는 모델 판정(model-judged) 선호 쌍, 베타(beta) 튜닝. 양자화(Quantize): 배포 유연성을 위한 GPTQ + AWQ + GGUF. 서빙(Serve): EAGLE-3 추측 헤드(speculative heads)를 결합한 vLLM 0.7, 또는 SpecForge를 결합한 SGLang, 쿠버네티스(K8s) 배포와 큐 대기 시간(queue-wait) 기반 수평 자동 확장(Horizontal Pod Autoscaler; HPA).
산출물은 비교 실험(ablation)입니다. 세 가지 과제 특화 벤치마크에서 SFT 단독(SFT-only), SFT+DPO, SFT+GRPO 결과를 비교합니다. 서빙 지표는 배치 크기 1 / 8 / 32에서 초당 토큰 수(tokens/s), EAGLE-3 수용률(acceptance rate), 100만 토큰당 비용입니다. 안전 평가(safety eval) 지표는 Llama Guard 4 통과율(pass rate)입니다. 모델 카드에는 편향 평가(bias evaluations), 재현 시드(reproducibility seeds), 데이터 라이선스(data licensing) 정보가 포함됩니다.
아키텍처
raw data (HF datasets + internal)
|
v
Datatrove dedup + Nemotron-CC quality filter + PII scrub
|
v
split hygiene (MMLU-Pro contamination check)
|
v
Axolotl SFT config (YAML) ---> 8xH100, ZeRO-3
|
v
TRL DPO / GRPO config ---> 4xH100, 1 epoch
|
v
GPTQ + AWQ + GGUF quantize
|
v
vLLM 0.7 + EAGLE-3 speculative decoding
|
v
K8s deployment, HPA on queue-wait
|
v
lm-eval-harness + RewardBench-2 + MT-Bench-v2 + MMLU-Pro
|
v
model card (2026 MOF) + safety eval (Llama Guard 4)
스택
- 데이터(Data): 중복 제거용 Datatrove, 품질 분류용 Nemotron-CC 분류기(classifier), 개인정보 스크럽용 Presidio
- 기반 모델(Base): Llama 3.3 8B, Qwen3 14B, Gemma 3 12B
- 지도 미세조정(SFT): ZeRO-3, Flash Attention 3, 시퀀스 패킹을 적용한 Axolotl v0.8
- 선호 튜닝(Preference tuning): DPO 또는 GRPO를 위한 TRL 0.15, 단일 GPU 반복을 위한 Unsloth
- 양자화(Quantization): GPTQ(Marlin), AWQ, llama.cpp를 통한 GGUF
- 서빙(Serving): EAGLE-3 추측 디코딩을 결합한 vLLM 0.7, 또는 SGLang 0.4 + SpecForge
- 평가(Eval): lm-evaluation-harness, RewardBench-2, MT-Bench-v2, MMLU-Pro
- 안전 평가(Safety eval): Llama Guard 4, ShieldGemma-2
- 인프라(Infrastructure): Kubernetes + NVIDIA device plugin, 큐 대기 시간 지표 기반 HPA
- 관측 가능성(Observability): 학습용 W&B, 추론용 Langfuse
만들어보기
-
데이터 파이프라인(Data pipeline). 원본 코퍼스(raw corpus)에 Datatrove 중복 제거를 실행합니다. Nemotron-CC 스타일 품질 분류기를 적용합니다. Presidio로 개인정보를 스크럽합니다. 명시적인 시드(seed)로 학습/검증(train/val) 분할을 작성합니다.
-
오염 점검(Contamination check). 모든 검증 분할에 대해 MMLU-Pro, MT-Bench-v2, RewardBench-2 테스트 셋과의 MinHash를 계산합니다. 중복(overlap)이 발견되면 해당 데이터를 거부(reject)합니다.
-
Axolotl 지도 미세조정. ZeRO-3, FA3, 시퀀스 패킹을 포함하는 YAML을 작성합니다. 8xH100 환경에서 2~3 에폭을 실행합니다. 학습 로그는 W&B로 보냅니다.
-
TRL DPO / GRPO. SFT 체크포인트(checkpoint)를 가져와 선호 쌍(preference pair)에 대해 DPO를 1 에폭 실행합니다. 또는 수학/코드 영역에서 검증 가능한 보상(verifiable reward)을 갖는 GRPO를 실행합니다. 베타 값을 스윕(sweep)합니다.
-
양자화(Quantize). 세 가지 양자화 산출물을 만듭니다. GPTQ-INT4-Marlin, AWQ-INT4, llama.cpp용 GGUF-Q4_K_M입니다. 파일 크기와 명목 처리량(nominal throughput)을 기록합니다.
-
추측 디코딩 기반 서빙(Serve with speculative decoding). Red Hat Speculators로 학습한 EAGLE-3 초안 헤드(draft heads)를 결합한 vLLM 0.7 설정을 사용합니다. 배치 크기 1 / 8 / 32에서 수용률과 꼬리 지연 시간(tail latency)을 측정합니다. 동일한 평가 기준에서 Anthropic / OpenAI 대비 100만 토큰당 비용을 보고합니다.
-
평가 매트릭스(Eval matrix). 기반 모델, SFT 단독, SFT+DPO, SFT+GRPO에 대해 lm-eval-harness, RewardBench-2, MT-Bench-v2, MMLU-Pro를 실행합니다. 결과를 표로 정리합니다.
-
안전 평가(Safety eval). 검증 셋에서 Llama Guard 4 통과율을 측정합니다. ShieldGemma-2 출력 필터(output filter)를 적용합니다.
-
모델 카드(Model card). 2026 MOF 템플릿을 사용합니다. 데이터, 학습, 평가, 안전, 라이선스, 그리고 YAML과 커밋 SHA가 포함된 재현성(reproducibility) 절을 포함합니다.
사용해보기
$ ./pipeline.sh config/llama3.3-8b-domainX.yaml
[data] 300k deduped, 12k filtered, 280k accepted (seed=7)
[SFT] 3 epochs, 8xH100, 6h12m, val loss 1.42 -> 1.03
[DPO] 1 epoch, beta=0.08, 4xH100, 1h40m
[quant] GPTQ-INT4 4.6 GB, AWQ-INT4 4.8 GB, GGUF-Q4_K_M 5.1 GB
[serve] vLLM 0.7, EAGLE-3 acceptance 0.74, p99 126ms @ bs=8
[eval] MMLU-Pro +3.2, MT-Bench-v2 +0.41, RewardBench-2 +0.08
[card] model-card.md generated under 2026 MOF
제출하기
outputs/skill-finetuning-pipeline.md는 제출 산출물을 설명합니다. 하나의 명령으로 데이터 → SFT → DPO → 양자화 → 서빙 → 평가까지 이어지고, 모델 카드와 서빙 엔드포인트를 함께 산출합니다.
| 가중치(Weight) | 평가 항목(Criterion) | 측정 방법(How it is measured) |
|---|
| 25 | 기반 모델 대비 평가 향상폭(Eval delta vs base) | 목표 과제(MMLU-Pro, MT-Bench-v2, 과제 특화 벤치마크)에서 측정한 성능 향상 |
| 20 | 파이프라인 재현성(Pipeline reproducibility) | 동일한 시드로 하나의 명령이 처음부터 끝까지 같은 결과로 재실행 |
| 20 | 데이터 위생(Data hygiene) | 중복 제거율, 개인정보 스크럽 커버리지, 오염 점검 통과 여부(green) |
| 20 | 서빙 효율(Serving efficiency) | bs=1/8/32에서 tokens/s, EAGLE-3 수용률, 100만 토큰당 비용 |
| 15 | 모델 카드 + 안전 평가(Model card + safety eval) | 2026 MOF 충실도 + Llama Guard 4 통과율 |
| 100 | | |
연습문제
-
(쉬움) 동일한 과제 특화 벤치마크에서 SFT 단독, SFT+DPO, SFT+GRPO를 모두 실행합니다. 어떤 선호 학습 방식이 얼마나 더 좋은 결과를 내는지 보고합니다.
-
(중간) Llama 3.3 8B를 Qwen3 14B로 교체합니다. 동일 품질 수준(matched quality)에서 100만 토큰당 비용을 측정합니다.
-
(중간) 도메인 데이터와 일반 ShareGPT 데이터에서 EAGLE-3 수용률을 측정합니다. 그 차이(delta)와 그것이 지연 예산(latency budget)에 주는 의미를 보고합니다.
-
(어려움) 의도적으로 1% 분량의 오염(contamination)을 주입합니다(MMLU-Pro 정답을 학습 데이터로 유출). 평가를 다시 실행하면 MMLU-Pro 정확도가 비현실적으로 뛰는 모습을 관찰합니다. 이를 잡아내는 오염 점검 지속적 통합 게이트(contamination-check CI gate)를 만듭니다.
-
(어려움) 전체 파인튜닝(full fine-tune)의 대안으로 LoRA 기반 지도 미세조정(LoRA SFT)을 추가합니다. 메모리 사용량이 10배 낮은 환경에서 품질 격차(quality gap)를 측정합니다.
핵심 용어
| 용어 | 흔한 설명 | 실제 의미 |
|---|
| Axolotl | "SFT 트레이너" | 지도 미세조정, DPO, 증류(distillation)를 위한 YAML 기반 통합 트레이너이다. |
| TRL | "선호 튜너" | LLM에서 DPO, GRPO, PPO를 다루는 Hugging Face 라이브러리이다. |
| GRPO | "그룹 상대 정책 최적화" | 검증 가능한 보상을 사용하는 DeepSeek R1 계열의 강화학습(RL) 레시피이다. |
| EAGLE-3 | "추측 디코딩 초안" | 앞으로의 N개 토큰을 미리 예측하는 초안 헤드이고, vLLM이 이를 타깃 모델로 검증한다. |
| MOF | "Model Openness Framework" | 데이터, 코드, 라이선스 공개 수준을 기준으로 모델 릴리스를 등급화하는 2026년 표준이다. |
| 오염 점검(Contamination check) | "분할 위생(Split hygiene)" | 테스트 셋이 학습 데이터로 유출되었는지를 MinHash 기반으로 탐지하는 작업이다. |
| 수용률(Acceptance rate) | "EAGLE / MTP 지표" | 초안 모델이 만든 토큰 가운데 타깃 모델이 받아들이는 비율이다. |
더 읽을거리