Flash-MoE: Running a 397B Parameter Model on a Laptop
摘要
纯C/Metal实现,在48GB MacBook Pro M3 Max上运行397B参数MoE模型达到4.4+ tokens/秒。209GB模型从SSD流式传输,无需GPU内存。包含完整的性能优化经验总结。
性能数据
| 配置 | 速度 | 质量 | 说明 |
|---|---|---|---|
| 4-bit experts, FMA kernel | 4.36 tok/s | Excellent | 当前最佳,完整工具调用 |
| 2-bit experts | 5.74 tok/s | Good* | 破坏JSON/工具调用 |
| 2-bit peak single token | 7.05 tok/s | Good* | 预热后爆发 |
硬件配置
- 机器:MacBook Pro, Apple M3 Max
- 芯片:16核CPU (12P + 4E), 40核GPU, 16核ANE
- 内存:48GB统一内存 (~400 GB/s带宽)
- SSD:1TB Apple Fabric, 17.5 GB/s顺序读
核心技术
- SSD专家流式传输:209GB 4-bit模型从NVMe SSD按需读取,仅加载K=4激活专家(~6.75MB/layer)
- FMA优化去quant内核:12%性能提升
- Metal计算着色器:手写内核处理去quant、SwiGLU、RoPE、MoE
- "Trust the OS"原则:使用OS页面缓存(~35GB)而非自定义缓存,71%命中率
性能优化经验
有效的优化:
- FMA dequant kernel: +12% tok/s
- Trust OS page cache: +38% (删除Metal LRU后)
- GPU combine+norm in CMD3: 消除CPU往返
- BLAS delta-net (Accelerate): +64% attn
- C BPE tokenizer: 20x启动加速
适得其反的优化:
- LZ4专家压缩: -13% (解压开销 > 缓存节省)
- F_RDADVISE预取: 0% (统一内存下SSD DMA拖慢GPU -73%)
- 时序专家预测: -18% (25%命中率浪费SSD带宽)
- MLP路由预测: -18% (31%准确率比时序基线更差)
- GPU LUT去quant: -2% (间接寄存器访问序列化)
- mmap专家文件: -5x (冷数据页面错误开销)
架构洞察
核心洞察:"在Apple Silicon上,SSD DMA和GPU计算共享内存控制器,无法有效重叠"
GPU的去quant内核在~418 GiB/s带宽下饱和。即使小的后台SSD DMA也会通过内存控制器仲裁导致不成比例的GPU延迟峰值。串行流水线(GPU → SSD → GPU)是硬件最优的。
模型规格
- 总参数:397B (Qwen3.5-397B-A17B)
- 架构:60层Transformer = 45 GatedDeltaNet + 15标准全注意力
- 专家:每层512专家,激活K=4 + 1共享专家
- 隐藏维度:4096