- 大模型
- 模型量化
- 本地部署
- 人工智能
- 代码模型
【免费下载链接】flint-oQ3e
flint-oQ3e 是 RecursiveSI/flint(40B MoE 模型)针对 Apple Silicon 的 3-bit 量化版本:体积从 79.6 GB 压缩到 18.5 GB,但在 MacBook Pro M5 Max 上实测 tok/s 反而比 oQ4e 慢。本文基于仓库内真实测速数据,深度剖析「为什么 3-bit 量化反而不快」,并揭秘 oMLX 融合 MoE 内核带来的 16% 提速原理,帮你选对量化档位。
flint-oQ3e 是什么:18.5 GB 跑 40B MoE 模型
flint-oQ3e 是 RecursiveSI/flint 的量化变体,专为内存紧张的 Mac(24–32 GB)设计,采用 oMLX 的oQ3e方案:数据驱动的混合精度 + imatrix 校准裁剪。
核心规格一览:
| 项目 | 参数 |
|---|---|
| 总参数 | 40B(每 token 激活约 2.5B) |
| MoE 结构 | 49 层 = 2 层 dense + 47 层 MoE,256 个路由专家,top-6 + 1 个共享专家 |
| 注意力 | 35 层滑动窗口(513 token)+ 14 层全注意力,支持 262k 上下文 |
| 磁盘体积 | 18.5 GB(约 3.71 bpw),bf16 版为 79.6 GB |
| 峰值内存 | 短上下文约 18.5 GB,16k 上下文约 20.0 GB |
MoE 结构细节可以在 config.json 中查到:num_experts: 256、num_experts_per_tok: 6、num_hidden_layers: 49。
混合精度是怎么分配的?
oQ3e 并不是「整个模型一刀切 3-bit」,量化器会在 bf16 权重上逐层测量敏感度,然后按重要程度分配位数:
- 路由专家:3-bit(体积大头,敏感度低,放心压)
- 共享专家、dense 层、
embed_tokens:8-bit lm_head:6-bit- 注意力投影:按各层实测敏感度,在 6-bit 与 8-bit 之间分配
这些逐张量的分配记录在 config.json 的quantization字段里,可以逐一核对。
后缀里的「e」代表额外的imatrix 校准:用 128 条校准样本测量激活值重要性,为每个量化组挑选更优的裁剪范围。它不改变哪个张量用几 bit,只调张量内部的 scale。完整的校准过程记录在 oq_imatrix_report.json 中:共处理 256 条样本、覆盖 532 个模块、36096 个专家全部被激活采样到(active_ratio: 1.0),保证裁剪范围统计充分。
tok/s 实测全表:oQ3e 为什么比 oQ4e 慢
以下数据来自 README.md 的 Speed 章节:greedy decode、256 token、3 次运行取中位数,开启 oMLX 融合 Flint decode 路径,测试机为 MacBook Pro M5 Max 128GB(40 GPU)。
| 变体 | ~30 token 上下文 | 4k | 16k | 峰值内存 |
|---|---|---|---|---|
| oQ8e | 110 | 103 | 95 | 42.4–43.9 GB |
| oQ6e | 108 | 96 | 87 | 32.9–34.4 GB |
| oQ5e | 103 | 97 | 91 | 28.2–29.7 GB |
| oQ4e | 120 | 110 | 105 | 23.5–25.0 GB |
| oQ3e(本仓库) | 109 | 106 | 98 | 18.5–20.0 GB |
| oQ2.7e | 123 | 112 | 105 | 16.3–17.8 GB |
| oQ2.5e | 117 | 106 | 99 | 15.6–17.1 GB |
| oQ2e | 130 | 124 | 113 | 14.0–15.5 GB |
规律非常清晰:oQ4e 是速度拐点。往下压到 oQ3e 甚至 oQ2e,内存持续变小(18.5 GB → 14.0 GB),但速度没有同步提升,oQ3e 短上下文只有 109 tok/s,反而低于 oQ4e 的 120 tok/s。
⚠️ 官方提示:各变体都是在同一会话中与 oQ4e 对比测的;跨会话的绝对数值会有约 10% 的漂移,小于 10% 的差异应视为噪声。
原因一:激活参数太小,解码由「内核启动开销」主导
flint 每个 token 只激活约 2.5B 参数。在这个规模下,逐 token 解码的瓶颈不是「算得快不快」,而是内核启动(kernel launch)开销与访存延迟——GPU 大部分时间在等调度,而不是在等矩阵乘法。
位宽从 4 压到 3,减少的是权重读取的字节数,但当瓶颈在调度层时,省下的带宽自然换不来 tok/s。这也解释了为什么表里 oQ2e 的 130 tok/s 只是「噪声级别」的领先,而非线性收益。
原因二:混合精度下 3-bit 不是「整体 3-bit」
如前文所述,oQ3e 中只有路由专家是 3-bit;注意力层仍是 6/8-bit 混合,dense 层、嵌入层是 8-bit。也就是说:
- 整体位宽是 3.71 bpw(bits per weight),并不接近理论 3-bit
- 解码路径里每次前向仍有大量 6/8-bit 张量参与运算,计算量没有「降一个数量级」
- 而 3-bit 的反量化本身开销更大:affine 3-bit 权重需要更多解包/重排计算,且不像 4-bit 那样有天然的位对齐优势,这部分成本进一步吃掉收益
原因三:大位宽档位的 5–15% 变慢是「真信号」
表格另一端同样值得注意:oQ5e、oQ6e、oQ8e 比 oQ4e慢 5–15%。位宽越高,每个 token 要搬运和反量化的字节越多,当激活规模足以让访存参与瓶颈时,代价就显现了。这与 oQ3e 的「不快」是两个不同机制——一个是瓶颈不在带宽,一个是带宽真的不够用。
oMLX 融合 MoE 内核:白拿的 16% 提速
相比纠结量化档位,更实际的提速点在运行时。oMLX 为 Flint 的单 token 解码提供融合 MoE 路由/合并(routing/combine)内核,把「路由打分 → 专家分发 → 结果合并」这几步拆开多次访存的逻辑融合进一个内核,官方实测:
- 短上下文从约108 → 125 tok/s,提升约16%
- 2026-10-27 起的 oMLX 构建(本仓库使用
e2396c7构建)默认开启,无需任何配置
这个收益对所有 oQ 变体都有效——包括本文主角 oQ3e。也就是说,同样是 oQ3e,用旧版 oMLX 跑和不跑融合内核,tok/s 能差出近 16%,差距比 oQ3e 与 oQ4e 之间的档位差还大。
质量代价:KL 约 3 倍于 oQ4e
速度没赚到,质量呢?以下是 README.md 保真度表格(64 段 × 2048 token 语料,KL 截断至 bf16 top-256):
| 模型 | 体积 | 平均 KL ↓ | 困惑度 ↓ | top-1 一致率 ↑ |
|---|---|---|---|---|
| bf16 | 79.6 GB | 0(基准) | 14.30 | 100% |
| oQ4e | 23.4 GB | 0.222 | 14.86 | 78.3% |
| oQ3e | 18.5 GB | 0.650 | 16.92 | 64.6% |
| oQ2e | 13.9 GB | 1.519 | 28.99 | 50.2% |
oQ3e 的平均 KL 约为 oQ4e 的 3 倍,官方定性为「明显更掉质量(clearly lossier),且并不更快」。所以 oQ3e 的定位很明确:给 oQ4e 装不下的 Mac 用的「能跑档」,不是「最优档」。
两步跑起来:安装与启动
方式一:oMLX(官方推荐),提供 OpenAI 兼容 API,支持 tool calls,推理内容返回在reasoning_content字段:
hf download mlx-community/flint-oQ3e omlx serve下载后模型以mlx-community--flint-oQ3e出现,直接 serve 即可。
方式二:mlx-vlm(需 ≥ 0.7.10):
pip install -U "mlx-vlm>=0.7.10" mlx_vlm.generate --model mlx-community/flint-oQ3e \ --prompt "Write a Python function that merges overlapping intervals." \ --max-tokens 4096 --temperature 1.0采样参数建议沿用上游推荐(记录在 generation_config.json 中):temperature 1.0、top-p 0.95、top-k 20,难题的输出预算至少 32k token(推理与答案共享该预算),并且多轮对话中要保留历史里的 reasoning 内容。
怎么选:oQ3e vs oQ4e 一张表总结
| 场景 | 建议 |
|---|---|
| 内存 ≥ 24 GB 能装下 oQ4e(23.4 GB + KV cache) | 选oQ4e:快约 10% 且质量高一档 |
| 只有 16–20 GB 可用内存 | 选oQ3e(18.5 GB);预算再紧可看 oQ2.7e(16.2 GB) |
| 追求极致 tok/s 且内存紧张 | oQ2e(13.9 GB,130 tok/s),但要接受 50% 的 top-1 一致率 |
| 任何变体 | 用 2026-10-27 之后的 oMLX,白拿融合内核的 ~16% |
一句话结论:在 flint 这类「大总参、小激活」的 MoE 上,3-bit 化量省的是内存不是速度;真正的 tok/s 大头来自 oMLX 的融合 MoE 内核。量化档位请优先按内存预算选,速度请优先按运行时版本选。
- 大模型
- 模型量化
- 本地部署
- 人工智能
- 代码模型
【免费下载链接】flint-oQ3e
相关推荐
为什么2-bit模型反而更快?flint-oQ2.7e融合MoE Kernel提速16%与解码瓶颈完整解析
为什么2 bit模型反而更快?flint oQ2.7e融合MoE Kernel提速16%与解码瓶颈完整解析 如果你一直在用直觉理解"位宽越低、模型越大、跑得越慢
大模型模型量化本地部署人工智能代码模型为什么flint-oQ2e是最快的?130 tok/s生成速度与内存占用数据深度解读
为什么flint oQ2e是最快的?130 tok/s生成速度与内存占用数据深度解读 flint oQ2e 是面向 Apple Silicon(MLX 生态)的
人工智能大模型模型量化本地部署机器学习为什么4-bit反而比5-bit更准?PaddleOCR-VL-1.6-5bit揭秘量化评测里的隐藏陷阱
为什么4 bit反而比5 bit更准?PaddleOCR VL 1.6 5bit揭秘量化评测里的隐藏陷阱 在 Apple Silicon 上部署 PaddleO
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考