10. 운영: 재학습, 버전 관리, 롤백#
📚 학습 목표: 모델을 지속적으로 개선하고 안정적으로 운영
⏱️ 읽는 시간: 15분
🎯 원칙: 한 번 학습이 끝이 아님. 계속 개선.
운영 = "AI도 직원처럼 관리"#
신입 직원도 계속 교육하고, 실수를 반영하고, 승진/강등하듯: - AI도 정기 재학습 - Bad case 반영 - 버전 관리 - 문제 시 롤백
📅 재학습 주기#
권장 주기#
| 상황 | 주기 | 예시 |
|---|---|---|
| 정기 | 월 1회 | 매월 첫째 주 |
| 급한 개선 필요 | 2주 | Bad case 누적 시 |
| 안정화 후 | 분기 1회 | 큰 변화 없을 때 |
| 프로젝트 종료 | 없음 | 서비스 종료 시 |
월간 재학습 루틴 (메디콘솔 표준)#
매월 첫째 주 일요일 밤:
20:00 - 데이터 수집 완료
21:00 - 학습 시작 (make all-mlx)
06:00 - 학습 완료 (익일)
매월 첫째 주 월요일:
09:00 - 자동 평가
10:00 - 블라인드 평가 (수간호사)
13:00 - 배포 결정
14:00 - 프로덕션 전환 또는 롤백
재학습 트리거#
다음 중 하나 발생 시 긴급 재학습 고려:
- 🚨 할루시네이션 15% 이상 (치명적 오류)
- ⚠️ 1차 수정률 50% 초과 (저조한 실용성)
- 📉 사용자 만족도 급락
- 🆕 새 도메인 추가 (예: 재활 진료과 신설)
- 🔧 베이스 모델 업데이트 (Gemma 5 출시 등)
🔢 버전 관리 전략#
Semantic Versioning (의미적 버전 관리)#
v1.2.3
│ │ └── Patch: Bad case 반영, 작은 조정 (주간)
│ └──── Minor: 카테고리 확장, 새 기능 (월간)
└────── Major: 베이스 모델 변경, 큰 구조 변경 (연간)
우리 프로젝트 버전 체계#
| 버전 | 의미 | 예시 |
|---|---|---|
| v0.x.x | 실험/개발 | v0.1.0 (첫 파이프라인 검증) |
| v1.x.x | 프로덕션 | v1.0.0 (정식 출시) |
| v1.1.x | 마이너 개선 | 카테고리 확장 |
| v1.1.1 | 패치 | Bad case 반영 |
| v2.0.0 | 메이저 업그레이드 | Gemma 5 기반 |
버전별 명명 규칙#
HuggingFace: mediconsol/mediconsol-v1
├── v1.0.0 태그
├── v1.1.0 태그
└── latest 태그
Ollama: mediconsol-v1:1.0.0
mediconsol-v1:1.1.0
mediconsol-v1:latest ← 현재 배포본
Harness: project.llm_metadata.current_version = "v1.1.0"
📦 배포 절차 (정식)#
단계별 체크리스트#
배포 시 LLM_DEPLOY_CHECKLIST.md 기반:
## v1.1.0 배포 체크리스트
### 사전 검증 (배포 전날)
- [ ] 학습 완료 + 자동 평가 통과 (종합 70%+)
- [ ] 블라인드 평가 평균 4.0 이상
- [ ] 할루시네이션 10% 미만
- [ ] 이전 버전과 비교 (악화 지점 없어야)
### 배포 당일
- [ ] 오전: 프로덕션 스모크 테스트 (10건 질의)
- [ ] Ollama에 신규 버전 등록 (latest 안 바꿈)
- [ ] 베타 그룹에 1시간 테스트
- [ ] 베타 결과 문제 없음 확인
- [ ] latest 태그 전환
- [ ] Voice ENR/RNDiary 연동 확인
- [ ] 1시간 모니터링
- [ ] 24시간 모니터링
### 배포 후 (1주일)
- [ ] 사용자 피드백 수집
- [ ] 에러율 추적
- [ ] Bad case 기록 시작
- [ ] 다음 버전 이슈 정리
배포 스크립트#
scripts/08_deploy_production.sh (만들 수 있음):
#!/usr/bin/env bash
set -e
VERSION=$1 # 예: 1.1.0
echo "[1/5] 스모크 테스트"
ollama run mediconsol-v1:$VERSION "KPCS가 뭔가요?" | head -20
echo "[2/5] 베타 그룹에 태그 전환"
ollama cp mediconsol-v1:$VERSION mediconsol-v1:beta
echo "[3/5] 대기 - 베타 피드백 확인 (수동)"
read -p "베타 테스트 문제 없음? (yes/no): " ok
if [ "$ok" != "yes" ]; then
echo "❌ 배포 중단"
exit 1
fi
echo "[4/5] 프로덕션 전환"
OLD_LATEST=$(ollama show mediconsol-v1:latest --version)
ollama cp mediconsol-v1:$VERSION mediconsol-v1:latest
echo "이전 latest: $OLD_LATEST → 신규: $VERSION"
echo "[5/5] 확인"
ollama list | grep mediconsol-v1
🔙 롤백 절차#
롤백이 필요한 경우#
- 🚨 치명적 할루시네이션 발견
- 🐛 특정 카테고리에서 품질 급락
- ⚡ 성능 저하 (응답 시간 2배)
- 📢 사용자 불만 다수
즉시 롤백 (3분 이내)#
# 1. 이전 버전 확인
ollama list
# NAME SIZE MODIFIED
# mediconsol-v1:latest 3.2GB 1시간 전 (v1.1.0 = 문제)
# mediconsol-v1:1.0.0 3.2GB 1개월 전 (안정)
# mediconsol-v1:1.1.0 3.2GB 1시간 전
# 2. latest를 이전 버전으로
ollama cp mediconsol-v1:1.0.0 mediconsol-v1:latest
# 3. Voice ENR/RNDiary 재시작 (캐시 클리어)
# 각 서비스 재시작
# 4. 확인
ollama run mediconsol-v1 "KPCS가 뭔가요?"
# (이전 버전 답변 나오는지 확인)
echo "✅ 롤백 완료"
롤백 후 작업#
# 1. 문제 버전 별도 보관 (분석용)
# 삭제하지 말고 태그만 변경
ollama cp mediconsol-v1:1.1.0 mediconsol-v1:1.1.0-problematic
# 2. 사후 분석 기록
cat >> docs/incidents.md <<EOF
## 2026-07-15 v1.1.0 롤백
### 문제
- 증상: consulting 카테고리에서 GODCH 설명 오류
- 영향: 컨설팅 보고서 자동 생성 품질 저하
- 발견: 배포 3시간 후
### 원인
- GODCH 관련 학습 데이터 중 일부에 오타
- v1.0.0에는 없던 새 데이터가 오염
### 조치
- 즉시 v1.0.0으로 롤백
- 문제 데이터 검증 시스템 강화
### 재발 방지
- 배포 전 GODCH 체크리스트 20건 필수 검증
EOF
# 3. Harness 메타데이터 업데이트
# projects.llm_metadata.current_version = "v1.0.0"
# EVAL_REPORT.md 에 롤백 사유 기록
🔄 재학습 워크플로우#
월간 재학습 체크리스트#
Week 1: 준비#
# 1. Bad case 정리
ls data/bad_cases/
# 2026-06-nursing.md, 2026-06-management.md, ...
# 2. 사용자 피드백 분석
# - 1차 수정률 높은 카테고리?
# - 자주 나오는 실수 패턴?
# 3. 신규 데이터 수집 목표
# - Bad case 기반 100건
# - 신규 요청 카테고리 50건
# - 기존 약점 보완 100건
Week 2: 데이터 추가#
# 1. data/raw/ 에 신규 데이터 추가
# 2. PHI 검증
python3 scripts/check_phi.py data/raw/
# 3. 카테고리 분포 확인
python3 scripts/show_distribution.py
Week 3: 학습 + 평가#
# 1. 전처리
make data
# 2. 학습 (야간)
make train-mlx &
# 3. 다음날 평가
make fuse-mlx convert deploy evaluate
# 4. 블라인드 평가
# (수간호사 2명에게 요청)
Week 4: 배포#
📊 모니터링 지표#
일일 모니터링#
# 간단한 헬스체크 스크립트 (scripts/healthcheck.sh)
#!/bin/bash
echo "[$(date)] 헬스체크 시작"
# 1. Ollama 동작 확인
ollama list | grep -q mediconsol-v1 || echo "❌ 모델 없음"
# 2. 응답 시간 측정
START=$(date +%s)
ollama run mediconsol-v1 "테스트" > /dev/null
END=$(date +%s)
echo "응답 시간: $((END - START))초"
# 3. 스모크 쿼리
RESP=$(ollama run mediconsol-v1 "KPCS가 뭔가요?")
if echo "$RESP" | grep -q "Korean"; then
echo "✅ 기본 지식 유지"
else
echo "⚠️ 기본 지식 손실 가능"
fi
주간 지표#
매주 월요일 수집: - 총 질의 수 - 응답 시간 평균/p95 - 에러율 - 사용자 피드백 (긍정/부정) - Bad case 건수
월간 회고#
매월 말: - 이번 달 배포 이력 - 이슈/롤백 횟수 - 지표 변화 - 다음 달 계획
💾 데이터 아카이브 전략#
버전별 데이터 보관#
archives/
├── v1.0.0/
│ ├── train.jsonl ← 학습 데이터
│ ├── eval.jsonl
│ ├── adapter.safetensors ← 어댑터
│ ├── eval_report.json ← 평가 결과
│ └── README.md ← 버전 노트
├── v1.1.0/
│ └── ...
└── v1.2.0/
└── ...
삭제 금지#
- ❌ 학습 데이터 (data/processed/train.jsonl)
- ❌ 어댑터 (adapters.safetensors)
- ❌ 평가 결과
- ❌ Bad case 기록
이유: 재현성. 6개월 후 "이 버전 왜 이렇게 됐지?" 질문 올 때.
HuggingFace 업로드 (백업)#
# 매 버전마다 Private 저장소에 업로드
export HF_TOKEN="hf_xxx"
make upload-all
# HF에 태그로 저장
# https://huggingface.co/mediconsol/mediconsol-v1
# Tags: v1.0.0, v1.1.0, v1.2.0 ...
🎓 숙련도별 가이드#
초급 (첫 3개월)#
목표: 파이프라인에 익숙해지기
- 월 1회 재학습 엄수
- Bad case 수집 루틴
- 롤백 절차 한번 연습
중급 (3-6개월)#
목표: 품질 개선
- 하이퍼파라미터 실험
- 카테고리별 A/B 테스트
- 블라인드 평가 시스템화
고급 (6개월+)#
목표: 자동화 및 확장
- 자동 재학습 파이프라인
- 다중 모델 관리 (특화 모델)
- 외부 평가 데이터셋 활용
🚨 긴급 상황 대응 매뉴얼#
시나리오 1: "AI가 틀린 의료 정보 제공 중"#
우선순위: 즉시 서비스 중단
# 1. 즉시 Ollama 중단
brew services stop ollama
# 2. 영향 범위 파악
# - 얼마나 오랫동안?
# - 몇 명이 영향?
# 3. 내부 공지
# Slack에 상황 공유
# 4. 이전 버전 롤백
brew services start ollama
ollama cp mediconsol-v1:1.0.0 mediconsol-v1:latest
# 5. 사후 보고
시나리오 2: "Voice ENR 연동 실패"#
진단 순서:
# 1. Ollama 상태
curl http://localhost:11434/api/tags
# 2. 모델 응답
ollama run mediconsol-v1 "테스트"
# 3. Cloudflare Tunnel
curl https://llm.mediconsol.com/api/tags
# 4. Voice ENR 로그
# (Voice ENR 쪽 로그 확인)
시나리오 3: "학습 중 맥미니 다운"#
# 1. 맥미니 재부팅
# 2. 체크포인트 확인
ls outputs/mlx_adapter/*_adapters.safetensors
# 3. 이어서 학습
python3 -m mlx_lm.lora \
--resume-adapter-file outputs/mlx_adapter/0000XXX_adapters.safetensors \
--iters 200
📚 운영 문서 자동 업데이트#
매 버전 배포 시 다음 문서 업데이트:
- Harness 프로젝트 llm_metadata
current_version-
latest_eval -
EVAL_REPORT.md (Harness 아티팩트)
-
새 버전 섹션 추가 (맨 위)
-
MODEL_CARD.md (Harness + HF)
- 최신 평가 점수
-
버전 이력
-
LLM_DEPLOY_CHECKLIST.md
- 체크리스트 완료 기록
✅ 자가 체크#
- 재학습 주기 이해 (월 1회)
- 버전 관리 체계 이해 (Semantic Versioning)
- 배포 체크리스트 실행 가능
- 롤백 절차 연습 완료
- 긴급 상황 대응 매뉴얼 숙지
🎉 축하합니다!#
여기까지 읽으셨다면, 당신은 이제: - LLM 파인튜닝의 개념을 이해함 - 실제 파이프라인을 실행할 수 있음 - 학습 결과를 해석할 수 있음 - 문제 상황에 대처할 수 있음 - 데이터를 수집하고 품질 관리할 수 있음 - 하이퍼파라미터를 조정할 수 있음 - 평가 시스템을 구축할 수 있음 - 지속적으로 운영할 수 있음 ⭐
당신은 이제 LLM 엔지니어입니다! 🎓
다음 단계#
필요할 때 참조할 자료:
- 99_FAQ.md - 자주 묻는 질문
- 99_CHEATSHEET.md - 명령어 치트시트
그리고 실전으로!
💡 핵심 요약#
재학습: 월 1회 (매월 첫째 주 일요일 야간)
버전: Semantic (v1.0.0 → v1.1.0 → v2.0.0)
배포: 스모크 → 베타 → latest 전환
롤백: 3분 이내 (ollama cp)
기록: 모든 버전/데이터/평가 아카이브 필수