内存从 70GB 砍到 3GBEdge0 的 SSD 专家卸载如何让消费者硬件跑动 35B MoE【免费下载链接】Edge0项目地址: https://gitcode.com/gh_mirrors/ed/Edge0Edge0 是一个开源的流式 MoE 推理框架核心能力是SSD 专家卸载 预路由预测prerouter Recover-LoRA。它把 35B 稀疏 MoE 模型的权重留在磁盘上、按需流式加载到内存把峰值活跃内存从 70GB 量级压缩到2.9 GiB让 24GB 内存的 Mac 甚至 iPhone 都能跑动 35B 模型。一、先搞清楚问题35B MoE 为什么装不进消费级硬件以 Edge0 的旗舰模型edge0-35b基于 Qwen3.6-35B-A3B为例项目数值总参数规模35B 级层数40 层每层路由专家256 个另加 1 个常驻共享专家每 token 激活专家数 K4单模型 fp16 权重约 70GBMoEMixture of Experts模型的特点是参数量巨大但每个 token 实际只激活其中一小部分专家。edge0-35b每 token 只跑 4 个专家98% 以上的专家权重在任意时刻都是闲置的。传统做法把全部权重一次性加载进内存——70GB 的 fp16 权重直接超过消费级设备的内存上限。Edge0 的思路相反权重常驻 SSD内存里只保留当前活跃的专家。峰值内存因此取决于活跃专家集合而不是参数总量。二、SSD 专家卸载把每步搬运几十 MB变成几乎不动SSD 专家卸载的完整设计在 docs/streaming.md 中描述核心组件都在 python/src/edge0/streaming/ 目录下模块职责mmap.py单文件按字节区间 mmap按张量名惰性读取启动时不预载任何权重cache.py跨层共享 LRU 专家缓存默认 64 个槽位layer.py每层一个状态机持有全部执行路径options.py类型化配置项它把从磁盘取权重这件事拆成了四条由快到慢的执行路径让热数据尽量留在内存里staged固定槽位双缓冲解码主力路径。预路由头预测下一 token 要用哪 4 个专家提前把权重填进固定槽位路由索引全程留在 GPU 上每层每步零主机同步。hotLRU 常驻 Top-N按衰减计数把高频专家堆成常驻栈命中即用。full-layer整层加载prefill 主力路径。由于 checkpoint 中每层 MoE 权重本身就是一个堆叠张量整层加载只是 9 次顺序读CPU 加载还和上一层的 GPU 执行重叠。exact按需加载最慢但最通用作为正确性基线。配合 4-bit 量化QuantSpec默认 4-bit / group 64 / affine定义见 python/src/edge0/moe/spec.py35B 模型落盘仅约23 GB——一块普通 SSD 就能装下而内存侧只保留 64 个专家的 LRU 缓存。三、prerouter 预路由让读权重和算模型并行SSD 方案最大的敌人是延迟MoE 解码每一步都要等上一层算完 → 路由 → 才知道该读哪些专家等于每步都在等磁盘。Edge0 的解法是一个经过训练的小型预测头prerouter详见 docs/prerouter.md双移预测第 N 层的头在 token t 时用本层输入预测第 N1 层在token t1的路由——层移一层 token 移一步解码步实际使用的专家集合就是 prerouter 的预测结果构造上零丢弃专家加载因此与 forward 完全重叠而不是卡在关键路径上。实测收益解码吞吐最高 59%且存储延迟越高、模型越大、K 越大收益越明显。edge0-35b带 33 个预测头覆盖第 6–38 层头结构见 python/src/edge0/prerouter/heads.py跨 token 的预测提交逻辑在 python/src/edge0/prerouter/stager.py。四、4-bit 量化之后Recover-LoRA 补回质量压到 4-bit 通常会掉点。Edge0 的做法是int4 底座保持冻结另训一组 LoRA 适配器r16, alpha32.0从 FP16 教师模型蒸馏补回大部分量化损失。适配器以.safetensors形式与模型放在同一目录加载时自动装配且始终不合并进底座——一份只读底座可服务多组适配器。在 OpenCompass 同配置对比下edge0-35bint4 适配器 prerouter相对 fp16 底座平均分只掉 3.9 分79.2 vs 83.2MMLU-Pro 甚至反超。模型规格与实测数据完整收录在 docs/models/edge0-35b.md。五、实测数据3GB 内存15 tok/s官方基准python/examples/bench.py3.3k token prefill → 200 token 采样解码模型解码速度Prefill 吞吐冷/热峰值活跃内存测试机edge0-35b14.9–17.7 tok/s113 / 140 tok/s2.9 GiBMac mini M4 Pro, 24 GBedge0-8b23.9–25.3 tok/s500 / 1428 tok/s1.0 GiBMac mini M4 Pro, 24 GB注意冷/热的差别冷启动时专家权重从 SSD 缺页读入第二次请求起由 page cache 承接整层加载路径因此更快warm 27-token prefill 0.24s vs 冷路径。24GB 内存的 Mac mini 跑 35B 模型、内存占用不到 3GB——这正是标题里70GB 砍到 3GB的出处70GB 是 fp16 全量驻留的成本3GB 是活跃专家集合的成本。六、从 Mac 到手机同一套配方四端落地权重在盘上、按需流入这套配方天然适合存储带宽远超内存容量的设备。目前仓库中四个平台运行时均已开源见 README 的 Platforms 一节PythonmacOS / Apple Siliconpython/ 目录edge0 serve一条命令起 OpenAI 兼容服务macOS 桌面端Rust 编写的 CLI / 守护进程 / 桌面应用见 macos/iOSSwift MLX Swift 的 iPhone 端上应用35B 权重经过 ios/tools/repack_experts.py 重打包为每层一次顺序读后直接打进 App见 ios/Android / WindowsKotlin 原生引擎、C Vulkan见 android/ 与 windows/。七、快速上手最低要求macOS Apple SiliconPython 3.1024GB 内存预留系统余量23GB 磁盘空间35B 4-bit 权重。三步跑起来cd python python3.12 -m venv .venv .venv/bin/pip install -e .[dev,fetch] .venv/bin/python scripts/fetch_models.py --tier edge0-35b --target-dir models .venv/bin/edge0 serve models/edge0-35b # OpenAI 兼容 /v1/chat/completions架构全貌可阅读 docs/architecture.md后端隔离、模块依赖方向、关键数据流MoE 路由细节见 docs/moe.md。技术报告《The Other Half of the Memory Wall: Serving 35B MoEs from SSD with Trained Routing Prediction》的 PDF 在 paper/main.pdf。一句话总结MoE 模型 98% 的权重本来就闲着Edge0 让它们继续住在 SSD 里用预路由预测把磁盘延迟藏进计算窗口于是 35B 的推理成本从70GB 显存变成了3GB 内存 一块 SSD。【免费下载链接】Edge0项目地址: https://gitcode.com/gh_mirrors/ed/Edge0创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考