Flash-MoE:MacBook 上跑动 397B 大模型
纯 C/Metal 实现,在 48GB 内存的 MacBook Pro 上运行 3970 亿参数混合专家模型,达到 4.4+ tokens/秒
背景
本地运行大模型一直是开发者的梦想,但 3970 亿参数的模型通常需要昂贵的专业硬件。Flash-MoE 项目打破了这一限制——只需要一台 48GB 内存的 MacBook Pro,就能以 4.4+ tokens/秒的速度运行 Qwen3.5-397B 模型。
整个项目无 Python,无框架,仅使用 C、Objective-C 和手写的 Metal shader。
技术架构
混合专家模型(MoE)
Flash-MoE 运行的是 Qwen3.5-397B-A17B,这是一个混合专家(Mixture of Experts)模型:
| 组件 | 规格 |
|---|---|
| 参数量 | 3970 亿(397B) |
| Transformer 层数 | 60 层(45 层 GatedDeltaNet + 15 层标准注意力) |
| 专家数量 | 512 个,每 token 激活 K=4 个 + 1 个共享专家 |
| 隐藏维度 | 4096 |
核心创新:SSD 专家流式加载
模型权重达 209GB,显然无法全部装入内存。Flash-MoE 的解决方案是从 NVMe SSD 按需流式传输:
- 激活的 K=4 个专家权重按需从 SSD 读取(每个约 6.75MB)
- 交由 OS 页面缓存自动管理(约 35GB 可用缓存)
- 页面缓存命中率达到约 71%
手写 Metal Shader 优化
项目实现了多项 GPU 优化:
-
FMA 优化的反量化内核:将
(nibble * scale + bias) * x重排为fma(nibble, scale*x, bias*x),让 GPU 融合乘加单元一步完成,速度提升 12% -
延迟 GPU 专家计算:CMD3(前向传播)提交后不等待,GPU 执行的同时 CPU 准备下一层
-
Accelerate BLAS 加速线性注意力:使用
cblas_sgemv等加速 GatedDeltaNet,64% 速度提升
性能表现
| 配置 | 速度 | 质量 | 说明 |
|---|---|---|---|
| 4-bit 专家 + FMA | 4.36 tok/s | 优秀 | 生产配置,完整工具调用支持 |
| 4-bit 专家(基线) | 3.90 tok/s | 优秀 | FMA 优化前 |
| 2-bit 专家 | 5.74 tok/s | 良好* | *JSON/工具调用有问题 |
使用方法
# 编译
cd metal_infer && make
# 4-bit 推理
./infer --prompt "Explain quantum computing" --tokens 100
# 交互式聊天(带工具调用)
./chat
# 分层计时分析
./infer --prompt "Hello" --tokens 20 --timing
内存管理
Flash-MoE 的内存控制非常精细:
- 非专家权重:5.5GB(mmap’d,只读)
- Metal scratch 缓冲区:~200MB
- 总计仅 ~6GB,剩余 42GB 留给 OS 页面缓存
- 无 OOM 风险,专家数据按需从 SSD 流式传输
总结
Flash-MoE 展示了几个重要趋势:
- 消费级硬件也能跑大模型:通过创新的 MoE 架构和 SSD 流式加载,397B 模型首次可以在消费级设备上运行
- 纯系统编程的力量:不用 Python,不用框架,C + Metal 也能写出高性能推理引擎
- GPU 和 SSD 协同:利用统一内存架构和高速 SSD 带宽,是未来大模型部署的重要方向
项目地址:danveloper/flash-moe
相关文章
评论
加载中...
评论
加载中...