åæåºå¤ï¼ Flash-MoE: Running a big model on a small laptopï¼danveloperï¼
åä½è ï¼ danveloper
é 徿¥æºï¼ åæä»åº
ä¸å¥è¯æ»ç»
ä¸ä¸ªçº¯ C/Metal æ¨ç弿ï¼å¨ 48GB å åç MacBook Pro ä¸ä»¥ 4.4 tokens/s çé度è¿è¡ Qwen3.5-397B-A17Bââä¸ä¸ª 3970 äº¿åæ°ç MoE 模åãæ²¡æ Pythonï¼æ²¡ææ¡æ¶ï¼åªæ CãObjective-C åæ»å Metal shaderã
è¿äºä¸ºä»ä¹ç¸äº
HN é¦é¡µ 300+ èµãå ä¸ºå®æç ´äºä¸ä¸ªèº¤ç¥ï¼åäº¿åæ°çº§å«ç模åå¿ é¡»è·å¨ GPU é群ä¸ã
å ³é®æ°æ®ï¼
- 模å大å°ï¼397B åæ°ï¼MoE æ¶æï¼æ¯ä¸ª token åªæ¿æ´» 17Bï¼
- ççå ç¨ï¼209GBï¼4-bit éåï¼
- **èªå½¶**ï¼MacBook Pro M3 Maxï¼48GB ç»ä¸å å
- 覤度ï¼4.36 tok/sï¼4-bitï¼ï¼5.74 tok/sï¼2-bitï¼
- å åå ç¨ï¼ä» ~6GBï¼å©ä½çç» OS 页é¢ç¼å
æ ¸å¿ææ¯æè§£
1. SSD ä¸å®¶æµå¼å è½½
MoE çç²¾é«å¨äºç¨çæ¿æ´»ââ512 个ä¸å®¶ä¸æ¯ä¸ª token åªç¨ 4 个ãFlash-MoE å©ç¨è¿ä¸ç¹ãæä¸å®¶æéçå¨ SSD ä¸ãæéå è½½ï¼
- æ¯ä¸ªä¸å®¶çº¦ 6.75MBï¼ç¨å¹¶è¡
pread()ä» NVMe SSD 读å - Apple Fabric SSD 宿µé¡ºåºè¯»å 17.5 GB/s
- çµææ¥èªè¬æç âLLM in a Flashâ 论æ
- ä¸åèªå®ä¹ç¼åââç´æ¥ä¿¡ä»» OS 页é¢ç¼åï¼~35GBï¼ï¼å½ä¸ç约 71%
è¿ä¸ªâTrust the OSâå忝æ´ä¸ªé¡¹ç®æåç´è¥¸ç设计å³å®ãä»ä»¬è¯è¿ Metal LRU ç¼åãmalloc ç¼åãLZ4 å缩ç¼åââå ¨é¨æ¯ç³»ç»é¡µé¢ç¼åæ ¢ã
2. FMA ä¼åçåéåå æ ¸
4-bit åéå + ç©éµåé乿³çå
循ç¯ï¼ä» (nibble * scale + bias) * x éæä¸º fma(nibble, scale*x, bias*x)ãé¢è®¡ç® scale*x å bias*xï¼è®© GPU ç FMA åå
䏿¡æä»¤å®æåéå+乿³ã**æé 12%**ã
3. æå Metal Shader
ä¸ç¨ä»»ä½æ¡æ¶ï¼å ¨é¨æåï¼
- 4-bit / 2-bit åéåç©éµåé乿³ï¼ååãSIMD è§çº¦ãå ±äº«è¾å ¥ç¼åï¼
- èå SwiGLU æ¿æ´»
- 两é RMS å½ä¸å
- æ¹é GPU 注æåï¼Q@K^T â softmax â scores@Vï¼
- GPU RoPEï¼ä¸ Q å交éå AÊT= å½ä¸åèåï¼
- MoE åå¹¶ + æ®å·® + sigmoid 鍿§ï¼èåå æ ¸ï¼
4. å»¶è¿ GPU æäº¤
ä¸å®¶åè§ä¼ æç Metal Command Buffer æäº¤åä¸çå¾ å®æãGPU æ§è¡å®çåæ¶ï¼CPU åå¤ä¸ä¸å±ãåå¹¶ãæ®å·®ãå½ä¸åä¹å¨ GPU ä¸å®æï¼ç´æ¥å¥ç»ä¸ä¸å±ç注æåæå½±ã
5. 为ä»ä¹ä¸è½ GPU/SSD å¹¶è¡
å¨ Apple Silicon ä¸ï¼SSD DMA å GPU 计ç®å ±äº«åä¸ä¸ªå åæ§å¶å¨ãGPU çåéåå æ ¸å·²ç»æå¸¦å®½è·æ»¡äºï¼~418 GiB/sï¼ï¼åªæå¾å°ç SSD DMA é½ä¼å¯¼è½ GPU å»¶è¿é£åãä¸²è¡æµæ°´çº¿ï¼GPU â SSD â GPUï¼ææ¯ç¡¬ä»¶æä¼è§£ã
ä»ä¹ææãä»ä¹æ æ
ææçä¼å
| æ¹æ³ | ææ |
|---|---|
| FMA åéåå æ ¸ | +12% tok/s |
| Trust OS 页é¢ç¼å | +38%ï¼å æèªå»ºç¼ååï¼ |
| Accelerate BLAS çº¿æ§æ³¨æå | +64% 注æåé度 |
| C BPE tokenizer | å¯å¨æ¶é´ 3500ms â 180ms |
| å»¶è¿ CMD3 æ§è¡ | GPU/CPU éå |
失败çå°è¯
| æ¹æ³ | ç»æ | åå |
|---|---|---|
| LZ4 ä¸å®¶å缩 | -13% | è§£åå¼é > ç¼åæ¶ç |
| SSD é¢è¯»å | åé¶ | DMA ææ ¢ GPU 73% |
| æ¶åºä¸å®¶é¢ æµ | -18% | å½ä¸çä» 25%ï¼æµªè´¹å¸¦å®½ |
| mmap ä¸å®¶æä»¶ | -5x | å·æ°æ®ç¼ºé¡µä¸æè¿å¤ |
| dispatch_io | -70% | dispatch_data 管çå¼é |
æç解读
1. MoE + Apple Silicon = æ¬å°æ¨ççæ°èå¼
è¿ä¸ªé¡¹ç®è¯æäºä¸ä»¶äºï¼MoE æ¶æçç¨£ç¦»æ¿æ´»ç¹æ§ï¼é å Apple Silicon çç»ä¸å ååé«é SSDï¼å¯ä»¥è®©æ¶è´¹çº§ç¡¬ä»¶è¿è¡ä»¥ååªææ°æ®ä¸å¿æè½è·ç模åã
å ³é®ä¸æ¯âå缩模åå°è½è£ è¿å åâï¼èæ¯âæ ¸æ¬ä¸éè¦å ¨è£ è¿å åâã
2. âTrust the OSâçå·¥ç¨å²å¦
æè®©æå°è±¡æ·±å»çæ¯ä»ä»¬å°è¯äºåç§èªå»ºç¼åæ¹æ¡ï¼æç»åç°é½ä¸å¦æä½ç³»ç»ç页é¢ç¼åãè¿æ¯ä¸ä¸ªå¾å¥½çå·¥ç¨ç´è§ï¼å¨ä½ åèªå®ä¹è§£å³æ¹æ¡ä¹åï¼å è¯è¯å¹³å°å·²ç»æä¾çä¸è¥¿ã
3. 2-bit çé·é±
2-bit éåæ´å¿«ï¼5.74 tok/sï¼ï¼ä½ä¼æ JSON ä¸ç "name" è¾åºæ \name\ï¼å¯¼è´ tool calling å®å
¨ä¸å¯ç¨ãè¿è¯´ææç«¯éåä¸åªæ¯ âè´¨éå·®ä¸ç¹âââå®ä¼ç ´å模åçç»æåè¾åºè½åï¼èè¿æ£æ¯ Agent æ¶ä»£æå
³é®çè½åã
4. 24 å°æ¶ï¼ä¸ä¸ªäºº + AI
README éæä¸ªä¸ç»ï¼è¿ä¸ªé¡¹ç®æ¯ä¸ä¸ªäººå AI å¨ 24 å°æ¶å 宿çã7000 è¡ C æ¨ç弿 + 1200 è¡ Metal shader + 90 夿¬¡å®éªãè¿æ¬èº«å°±æ¯ AI è¾ å©å¼åçä¸ä¸ªæåæ¡ä¾ã
对å¼åè çå¯ç¤º
- å¦æä½ æ M3/M4 Macï¼å¯ä»¥è· 397B åæ°çæ¨¡åäº
- MoE æ¶æä¸åªæ¯è®ç»ä¼åââå®è®©æ¨çä¹å¯ä»¥âå·æâ
- ä¸è¦ç²ç®ä¼åââå éåä½ çç¶é¢ï¼è¿éæ¯ SSD I/Oï¼ä¸æ¯è®¡ç®ï¼
- Apple ç âLLM in a Flashâ 设ææè·¯å¯ä»¥èµ°éï¼Flash-MoE æ¯å·¥ç¨éªè¯
项ç®å°åï¼github.com/danveloper/…