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๏ผ‰ใ€‚