LFM3系列模型开源,可在手机端完全离线运行
原文:LFM3-1.7B and LFM3-VL-2B running fully offline on iPhone and Android, plus what it took to export LFM3 to ExecuTorch (open source app)
LFM3 现已集成到 Private Mind——我们用于在 iOS 和 Android 上本地运行模型的开源应用。在视频中,LFM3-VL-2B 阅读一份日文拉面菜单:当被问及不辣的话该点什么时,它跳过了标有“激辛”(特辣)的那碗,选择了味噌拉面;当被问及能否刷卡支付时,它找到了价格下方“仅收现金”那一行。iPhone 16 Pro 上的数据:LFM3-1.7B(文本),GPU 上 MLX 4-bit:约 40 tok/s,首 token 耗时低于 0.5 秒;LFM3-VL-2B 带一张照片:首 token 约 9 秒,解码约 20 tok/s。同一对话中的文本追问约 5 秒开始。将 LFM3 导出到 ExecuTorch:LFM3 并不是参数更多的 LFM2,ExecuTorch 现有的 LFM2 导出并不覆盖它。新增的部分包括:24 层,混合门控短卷积(宽度 7)、全注意力和滑动窗口注意力(窗口 256);每个注意力头输出上都有一个 sigmoid 门;对 Q 和 K 使用 RMSNorm;每种层类型使用不同的 RoPE:全注意力只旋转一半的头维度,theta 为 1e6,滑动层使用 theta 1e4;每个块周围都有 sandwich norm。因此我用纯 PyTorch 重写了解码器以便导出,并对照 Liquid 的参考实现进行了检查:最大 logit 差异为 0.00005,前 10 个 token 相同。我最喜欢的部分是滑动窗口缓存。ExecuTorch 内置的环形缓冲区缓存大小是窗口的 2 倍,这会将单次前向调用限制在 512 个 token,因此长提示必须分成小块输入。我给滑动层设置了 window + 2048 的缓冲区,并让注意力掩码强制执行 256 token 的窗口,这样一次调用可以接收 2048 个 token,而上下文仍可达到 8192。最终产出两个构建:用于 Apple GPU 的 MLX 4-bit(1.07 GB),以及用于 iOS 和 Android 上 CPU 的 XNNPACK 8da4w(1.17 GB)。LFM3 的导出文件在 Hugging Face 上:https://huggingface.co/software-mansion/LFM3-ExecuTorch 由 /u/K4anan 提交 [链接] [评论]