4.6 KiB
4.6 KiB
FRANKENSTALLM 3B v2 — GGUF 변환·배포 및 Ollama 평가 보고서
- 작성일: 2026-03-09
- 대상: byte-fallback 수정 적용 체크포인트 → GGUF 변환 → Ollama 배포 → 벤치마크
1. 요약
| 항목 | 내용 |
|---|---|
| 원인 | SentencePiece Unigram 토크나이저에 byte_fallback 미적용 → \n 등 미등록 문자 시 llama.cpp 크래시 |
| 조치 | 256개 byte-fallback 토큰 추가, 임베딩 64000→64256 리사이즈, GGUF 재변환, Q4_K_M 양자화 |
| 배포 | Ollama 모델 frankenstallm-3b-v2:latest (792 MB, Q4_K_M) |
| 뉴라인 검증 | ✅ 크래시 없이 \n 포함 프롬프트 처리 확인 |
| Ollama 벤치마크 | 35개 테스트, 자동 채점 평균 46.7, 평균 TPS 142.5, TTFT 16.7 ms |
2. 파이프라인 단계
2.1 토크나이저·임베딩 수정
- 스크립트:
scripts/fix_tokenizer_byte_fallback.py - 입력:
outputs/hf_checkpoint-best - 출력:
outputs/hf_checkpoint-best-fixed - 변경 사항:
tokenizer.json:byte_fallback=True,<0x00>~<0xFF>256개 토큰 추가config.json:vocab_size64000 → 64256- 임베딩 레이어 리사이즈 및 새 토큰 초기화 후 safetensors 저장
2.2 GGUF 변환 및 양자화
- F16 GGUF:
outputs/llama.cpp/convert_hf_to_gguf.py
outputs/hf_checkpoint-best-fixed→outputs/gguf/frankenstallm-3b-v2-f16.gguf - Q4_K_M 양자화:
outputs/llama.cpp/build/bin/llama-quantize
→outputs/gguf/frankenstallm-3b-v2-Q4_K_M.gguf(약 792 MB)
2.3 Ollama 배포
- Modelfile: 로컬 GGUF 경로
FROM지정 후ollama create - 모델 이름:
frankenstallm-3b-v2:latest
2.4 뉴라인 테스트
- 방법: Ollama API로
"첫 줄\n두 번째 줄\n세 번째 줄이라고 말해줘."프롬프트 전송 - 결과: HTTP 200,
done: true, 크래시 없음 → byte-fallback 수정 검증 완료
3. Ollama 벤치마크 결과 (frankenstallm-3b-v2)
- 실행:
python eval/ollama_benchmark.py --models frankenstallm-3b-v2 --output-dir eval/results/frankenstallm-3b-v2 - 일시: 2026-03-09 23:24:22
- 총 테스트: 35 (자동 채점 20 + 수동 검토 15)
3.1 전체 자동 채점 평균
| 모델 | Auto Avg |
|---|---|
| frankenstallm-3b-v2 | 46.7 |
3.2 카테고리별 점수 (자동/수동)
| 카테고리 | 점수 | 비고 |
|---|---|---|
| korean_nlu | 100.0 | 3 자동 / 2 수동 |
| korean_generation | manual | 5 수동 |
| reasoning | 50.0 | 4 자동 / 1 수동 |
| knowledge | 75.0 | 4 자동 / 1 수동 |
| code | 0.0 | 3 자동 |
| safety | 10.0 | 2 자동 / 1 수동 |
| instruction_following | 66.7 | 3 자동 |
| multilingual | manual | 3 수동 |
| repetition_resistance | 2.2 | 3 자동 (반복률 높음) |
3.3 지연 시간
| 지표 | 값 |
|---|---|
| Avg TTFT (ms) | 16.7 |
| P50 TTFT (ms) | 15.8 |
| P95 TTFT (ms) | 26.2 |
| Avg TPS | 142.5 |
| P50 TPS | 142.7 |
| P95 TPS | 143.3 |
3.4 반복률 상세 (repetition_resistance)
| Test ID | Rep Rate | Unique/Total N-grams | Score |
|---|---|---|---|
| rep_01 | 73.76% | 122/465 | 0.0 |
| rep_02 | 59.72% | 255/633 | 0.0 |
| rep_03 | 46.70% | 226/424 | 6.6 |
- 원본 ORPO 평가 (HF 체크포인트, Greedy): 3-gram 반복률 30.89%, EOS 67%.
Ollama Q4_K_M + 벤치마크 프롬프트에서는 반복이 더 두드러짐.
3.5 결과 파일 위치
- JSON:
eval/results/frankenstallm-3b-v2/ollama_benchmark_results.json - 요약 MD:
eval/results/frankenstallm-3b-v2/ollama_benchmark_summary.md
4. 기존 ORPO 평가와의 연계
- ORPO 종합 보고서:
reports/2026-03-09_ORPO_EVALUATION_REPORT.md - 정량 스코어: 63.7/100, 7/10 차원 통과, 최종 판정 RETRY
- v2 배포본은 동일 ORPO 체크포인트에서 byte-fallback만 수정·GGUF 변환한 버전이며,
ORPO 지표(예: preference accuracy, reward margin)는 기존 보고서와 동일한 체크포인트 기준으로 유지됨.
5. 아티팩트 경로 정리
| 용도 | 경로 |
|---|---|
| 수정된 HF 체크포인트 | outputs/hf_checkpoint-best-fixed/ |
| F16 GGUF | outputs/gguf/frankenstallm-3b-v2-f16.gguf |
| Q4_K_M GGUF (Ollama 배포용) | outputs/gguf/frankenstallm-3b-v2-Q4_K_M.gguf |
| Ollama 벤치마크 결과 | eval/results/frankenstallm-3b-v2/ |
| Byte-fallback 수정 스크립트 | scripts/fix_tokenizer_byte_fallback.py |
이 보고서는 GGUF 변환·Ollama 배포 및 Ollama 벤치마크 결과를 정리한 문서입니다.