pyrite-stream / SPECIFICATION.md
masahiroid's picture
Release Project Pyrite Phase 2: MoE-Stream Engine with Mixtral-8x22B & DeepSeek support
cab2ef1 verified
|
Raw History Blame Contribute Delete
5.81 kB
# 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๏ผ‰ใ€‚