<aside> 🧑💼 3개 모델 × 6단계 실험으로 만든 QLoRA 자기소개 챗봇. Ministral 8B ep6 = 88%. Modal vLLM 배포. (진행 중 — 환각 교정 + ft.parkjh.dev 연동 예정)
</aside>
| 지표 | 값 |
|---|---|
| 최종 정확도 | 22/25 (88%) — 사람 평가 |
| 최종 모델 | Ministral 8B + QLoRA (r=32, alpha=128) |
| 학습 데이터 | 2,622건 (v3, 6개 소스 조합) |
| 학습 시간 | 59분 (7에폭, RTX 5070 Ti) |
| 비교 모델 | 3개 (Ministral/Qwen3/Gemma4) |
| 총 실험 | 6단계 × 17개 모델 = 4.7시간 |
| 비용 | 전기세 ~100원 (클라우드 환산 $21.3) |
| 배포 | Modal vLLM (L4 GPU, OpenAI 호환 API) |
| 상태 | ⏳ 진행 중 (환각 3건 교정 + ft.parkjh.dev 연동) |
| 레이어 | 기술 |
|---|---|
| 프레임워크 | Unsloth 2026.5.8 + TRL SFTTrainer |
| 양자화 | QLoRA 4-bit (NF4, double quantization) |
| 베이스 모델 | Ministral-3-8B-Instruct-2512 |
| 서빙 | Modal (vLLM 0.21.0, L4 GPU, --enable-lora) |
| API | OpenAI 호환 (/v1/chat/completions) |
| GPU | RTX 5070 Ti 16GB (CUDA 12.8) |
| Python | 3.12, PyTorch 2.10.0+cu128, PEFT 0.19.1 |
| 모델 | 정확도 | 환각 | 속도 | 핵심 설정 |
|---|---|---|---|---|
| Ministral 8B ep6 ★ | 88% | 2건 | 13 tok/s | lr=5e-5, alpha=128 (4×r) |
| Qwen3 8B ep5 | 60% | 5건 | 18.9 tok/s | lr=2e-4, alpha=64 (2×r) |
| Gemma4 E4B ep2 | 64% | - | 9.0 tok/s | lr=5e-5, alpha=16 (1×r) |
<aside> 💡 모델 크기보다 데이터 설계가 10배 중요. 같은 8B 모델이 데이터에 따라 0/8 → 8/8로 변한다.
</aside>
3대 핵심 원칙:
최적 에폭 ≈ 2000 / 데이터 건수
과적합 경계: 최적 + 1에폭에서 급격히 하락
1. lora_alpha >> r이 안정적 — IBM 10,000실험: 낮은 lr(5e-5) + 높은 alpha(128)
2. 자동 테스트는 환각을 놓친다 — "삼성에서 12년" 같은 질문 동조 환각은 키워드 매칭으로 탐지 불가
3. 데이터 설계 > 모델 크기 — 291건(0/8) → 2,622건(22/25)으로 동일 모델 성능 극대화
4. FT의 강점은 톤/페르소나 — RAG보다 자연스러운 1인칭 대화 스타일