Flash-MoE: Running a 397B Parameter Model on a Laptop

LLM Apple Silicon Performance MoE

⭐⭐⭐⭐⭐ (5星) | GitHub

摘要

纯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

相关资源