Laya 小模型登陆 Mac 神经引擎,本地跑通 Snake
开源小模型 Laya 借助 Core ML 与 Apple 神经引擎在 Mac 本地运行,演示 Snake 游戏并提供结…
Laya 是一款主打「类型化决策」(typed decisions)的开源小模型,强调在 Apple Silicon 上本地运行:借助 Core ML 与 Apple 神经引擎(ANE),它能直接返回选项概率、序数评分和布尔判断结果,而不是自回归生成文本。模型权重已发布在 Hugging Face,推理包以 laya-coreml 为名上架 PyPI,并附带一个可以离线运行 Snake 游戏的演示项目。
模型定位:返回结构化概率的小 LLM
Laya 并不像常规大模型那样逐字生成回答,而是为调用者预定义一组问题字段(例如「refund」「score」「noul」),在 agent.predict() 调用中一次性返回每个字段的概率分布。仓库示例询问「客户申请重复支付的退款」时,模型会直接给出「refund」字段的答案概率,省去 JSON 解析和后处理。这种设计把模型压缩成一个轻量级的分类/评分头,适合路由、规则判断等场景。
仓库在 Hugging Face 同时发布了多个 checkpoint:原始的 Laya 421M(512 tokens)、通用多语种版 322M(1024 tokens)、Typed Decisions 421M,以及针对 Snake 游戏的专用版本。其中「Multilingual ANE」专门面向 Apple 神经引擎优化,FP16 版本上下文容量为 96 tokens,W8 近似量化版提供更小体积。
神经引擎优化:跳过 PyTorch 与 Transformers
演示流程非常轻量:仅需 pip install 'laya-coreml[demo]',再通过 hf download 拉取权重即可运行。运行时不依赖 PyTorch、Transformers 或 MLX,模型权重被直接转换为 Core ML 计算图并落到 ANE 上执行。项目作者明确说明,ANE 路径与普通 SDPA Core ML 导出是两条不同实现,不能简单切换设备复现 ANE 数字。
为防止温度参数造成 logits 过度锐化,仓库参照上游 v0.3.5 将校准温度裁剪到 [0.5, 5.0] 区间;被裁剪的桶会以 RuntimeWarning 显式标注,原始值仍可通过 agent.temperature_raw 等接口取回。
实测性能:M3 Max 上单次决策约 5 ms
- 硬件:M3 Max,40 核 GPU,128 GiB 内存,macOS 27.2。
- 测试方式:一条 91 tokens 的问题填充到 96 tokens,循环进行 prompt 准备、分词、同步推理、校准与格式化;六组交替的 20 秒块共计 65,598 次稳定调用。
- 关键结果(单问题延迟,非 Snake 整帧):
- Compiled MLX FP16:P50/P95 = 6.94 / 7.39 ms。
- Core ML ANE FP16:P50/P95 = 4.98 / 5.31 ms,能耗 0.1540 J/决策。
- Core ML ANE W8:P50/P95 = 4.88 / 5.23 ms,能耗 0.1344 J/决策。
- 系统级能耗:相比 MLX FP16,ANE FP16 每决策能耗约为其 1/2.78,W8 版本进一步降到 1/3.19;功率从约 61.39 W 降至 27–31 W 区间。
- Snake 演示:在三次不限步数(每局 600 步)的完整循环中,决策速率稳定维持在 49.1–50.0 次/秒,零死亡,出现两次安全干预。
能耗数据来自 SMC PSTR 传感器直读,并做了异常值剔除,作者将其标注为「估算值」。需要注意的是,10× 性能提升的早期目标在本次测量中并未达成;ANEP50 仅比 MLX FP16 快约 1.39×。
转换保真度与边界
仓库公布了三类保真度测试结果:
- 三款通用 FP16 检查点在上游 189 道验证题上答案完全一致,且每题重复 100 次调用均通过。
- ANE FP16 L96 在 59 道拟合题上全部通过,最大校准概率漂移仅 0.002925;W8 版本在同一子集漂移为 0.014393,仍低于 0.02 的门限。
- 6-bit 与 4-bit 实验未通过该门限,因此没有发布对应权重。
项目同时坦言,1024 tokens 的 ANE FP16 图虽然能在 63/63 完整测试集上通过,但单次串行推理约 91.7 ms,并未显示出长上下文优势;当前 ANE 适配器在 Snake 三次顺序调用下,也无法稳定给出相对于 MLX 的整局加速。换言之,文中数字主要说明「短决策」路径,而非通用长上下文性能。
使用方式与限制
安装与运行命令较为简洁:pip install laya-coreml[demo] 安装后,用 hf download aac6fef/laya-multilingual-coreml-ane --local-dir models/snake 拉取权重,再执行 laya-coreml-snake --model ./models/snake 即可在终端玩 Snake。终端需 104 列 × 35 行,空格暂停、↑/↓ 调速、R 重置、Q 退出;首次 Core ML 初始化可能需要数十秒。
作为库使用时,调用者可以传入 local_files_only=True 强制使用本地缓存。ANE 路径总长上限为 96 tokens(问题 + 选项 + 状态),超出会抛容量错误;需要更长上下文时,可改用 aac6fef/laya-multilingual-coreml 的 1024 tokens 通用模型,但该路径在本次基准中未取得明显性能收益。
