☰
Edge0 基准测试数据全解读:15 tok/s 解码、1GB 内存占用、冷/热 Prefill 差异一次说清
2026/10/5 0:55:40 网站建设 项目流程

Edge0 基准测试数据全解读:15 tok/s 解码、1GB 内存占用、冷/热 Prefill 差异一次说清

【免费下载链接】Edge0项目地址: https://gitcode.com/gh_mirrors/ed/Edge0

Edge0 是一款开源的流式 MoE 推理框架,核心能力是"SSD 专家卸载 + Recover-LoRA + prerouter 路由预测",让 35B 级大模型在消费级硬件上跑起来。本文带你逐行读懂官方基准数据:解码 15 tok/s 是怎么测出来的、为什么峰值内存只要 1 GiB、冷/热 Prefill 相差数倍的背后又是什么原理——一次说清。

先看结论:两个档位的官方基准数据

Edge0 随框架提供两个模型档位,官方基准数据(实测于Mac mini M4 Pro,24 GB)如下:

档位解码速度Prefill 吞吐(冷 / 热)*峰值活跃内存磁盘占用
edge0-35b(40 层 × 256 专家,K=4)14.9–17.7 tok/s113 / 140 tok/s2.9 GiB~23 GB
edge0-8b(24 层 × 128 专家,K=8)23.9–25.3 tok/s500 / 1428 tok/s1.0 GiB~4.2 GB

*Prefill 吞吐基于约 3.3k token 的长提示词测量。数据完整出处见 README.md 的 Benchmark 一节,模型细节见 docs/models/edge0-35b.md 与 docs/models/edge0-8b.md。

💡 一眼看重点:35B 级模型跑在15 tok/s左右(肉眼流畅阅读速度),而内存占用只有 2.9 GiB——它跑的不是"23 GB 全量加载",而是"活跃专家集"。这正是下面要拆解的核心。

基准测试方法:数字是怎么测出来的

解读数据之前,先明确测量口径(实现见 python/examples/bench.py):

  1. Prefill 阶段:用约 3.3k token 的合成长提示词(BENCH_LONG=1),避免短提示词只测出固定开销;
  2. 解码阶段:先跑 10 步"不计时的采样预热"(首 token 受专家冷启动影响大),再计时采样 200 个 token;
  3. 每个档位跑 2 轮,报告 tok/s 均值与 MLX 峰值活跃内存。

新手注意:tok/s 指解码(decode)速度,即逐 token 生成速度;Prefill 吞吐是理解长输入的速度,两者是完全不同的指标。

15 tok/s 解码:35B 模型为何能"流畅对话"

edge0-35b解码实测 14.9–17.7 tok/s,接近人类快速阅读速度。三个关键原因:

  • 每 token 只激活少量专家:MoE 架构下每层仅路由 K=4 个专家(35b)或 K=8 个(8b),单 token 计算量远小于稠密模型;
  • prerouter 提前一步预测路由:训练好的预测头在生成第 t 个 token 时,就预判第 t+1 步要用的专家集合,让 SSD 读取与 GPU 计算完全重叠,官方数据显示解码吞吐最多可提升+59%(机制详见 docs/prerouter.md);
  • 8b 档位更快:edge0-8b解码 23.9–25.3 tok/s,参数更少(约 7.9B 总 / 1.2B 激活),适合延迟敏感场景。

1 GiB 内存占用:峰值内存由谁决定

这里最容易误解:峰值活跃内存 ≠ 模型大小。

  • edge0-8b:checkpoint 有 4.2 GB,峰值内存仅~1.0 GiB
  • edge0-35b:checkpoint 有 23 GB,峰值内存仅~2.9 GiB

原理(详见 docs/streaming.md):35b 模型每层 256 个专家的 4-bit 权重约 310 MB,40 层全驻留远超设备内存。Edge0 的做法是——权重留在 SSD,按需求 mmap 进 GPU,再用 LRU 缓存 + 预取 + 固定槽位把"每步搬运几十 MB"降到"几乎不搬"。内存上限由活跃专家集决定,而不是参数量。

⚠️ 部署建议:给系统、tokenizer 和长上下文 KV 增长留出余量,24 GB 机型跑 35b 很从容;16 GB 机型建议关注"按需 Prefill"选项(下文会讲)。

冷/热 Prefill 差异:同一份数据为何差 3 倍

表中113 / 140与500 / 1428 tok/s就是冷/热之分:

  • 冷(Cold):进程启动后的第一个请求,专家权重从 SSD 首次故障读入,读的是整块文件;
  • 热(Warm):后续请求,权重已在**页缓存(page cache)**中,几乎零 SSD 开销。

以edge0-8b为例,冷热 Prefill 吞吐差2.86 倍。更极端的例子来自 27-token 短提示词的冷缓存实测(出处:docs/models/edge0-8b.md):

Prefill 策略冷缓存读取量冷缓存耗时
E3b 整层加载(默认)≈4.1 GiB~5.3 s
按需加载--prefill-ondemand≈0.4–0.8 GiB0.6–1.1 s

而热缓存下反过来:整层加载最快(27 token 提示词 0.24 s vs 按需 0.37 s)。所以官方建议:内存大、页缓存装得下 checkpoint 的机器用默认路径;16 GB 级内存机器改用--prefill-ondemand,只读路由命中的专家,冷启动快 5 倍。

📌 实际体验含义:Edge0 服务首次请求稍慢是正常的(权重从 SSD 读入),之后对话会明显更流畅——这不是 bug,而是 SSD 流式卸载的正常行为。

如何复现这份基准数据

两条命令即可(需先安装框架并下载模型,详见 README.md 的 Getting Started):

cd python python examples/bench.py edge0-35b # 通过 $EDGE0_35B_MODEL 定位模型 python examples/bench.py edge0-8b # 通过 $EDGE0_8B_MODEL 定位模型 BENCH_LONG=1 python examples/bench.py edge0-8b # 启用 ~3k token 长提示词

更多可调项(--ntok、--warmup、采样参数)见 python/examples/bench.py 文件头部说明。整体数据流(Prefill 整层加载 → 双缓冲解码 → 采样)可参考 docs/architecture.md。

一张图收尾:数据全解读速查

指标数值一句话解读
35b 解码14.9–17.7 tok/sprerouter 预测让 SSD 读取被计算掩盖
8b 解码23.9–25.3 tok/s小激活参数 + K=8 路由的高吞吐档位
35b 峰值内存~2.9 GiB只驻留活跃专家,而非 23 GB 全量
8b 峰值内存~1.0 GiB4.2 GB checkpoint → 1 GiB 内存
冷 Prefill(8b)500 tok/s首请求从 SSD 读入权重
热 Prefill(8b)1428 tok/s页缓存驻留,差 2.86 倍

理解这三个数字,就理解了 Edge0 的核心设计:内存天花板与模型大小解耦,磁盘带宽被预测性预取掩盖。下次你在 Mac mini 上跑 35B 模型只看到 ~3 GB 内存占用时,就不用惊讶了 😉

📚 延伸阅读:docs/models/edge0-35b.md · docs/models/edge0-8b.md · docs/streaming.md · docs/prerouter.md

【免费下载链接】Edge0项目地址: https://gitcode.com/gh_mirrors/ed/Edge0

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询