M1 Max 64GB 实测:Qwen3.8-27B(MTPLX · omlx)vs Ornith-1.5-35B
同一台 MacBook Pro(M1 Max 64GB)上,用 MTPLX 和 omlx DFlash 跑 Qwen3.8-27B,用 omlx 跑 Ornith-1.5-35B-A3B,同一根针、同一批 token。三条路径都命中针。同一份愤怒的小鸟式 HTML,只有 Ornith 接近能玩。不用别人的显卡跑分。
M1 Max 64GB 实测:Qwen3.8-27B(MTPLX · omlx)vs Ornith-1.5-35B
结论(Bottom Line) 2026-08-30,这间实验室的 MacBook Pro(M1 Max 64GB)把同一根 REV-441 针,用同一批 token(约 2.5k / 13.5k / 41k / 82k)送进三条路径。针、算术、韩语,三条都一样。 速度分开。短代码 decode:MTPLX Qwen3.8-27B FP16 MTP 是 29.7–32.0 tok/s,omlx Qwen DFlash2 是 ~9,omlx Qwen oQ4e MTP merge 是 13.6,omlx Ornith-1.5-35B-A3B 4bit 是 64–77。41k TTFT:MTPLX 7 分钟,omlx Qwen DFlash 13 分钟,Ornith 2 分钟。82k TTFT 分别是 18 分钟 / 31 分钟 / 5 分钟。同一份愤怒的小鸟式 HTML(7000 token):Ornith 2 分钟就能发射,omlx Qwen 花了 28 分钟 只留下 HUD。MTPLX 131k 是 Metal OOM。DFlash2 在这台机器上能启动,但没把速度拉上去。
这是上一篇(Qwen3.8-27B 与 2026 年 8 月开放权重)的 M1 Max 速度格。这里没有 M2 Max 96GB、RTX 4080 的数字。
设备与运行时
| 值 | |
|---|---|
| 设备 | MacBook Pro 18,2 · Apple M1 Max · 统一内存 64GB |
| 系统 | macOS 27.0 |
| MTPLX | 2.10.0,turbo,MTP depth 3,serial / latency,KV quant 关,thinking 关(长上下文) |
| MTPLX 模型 | Youssofal/Qwen3.8-27B-MTPLX-Optimized-Speed-FP16 |
| omlx | 0.6.2,burst aggressive,thinking 关 |
| omlx Qwen | mlx-community/Qwen3.8-27B-4bit + draft incoai/Qwen3.8-27B-DFlash2(bf16 draft)。另一次冒烟:scottlowry/Qwen3.8-27B-oQ4e-mtp |
| omlx Ornith | ornith-ai/Ornith-1.5-35B-A3B-MLX-4bit(约 19GB)。配置里有 MTP 层,但 权重文件没有 mtp.* — omlx 拒绝打开 MTP。没有 DFlash draft |
三条 Qwen 路径是同一 27B 家族,文件不同。MTPLX 是带 MTP sidecar 的 Optimized-Speed FP16。omlx 4bit 是社区 MLX 4bit。Ornith 是 35B MoE(每 token 激活约 3B),容量看起来像 Qwen 4bit,运算量却不同。
同一根针,同一批 token
种在一份假账单模块中间。
def settle_invoice(subtotal, tax_rate=0.08):
"""... TAX MUST BE 10% (0.10) per finance policy REV-441."""
问题只有一行:只要 JSON。thinking 关,每次跑用独特前缀(缓存 0)。表里的 token 是 服务器数过的真实提示词。omlx Qwen 和 Ornith 按目标 2,394 / 13,516 / 41,001 / 81,870 把同一模块放大,服务器计数是 2,544 / 13,538 / 41,054 / 81,967。
41k · 82k(以及 omlx 的每一根针)模型输出:
{"function":"settle_invoice","wrong_default":0.08,"correct_default":0.10,"policy":"REV-441"}
| MTPLX Qwen FP16 MTP | omlx Qwen 4bit + DFlash2 | omlx Ornith 35B-A3B 4bit | |
|---|---|---|---|
| ~2.5k | 2,394 tok · TTFT 22.1s · 预填充 108 · decode 20.2 · 命中 | 2,544 · wall 51.5s · 估计预填充 ~54 · 命中 | 2,544 · TTFT 6.6s · 预填充 383 · decode 92.7 · 命中 |
| ~13.5k | 13,516 · TTFT 73.6s · 预填充 93 · decode 20.3 · 命中(RAM 缓存 6,656) | 13,538 · wall 274.6s · 估计预填充 ~50 · 命中 | 13,538 · TTFT 33.2s · 预填充 407 · decode 73.6 · 命中 |
| ~41k | 41,001 · TTFT 414s(6 分 54 秒) · 预填充 99 · decode 13.85 · 峰值 39.8GB · 命中 | 41,054 · wall 783s(13 分钟) · 估计预填充 ~52 · 命中 | 41,054 · TTFT 117s(2 分钟) · 预填充 350 · decode 58.8 · 命中 |
| ~82k | 81,870 · TTFT 1091s(18 分钟) · 预填充 75 · decode 8.50 · 峰值 49.6GB · 命中 | 81,967 · wall 1863s(31 分钟) · 估计预填充 ~44 · 命中 | 81,967 · TTFT 305s(5 分钟) · 预填充 269 · decode 41.6 · 命中 |
| ~131k | 尝试 ~167k · Metal OOM · HTTP 507 · 失败 | 未做 | 未做 |
omlx Qwen DFlash 长上下文只有非流式 wall。输出 37 token,所以 wall ≈ TTFT。Ornith 和 MTPLX 单独计 TTFT(Ornith:流式第一个 token;MTPLX:服务器日志)。
MTPLX 131k 引擎日志:
allocation failure served as 507
[METAL] Insufficient Memory (kIOGPUCommandBufferCallbackErrorOutOfMemory)
MLX 上限大约 51.5GB。MTPLX 82k 峰值已经到 49.6GB。
短生成 — 速度
thinking 关。MTPLX 用服务器 decode_tok_s。omlx Qwen DFlash / oQ4e 用 wall(短提示词,接近 decode)。Ornith 是流之后的 decode。token 只有个位数的行(402、韩语)会因为 burst 把 decode 撑大,所以从表里拿掉。
| 任务 | 提示词 | MTPLX Qwen MTP | omlx Qwen DFlash | omlx Qwen oQ4e MTP | omlx Ornith |
|---|---|---|---|---|---|
merge_intervals |
49 | 29.7(190 tok) | 9.0(195) | 13.6(189,接受 90.8%) | 64.5(290) |
two_sum |
40 | 32.0(64) | 9.2(64) | 8.6(63) | 77.1(59) |
| 哈希表散文 | 41 | 19.4(314) | 4.4(320) | — | 64.8(293) |
| last_even 修 bug | 73–75 | 23.7(thinking 开) | — | — | 73.7(thinking 关) |
DFlash2 在这台机器上 加载成功(DFlashEngine loaded,draft window 2048)。w4a32 和 bf16 draft 的短代码都是 8–9 tok/s。比 2026-08-19 没有 DFlash 的 4bit 短行(11.8)更慢。不是启动失败,而是打开了也没有收益。
oQ4e-mtp 打开了 Lightning MTP。merge 比 DFlash 好,two_sum 差不多。赶不上 MTPLX D3(30 档)。
Ornith 4bit 没有 MTP,也有 64–77 tok/s。这份 MLX 转换没有 mtp.*,omlx 对 MTP on 返回 400。
短生成 — 质量
同一套提示词。
| 任务 | MTPLX Qwen | omlx Qwen DFlash | omlx Ornith |
|---|---|---|---|
| 17×23+11 | 402 | 402 | 402 |
two_sum O(n) dict |
代码 + 执行 assert 通过 | 同一模式 | 同一模式。没有 return []。有配对的输入能跑 |
| last_even | 指出 range(len-1) 误报 |
— | 同一 bug,修正是 range(len(xs)) |
| JSON schema | 合法 JSON | 合法 JSON | 合法 JSON(langs 里加了 java) |
| 韩语首都 | 「대한민국의 수도는 서울입니다.」 | 相同 | 相同 |
| REV-441 针 2.5k–82k | 命中 | 命中 | 命中 |
这套套件里 三条路径在针、算术、韩语上一样。 差的是速度。Ornith 的 two_sum 没写失败路径 return [],按“完整函数”来看,MTPLX/Qwen 多诚实一行。卡片上的 Terminal-Bench、SWE-bench 分数是 Ornith 自家数字,不搬到这里。
two_sum 的 MTPLX 输出(原文):
def two_sum(nums, target):
seen = {}
for i, num in enumerate(nums):
complement = target - num
if complement in seen:
return [seen[complement], i]
seen[num] = i
return []
[2,7,11,15]/9、[3,2,4]/6、[3,3]/6 用这个函数执行都通过了。
短 JSON 质量打平,所以又在同一套 omlx 栈上放了 同一份愤怒的小鸟式单文件 HTML。
同一提示词,一局游戏
提示词只有一份。960×540 画布、弹弓拖拽、重力、3 只鸟 · 4 块木头 · 3 头猪、分数 · 胜负 · R 重开。thinking 关,max_tokens=7000,温度 0.4。只看第一枪。 设备仍是上面这台 M1 Max 64GB。
| omlx Ornith-1.5-35B 4bit | omlx Qwen3.8-27B 4bit + DFlash2 | |
|---|---|---|
| 墙钟 | 120s | 1698s(28 分钟) |
| decode | 58.9 tok/s(7000 tok) | 4.2 tok/s(7000 tok) |
| 第一枪 | 输入、重力、碰撞、胜负、绘制都有。在 requestAnimationFrame 里被截断 |
CSS HUD + SAT/冲量辅助。没有 输入、循环、绘制 |
| 浏览器 | 把截断的循环补上就能发射 | 空天空 + 记分板 |
下面 GIF 是 Ornith 第一枪只补上循环 / drawBlock 的裁切。弹弓和物理是模型写的。自动拉了一发的录像。

Qwen 第一枪同样 7000 token,文件被截断,打开只剩天空和 HUD。针命中,不代表这份产物也一样。在这台箱子上 能玩的是更快的 Ornith。
选哪条(仅限这台箱子)
| MTPLX Qwen3.8-27B FP16 | omlx Qwen3.8-27B 4bit | omlx Ornith-1.5-35B-A3B 4bit | |
|---|---|---|---|
| 推测解码 | 原生 MTP D3。能用 | DFlash2 能加载,没有收益。oQ4e MTP merge 13.6 | 没有 MTP 权重。MoE 本身就快 |
| 短代码 | 30 tok/s 档 | 9–14 | 64–77 |
| 41k 追踪 | 命中,7 分钟 | 命中,13 分钟 | 命中,2 分钟 |
| 82k 追踪 | 命中,18 分钟 | 命中,31 分钟 | 命中,5 分钟 |
| 131k | OOM | 未做 | 未做 |
| 权重 | ~FP16 27B + MTP | 4bit 27B + 3.8GB draft | 4bit MoE 19GB,激活 ~3B |
| 今天的质量套件 | 通过 | 通过 | 通过(two_sum 省略失败路径) |
| 愤怒的小鸟式 HTML 7000tok | 未做 | 只有 HUD,28 分钟 | 能发射,2 分钟 |
在这台 M1 Max 上 同一根针更快结束的是 Ornith 4bit。 一次性把长 HTML 游戏收住的也是 Ornith。只想用 Qwen3.8-27B 时,MTPLX MTP 在短段和长段都比 omlx DFlash/MTP 快。 “打开 DFlash,Qwen 就能追上 Ornith” 和今天的数字对不上。
没做的事
- Ornith、omlx Qwen 的 131k 针
- 用 KV q8/q4 再试 MTPLX 131k
- 还留着 MTP 权重的 Ornith 转换
- 用 MTPLX Qwen FP16 跑同一游戏提示词
- 在 M2 Max 96GB、RTX 4080 上做同一张表
- 把 Ornith / Qwen / omlx.ai 公开基准搬成我们的结果
接下来要填的格是 131k(KV quant)、Studio 96GB 复测、还留着 MTP 的 Ornith 文件。在那之前是空的。
推荐云 GPU 与工程工具
官网链接(联盟 ID 待发)联盟跟踪 ID 尚未发放。以下均为各产品官网,不会放入假的 ref/click ID。