File size: 5,808 Bytes
cab2ef1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# Project Pyrite Phase 2: MoE-Stream Engine ่จญ่จˆไป•ๆง˜ๆ›ธ
## ใ€œ 16GB Mac ใงใƒ•ใƒซ็ฒพๅบฆ (BF16) MoE ใ‚’ๅ‹•ใ‹ใ™ NVMe-RAM ๅˆ†้›ขใ‚นใƒˆใƒชใƒผใƒŸใƒณใ‚ฐ ใ€œ

**่‘—่€…**: ไธญๆดฅๅท ๆ˜Œๅผ˜ (Masahiro NAKATSUGAWA)  
**ๅฏพ่ฑกใƒขใƒ‡ใƒซ**: `deepseek-ai/DeepSeek-Coder-V2-Lite-Instruct` (15.7B / 2.36B active, 27 layers, 64 experts)

---

### 1. ็†่ซ–็š„ใƒ–ใƒฌใ‚คใ‚ฏใ‚นใƒซใƒผใฎๆ•ฐๅญฆ็š„่จผๆ˜Ž

ๅพ“ๆฅใฎ AirLLM ็ญ‰ใฎใ€Œๅ…จๅฑคใ‚ชใƒ•ใƒญใƒผใƒ‰ใ€ใŒ้…ใ‹ใฃใŸ็†็”ฑใฏใ€Dense ใƒขใƒ‡ใƒซใงใฏๆฏŽใƒˆใƒผใ‚ฏใƒณใงๅ…จใƒ‘ใƒฉใƒกใƒผใ‚ฟ๏ผˆ70GB๏ผ‰ใ‚’่ชญใพใญใฐใชใ‚‰ใชใ‹ใฃใŸใ‹ใ‚‰ใงใ™ใ€‚
ใ—ใ‹ใ—ใ€**MoE ใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃใฎๆœฌ่ณชใฏใ€Œใ‚นใƒ‘ใƒผใ‚นๆ€ง๏ผˆ็–Ž็ตๅˆๆ€ง๏ผ‰ใ€** ใซใ‚ใ‚Šใพใ™ใ€‚

DeepSeek-Coder-V2-Lite ใฎใƒ†ใƒณใ‚ฝใƒซๆง‹้€ ใ‚’ๅฎŸๆฉŸ่งฃๆžใ—ใŸ็ตๆžœใ€ไปฅไธ‹ใฎๆ•ฐๅ€คใŒๅˆคๆ˜Žใ—ใพใ—ใŸ๏ผš

1. **ๅธธ้งใƒกใƒขใƒช (Resident Working Set in RAM)**:
   - Embeddings (`embed_tokens`) + LM Head (`lm_head`)
   - 27ๅฑคๅˆ†ใฎ Attention ๆฉŸๆง‹ (`self_attn`: MLA)
   - 27ๅฑคๅˆ†ใฎ LayerNorm
   - 27ๅฑคๅˆ†ใฎ Router Gate (`mlp.gate.weight`: [64, 2048])
   - 27ๅฑคๅˆ†ใฎ ๅ…ฑๆœ‰ใ‚จใ‚ญใ‚นใƒ‘ใƒผใƒˆ (`mlp.shared_experts`: 2 experts)
   ๐Ÿ‘‰ **ๅธธ้งๅฟ…้ ˆใ‚ตใ‚คใ‚บ: ใ‚ใšใ‹็ด„ 2.5 GiB** (16GB Mac ใฎใƒกใƒขใƒชใซไฝ™่ฃ•ใงๅŽใพใ‚‹๏ผ)

2. **ๅ‹•็š„ใ‚นใƒˆใƒชใƒผใƒŸใƒณใ‚ฐ (On-Demand Experts from NVMe SSD)**:
   - ๅ„ๅฑคใฎ `switch_mlp` ใซใฏ 64 ๅ€‹ใฎใ‚จใ‚ญใ‚นใƒ‘ใƒผใƒˆใŒๅญ˜ๅœจ๏ผˆTensor shape: `[64, 1408, ...]`๏ผ‰ใ€‚
   - 1 ๅ›žใฎใƒˆใƒผใ‚ฏใƒณ็”Ÿๆˆใงใƒซใƒผใ‚ฟใƒผใŒ้ธใถใฎใฏ **Top-6 ใ‚จใ‚ญใ‚นใƒ‘ใƒผใƒˆใฎใฟ**๏ผˆๆฎ‹ใ‚Š 58 ๅ€‹ใฏๅฎŒๅ…จใซไผ‘็œ ๏ผ‰ใ€‚
   - **1 ใ‚จใ‚ญใ‚นใƒ‘ใƒผใƒˆใ‚ใŸใ‚Šใฎใ‚ตใ‚คใ‚บ (BF16ๆ™‚)**: ็ด„ 15.8 MB
   - **1 ใƒฌใ‚คใƒคใƒผใ‚ใŸใ‚Šใฎๅฟ…่ฆ่ปข้€้‡**: $6 \times 15.8\text{ MB} = \mathbf{94.8\text{ MB}}$
   - **ๅ…จ 27 ใƒฌใ‚คใƒคใƒผใ‚’้€šใ˜ใŸๅฟ…่ฆ่ปข้€้‡**: $26 \times 94.8\text{ MB} = \mathbf{2.46\text{ GB}}$

3. **่ปข้€ใƒฌใ‚คใƒ†ใƒณใ‚ทใจ้€Ÿๅบฆไบˆๆธฌ**:
   - Mac ใฎ NVMe SSD ้€ฃ็ถš่ชญใฟๅ‡บใ—้€Ÿๅบฆ: **็ด„ 4,000 MB/s ใ€œ 5,000 MB/s (4ใ€œ5 GB/s)**
   - 1 ใƒˆใƒผใ‚ฏใƒณใ‚ใŸใ‚Šใฎ SSD ่ปข้€ๆ™‚้–“: $2.46\text{ GB} \div 4.5\text{ GB/s} \approx \mathbf{0.54\text{ ็ง’}}$
   - **LRU ใ‚ญใƒฃใƒƒใ‚ทใƒฅ๏ผˆ้ ปๅ‡บใ‚จใ‚ญใ‚นใƒ‘ใƒผใƒˆใฎ RAM ไฟๆŒ๏ผ‰ๅฐŽๅ…ฅๆ™‚**:
     ใƒ—ใƒญใ‚ฐใƒฉใƒŸใƒณใ‚ฐใ‚ณใƒผใƒ‰็”ŸๆˆใงใฏๅŒใ˜ใ‚จใ‚ญใ‚นใƒ‘ใƒผใƒˆใŒ็ด„ 40ใ€œ60% ๅ†ๅˆฉ็”จใ•ใ‚Œใ‚‹ใŸใ‚ใ€ๅฎŸๅŠน่ปข้€้‡ใฏ **็ด„ 1.0ใ€œ1.2 GB** ใพใงๅŠๆธ›ใ€‚
     ๐Ÿ‘‰ **ๆœŸๅพ…ใ•ใ‚Œใ‚‹ๅฎŸๅŠน็”Ÿๆˆ้€Ÿๅบฆ: 2ใ€œ5 tokens/sec๏ผˆใƒ•ใƒซ็ฒพๅบฆ BF16ใ€ใƒกใƒขใƒชๆถˆ่ฒป 5GB ไปฅๅ†…๏ผ‰**
   - **8-bit / 4-bit ้‡ๅญๅŒ–ใ‚จใ‚ญใ‚นใƒ‘ใƒผใƒˆไฝต็”จๆ™‚**:
     ่ปข้€้‡ใŒใ•ใ‚‰ใซ 1/2ใ€œ1/4 ใซๆฟ€ๆธ›ใ—ใ€**10ใ€œ20 tokens/sec๏ผˆๅฎŸ็”จ็ˆ†้€Ÿใƒฌใƒ™ใƒซ๏ผ‰** ใซๅˆฐ้”ๅฏ่ƒฝ๏ผ

---

### 2. ใ‚ทใ‚นใƒ†ใƒ ใƒปใ‚ขใƒผใ‚ญใƒ†ใ‚ฏใƒใƒฃๅ›ณ

```
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚               NVMe SSD Storage (2TB)                   โ”‚
โ”‚  Layer 1ใ€œ26: Switch MLP Experts 0ใ€œ63 (BF16 / 31.4GB) โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                            โ”‚ On-Demand Streaming (Direct I/O / mmap)
                            โ–ผ (Top-6 Experts only: ~95MB/layer)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚            RAM / Unified Memory (16GB Mac)             โ”‚
โ”‚                                                        โ”‚
โ”‚  [ๅธธ้งใ‚พใƒผใƒณ (~2.5 GiB)]                                โ”‚
โ”‚   ใƒปEmbedding & LM Head                                โ”‚
โ”‚   ใƒปMulti-Head Latent Attention (MLA)                  โ”‚
โ”‚   ใƒปLayerNorm & Router Gates                           โ”‚
โ”‚   ใƒปShared Experts (2 experts)                         โ”‚
โ”‚                                                        โ”‚
โ”‚  [ๅ‹•็š„ใ‚จใ‚ญใ‚นใƒ‘ใƒผใƒˆใƒปใ‚ญใƒฃใƒƒใ‚ทใƒฅๆž  (~2.5 GiB)]           โ”‚
โ”‚   ใƒปActive Top-6 Experts Buffer (Ring Buffer)          โ”‚
โ”‚   ใƒปLRU Recent Experts Cache                           โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                            โ”‚ Zero-Copy
                            โ–ผ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚            Apple Silicon Metal 4 GPU Execution         โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
```

---

### 3. ๅฎŸ่ฃ…่จˆ็”ป

1. **Phase 1: ใ‚จใ‚ญใ‚นใƒ‘ใƒผใƒˆใƒปใ‚นใƒ—ใƒชใƒƒใ‚ฟใƒผ๏ผˆๅˆ†ๅ‰ฒไฟๅญ˜ใƒ„ใƒผใƒซ๏ผ‰**
   `split_moe_experts.py`:
   31GB ใฎๅทจๅคง safetensors ใ‚’ใ€ใ€Œๅธธ้งใƒ™ใƒผใ‚น๏ผˆBase๏ผ‰ใ€ใจใ€Œๅ„ๅฑคใƒปๅ„ใ‚จใ‚ญใ‚นใƒ‘ใƒผใƒˆใฎ็‹ฌ็ซ‹ใƒ–ใƒญใƒƒใ‚ฏ๏ผˆExpert Pack๏ผ‰ใ€ใซๅˆ†ๅ‰ฒใƒป้ซ˜้€Ÿใ‚คใƒณใƒ‡ใƒƒใ‚ฏใ‚นๅŒ–ใ€‚
2. **Phase 2: ใ‚นใƒˆใƒชใƒผใƒŸใƒณใ‚ฐ MoE ใƒฌใ‚คใƒคใƒผ๏ผˆMLX ใ‚ซใ‚นใ‚ฟใƒ ใƒขใ‚ธใƒฅใƒผใƒซ๏ผ‰**
   `StreamingMoE`:
   ใƒซใƒผใ‚ฟใƒผใ‚ฒใƒผใƒˆใฎๅ‡บๅŠ›๏ผˆTop-K๏ผ‰ใ‚’็›ฃ่ฆ–ใ—ใ€ใƒ’ใƒƒใƒˆใ—ใŸใ‚จใ‚ญใ‚นใƒ‘ใƒผใƒˆใฎใฟใ‚’ SSD ใ‹ใ‚‰ `mmap` ใพใŸใฏไบ‹ๅ‰ๅ‰ฒใ‚Šๅฝ“ใฆใƒใƒƒใƒ•ใ‚กใซ้žๅŒๆœŸใงใƒญใƒผใƒ‰ใ—ใฆ FFN ่จˆ็ฎ—ใ‚’่กŒใ†ใ€‚
3. **Phase 3: LRU ใ‚ญใƒฃใƒƒใ‚ทใƒฅ & ใƒ‘ใ‚คใƒ—ใƒฉใ‚คใƒณใƒปใƒ—ใƒฌใƒ•ใ‚งใƒƒใƒ**
   ใƒฌใ‚คใƒคใƒผ $L$ ใฎ่จˆ็ฎ—ไธญใซใ€ใƒฌใ‚คใƒคใƒผ $L+1$ ใฎใƒซใƒผใ‚ฟใƒผใ‚’ๅ…ˆ่ชญใฟใ—ใฆ SSD ใ‹ใ‚‰ใƒ—ใƒชใƒ•ใ‚งใƒƒใƒใ—ใ€่ปข้€ๅพ…ใกๆ™‚้–“ใ‚’่จˆ็ฎ—ๆ™‚้–“ใง้š ่”ฝ๏ผˆOverlap๏ผ‰ใ€‚