mizorewww

Laya-CoreML

把 Laya 权重转成 Core ML,可在 Apple 神经引擎上跑,推理不依赖 PyTorch、Transformers 或 MLX。独立端口,非 Convai Innovations 或 Apple 官方发布。

核验于 2026-10-05

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

0.2.0 版把适用的 prompt 与结果修复同步到了上游 4aa6761(源版本 0.3.23)。Core ML 与 ANE 两种运行时现在都接受自定义 noul 显示标签({"false": "no", "true": "yes"}),用针对具体问题类型的错误来校验问题,并保留 Unicode 结构化指令。较长的对话列表保留最新的 token;字符串和对象则保留开头部分。usage 会报告状态截断,以及存在时的选项折叠。answer_confidence 是最高答案概率;既有的 confidence 语义保持不变。这两个字段都不代表校准准确率。下文记录的 checkpoint 温度钳制也包含在此版本中。导出的图容量限制仍会报错,而不是静默裁剪。

维护工作跟随上游 Laya 中适用于这些运行时的修复。新的运行时特性以及特定后端的优化提议,都需要有与上游一致的实现与验证;关闭一个 issue 并不代表它所报告的行为已经修复。

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

PyPI · Hugging Face 权重 · 中文

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

完整的 Snake 活动循环在三个不设上限的 600 步回合中持续达到 49.1–50.0 次决策/秒,零死亡、两次安全干预。游戏循环的计时与限速上限 包含渲染序列化;终端绘制不计入。

一次简短的多语言决策:在 M3 Max 上使用 ANE FP16 时为 P50 4.98 ms / P95 5.31 ms。 同一实验测得每个决策的整机能耗比编译后的 MLX FP16 好 2.78×。一个单独验证过的 W8 调色板变体达到 4.88 ms 和 3.19× 能耗改善。这些都是单问题结果,不是完整的 Snake 帧时间;所要求的 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 可要求使用已有的缓存,或加载一个本地目录。

跟随上游 v0.3.5,拟合出的校准温度在使用前会被钳制到 [0.5, 5.0]:随包提供的 choice:11+ 桶是 0.1006,这会把 logits 锐化约 10 倍,把一次抛硬币说成近乎确定。checkpoint 的原始值仍可通过 agent.temperature_raw 和 agent.temperature_by_options_raw 获取,加载时 RuntimeWarning 会逐一指出被钳制的桶。

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

在 M3 Max 上的实测

40 核 GPU、128 GiB、macOS 27.2。一个 91 token 的问题补齐到 96,计时包含 prompt 准备、分词、数组构建、同步推理、校准和格式化。加载与预热不计入。MLX 启用了 compile、前缀缓存和形状分桶。每种实现各跑六个交替的 20 秒区块,共产生 65,598 次稳定调用。

指标 编译后的 MLX FP16 Core ML ANE FP16 Core ML ANE W8
P50 / P95 6.94 / 7.39 ms 4.98 / 5.31 ms 4.88 / 5.23 ms
平均系统功耗估计 61.39 W 30.75 W 27.39 W
每决策系统能耗 0.4288 J 0.1540 J 0.1344 J
速度提升 1× 1.39× 1.42×
系统能耗提升 1× 2.78× 3.19×

能耗使用直接的 SMC PSTR 传感器读数,保留原始采样并显式剔除异常。这是一个带传感器和后台负载不确定性的估计。速度提升 × 平均功耗比 = 能耗提升;再把能耗乘以速度就是重复计算时间。W8 变体在保留 FP16 计算的同时压缩权重。它是近似的,其包体积缩小并不等于速度比。

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

可用的 checkpoint

Hugging Face 包 默认引擎 容量 用途
Laya 421M CPU + GPU 512 token 原始英文模型
Multilingual 322M CPU + GPU 1024 token 通用多语言决策
Typed Decisions 421M CPU + GPU 1024 token 原始专用 checkpoint
Snake GPU CPU + GPU B3 / L64 批处理三个紧凑的游戏问题
Multilingual ANE CPU + ANE B1 / L96 简短决策,FP16
Multilingual ANE W8 CPU + ANE B1 / L96 可选的近似调色板压缩

每个包都包含 tokenizer/配置、模型卡、来源信息、校验和以及打包时的验证。ANE 包还包含它们所需的、与原始完全一致的主机端 embedding/action 张量。不需要原始的 training checkout。

移植保真度与限制

三个通用型 FP16 checkpoint 在 189/189 个验证问题上与上游的选定答案一致。每个都通过了 100 次重复调用。ANE FP16 L96 通过 59/59 个适配问题,最大校准概率漂移为 0.002925;W8 在不变的 0.02 门槛下以 0.014393 的漂移通过同一子集。六位和四位实验未通过该门槛,因此不作为权重发布。这些是转换保真度夹具,不能证明通用任务准确率。

另一个单独导出的 FP16 ANE L1024 图通过了完整的 63/63 夹具,但在其串行筛选中,一次真正的 1024-token 请求约需 91.7 ms。短输入的 ANE 结果并不能证明长上下文有优势。一次 600 步的配对 Snake 检查中 600/600 个动作一致,零死亡、零护盾干预;当前 ANE adapter 的三次顺序调用并不能证明相对编译后 MLX 有稳定的整局加速。

普通的 SDPA Core ML 导出与 ANE 图是两种不同的实现。在不受限的 RangeDim GPU 形状未通过本地保真度检查之后,普通导出默认使用 CPU+GPU。只改它的设备设置并不能复现 ANE 的结果。ANE 重写使用 BC1L 激活、1×1 投影和逐头注意力;它的计算计划以及一份单独的 Instruments trace 都支持 Neural Engine 在工作。CPU 仍负责输入/输出边界。

文档与可复现性

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

Apache-2.0。由 Convai Innovations 及贡献者独立移植的 Laya,构建在 MLX 姊妹项目 之上。不是 Convai Innovations 或 Apple 的官方发布。见 NOTICE。