ESC
开源 2 分钟阅读

laya-coreml:在 Apple Core ML 与 Neural Engine 上本地运行 Laya 类型化决策,M3 Max 短决策约 5 毫秒

开源项目 laya-coreml 将 Laya 类型化决策模型移植至 Apple Core ML 与 Neural Engine,在 M3 Max 上实现约 5 毫秒的本地短决策,每决策系统能耗比编译版 MLX FP16 提升 2.78–3.19 倍,提供可复现的速度与能耗基准、多个 Hugging Face 检查点,并附带本地贪吃蛇演示,无需 PyTorch 即可离线推理。

来源:GitHub

Laya Core ML 用真实本地模型概率玩贪吃蛇

Laya-CoreML

在 Apple Silicon 上进行开放权重的类型化决策。Core ML、Neural Engine、零生成 token。

PyPI · Hugging Face 权重 · 中文

一个真实的 Laya 模型在本地玩贪吃蛇,概率、分数、长度、延迟和安全干预全部可见。GIF 以 1 倍速回放一段录制的 Core ML 运行。游戏使用显式规划器特征和可见的循环安全层。

完整的活跃贪吃蛇循环在三轮不设上限的 600 步对局中持续保持 49.1–50.0 次决策/秒,零死亡、两次安全干预。游戏循环计时与节流速率限制包含渲染串行化开销;终端绘制不计入。

**在 M3 Max 上使用 ANE FP16,一次简短多语言决策:P50 4.98 毫秒 / P95 5.31 毫秒。**同一实验测得每决策全系统能耗比编译版 MLX FP16 好 2.78 倍。单独验证的 W8 调色板变体达到 4.88 毫秒和 3.19 倍能耗改进。这些是单问题结果,并非完整的贪吃蛇帧时间;所要求的 10 倍改进未能实现。

运行演示

Apple Silicon · macOS 15+ · Python 3.11–3.13。

pip install 'laya-coreml[demo]'
hf download aac6fef/laya-multilingual-coreml-ane --local-dir models/snake
laya-coreml-snake --model ./models/snake

下载一次,之后即可离线游玩。推理不需要 PyTorch、Transformers 或 MLX。终端需要 104 列 × 35 行。空格暂停;↑/↓ 调速;R 重置;Q 退出。首次 Core ML 初始化可能需要数十秒。

操作、录制与视频导出 · 实测稳定决策速率 · 可分享的视频与录制来源

请求一次决策

pip install laya-coreml
import laya_coreml as laya

agent = laya.load("aac6fef/laya-multilingual-coreml-ane")
result = agent.predict(
    "The customer requests a refund of a duplicate payment.",
    {
        "refund": {
            "type": "noul",
            "instructions": "Does the customer request a refund?",
        }
    },
)
print(result["answers"]["refund"])

Laya 为 choice(选择)、序数 score(评分)和布尔 noul 问题返回概率。没有自回归解码,也没有需要解析的生成式 JSON。Hub 模型在初始化前下载;后续预测保持在本地。传入 local_files_only=True 以要求已有缓存,或加载本地目录。

ANE 包有 96 token 总限制,包括问题、选项和状态。更长的请求会引发容量错误。请使用 aac6fef/laya-multilingual-coreml 获取通用的 1024 token 模型。完整 API、模型选择与离线使用。

在 M3 Max 上实测

40 核 GPU、128 GiB 内存、macOS 27.2。一个 91 token 问题填充至 96,包括提示准备、分词、数组、同步推理、校准和格式化。加载与预热不计入。MLX 启用了编译、前缀缓存和形状分桶。每种实现各六个交替的 20 秒区块,共产生 65,598 次稳定调用。

指标编译 MLX FP16Core ML ANE FP16Core ML ANE W8
P50 / P956.94 / 7.39 ms4.98 / 5.31 ms4.88 / 5.23 ms
平均系统功率估算61.39 W30.75 W27.39 W
每决策系统能耗0.4288 J0.1540 J0.1344 J
速度增益1×1.39×1.42×
系统能耗增益1×2.78×3.19×

能耗使用直接的 SMC PSTR 传感器读数,包含原始样本和明确的异常剔除。这是带有传感器与后台负载不确定性的估算。速度增益 × 平均功率比 = 能耗增益;把能耗再乘以速度会重复计算时间。W8 变体在保留 FP16 计算的同时压缩权重。它是近似的,其包体积缩减并非速度比率。

速度、能耗与硬件证据 · 原始测量数据。

可用检查点

Hugging Face 包默认引擎容量用途
Laya 421MCPU + GPU512 tokens原始英文模型
Multilingual 322MCPU + GPU1024 tokens通用多语言决策
Typed Decisions 421MCPU + GPU1024 tokens原始专用检查点
Snake GPUCPU + GPUB3 / L64批处理三个紧凑的游戏问题
Multilingual ANECPU + ANEB1 / L96短决策,FP16
Multilingual ANE W8CPU + ANEB1 / L96可选的近似调色板压缩

每个包都包含分词器/配置、模型卡、来源信息、校验和以及打包时验证。ANE 包还包含其所需的精确原始主机嵌入/动作张量。无需原始训练代码检出。

移植保真度与限制

三个通用 FP16 检查点在 189/189 个验证问题上与上游选定答案匹配,每个均通过 100 次重复调用。ANE FP16 L96 通过 59/59 个拟合问题,最大校准概率漂移为 0.002925;W8 在不变的 0.02 门限下通过同一子集,漂移为 0.014393。六比特和四比特实验未通过该门限,因此未发布权重。这些是转换保真度测试夹具,并非通用任务准确性的证明。

单独导出的 FP16 ANE L1024 图通过了完整的 63/63 测试,但在其串行路径上,实际的 1024 token 请求大约需要 91.7 毫秒。短 ANE 的结果并不能确立长上下文优势。一次 600 步配对贪吃蛇检查匹配 600/600 个动作,零死亡且零护盾干预;当前 ANE 适配器的三次顺序调用无法确立相对编译 MLX 的一致全游戏加速。

普通的 SDPA Core ML 导出与 ANE 图是不同的实现。在无约束 RangeDim GPU 形状未通过本地保真度检查后,普通导出默认使用 CPU+GPU。仅更改其设备设置无法复现 ANE 结果。ANE 重写使用 BC1L 激活、1×1 投影和逐头注意力;其方案和一份单独的 Instruments 轨迹佐证了 Neural Engine 的工作。CPU 仍负责输入/输出边界。

文档与可复现性

要自行导出,请安装 laya-coreml[convert] 并运行 laya-coreml convert laya-multilingual models/custom。ANE 研究转换、压缩和基准测试脚本位于 Git 检出中。推理 wheel 包含可移植运行时和可选的终端演示。

Apache-2.0 许可证。这是由 Convai Innovations 及贡献者开发的 Laya 的独立移植,基于 MLX 姊妹项目构建。并非 Convai Innovations 或 Apple 的官方发布。参见 NOTICE。