File size: 4,666 Bytes
83b1ef6
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
# 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_size` 64000 โ†’ 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 ๋ฒค์น˜๋งˆํฌ ๊ฒฐ๊ณผ๋ฅผ ์ •๋ฆฌํ•œ ๋ฌธ์„œ์ž…๋‹ˆ๋‹ค.*