【免费下载链接】laya-coremlLocal Laya typed decisions on Apple Core ML and Neural Engine. Validated ports, ~5 ms short decisions on M3 Max, reproducible speed and energy benchmarks.项目地址https://gitcode.com/gh_mirrors/la/laya-coreml点击查看免费下载本文基于laya-coreml仓库的 docs/ANE_MATH.md 整理编写。该文档记录了 Laya 模型在 Apple Neural EngineANE上的移植可行性分析如何在不改变实数域函数的前提下把整个 Transformer 重写为 Core ML 偏爱的 BC1LB×C×1×L通道优先布局如何用严格的度量体系评估10× 目标以及为什么数学边界决定了这条路的真正瓶颈。读者将从中获得一套可复用的 ANE 移植方法论、能耗/延迟度量协议以及判断宣称加速是否成立的自洽判据。Laya-CoreML 是一个在 Apple Silicon 上本地运行开源权重 Laya 模型零生成 token 的 typed decisions的项目。其研究分支的目标是把原本跑在 GPU 上的 Laya Transformer 移植到 Neural Engine 上追求相对已优化的 MLX FP16 运行时的10× 数量级提升。ANE_MATH.md就是这项研究的数学总纲——它在动手写一行代码之前先定义了度量口径、等价变换的边界、算术上限和验收门限。本文以该文档为主体骨架并结合仓库内的 docs/ANE_ENGINEERING.md工程实现、docs/ANE_BENCHMARKS.md实测报告、experiments/ane_engineering/下的原型代码与benchmarks/results/下的原始数据对原文档进行源码级扩充。先定义目标再谈优化在讨论10×之前ANE_MATH.md给出的第一条原则是对相同的输入、相同的检查点、相同的精度策略和相同数量的已完成决策统一度量口径。其核心恒等式如下t elapsed time / completed decisions P average measured power over that same interval E integrated energy / completed decisions P × t S t_MLX / t_candidate speed gain R P_MLX / P_candidate power reduction factor S × R E_MLX / E_candidate energy efficiency gain几个必须注意的度量纪律用 block mean latency 而非延迟分位数来参与上述恒等式同时单独报告 P50 与 P95。速度与能量的关系是相乘不是重复累加。例如速度快 2× 且功耗只有五分之一是一个 10× 的能耗改进反过来速度慢一半则需要 20× 的功耗下降才能等价达到 10× 能耗改进。把已算出的能耗增益再乘一次速度等于把耗时重复计入了两次。存在两种截然不同的功率测试饱和顺序推理测实际吞吐、延迟和每决策焦耳数。功耗低但更慢的候选方案并不自动更高效。等量负载如相同的 Snake tick 率两个候选必须在截止时间内完成相同的工作并报告平均功率、区间总能量、截止时间错失次数与已完成决策数。睡得更久或丢弃工作不是优化。记录所测功率的域CPU GPU ANE 遥测并不等于整机或电池功率不能如此标注。原始能量要如实报告如果可用附上空闲扣除idle-subtracted能量。当负载减空闲与噪声同级时保留不确定性而不是悄悄钳制clamp后报出一个巨大的比率。计量边界要完整tokenization、输入拷贝、CPU 回退与后处理都必须计入 endpoint 的计量边界内。这些规则在仓库的测量实现中被严格执行。benchmarks/energy.py 定义了空闲采样idle(sampler, seconds)而 docs/ANE_BENCHMARKS.md 记录了最终对比的细节三臂平衡循环MLX, ANE FP16, ANE W8, ANE W8, ANE FP16, MLX各 20 秒块间 10 秒空闲采样并丢弃前 3 秒累计 65,598 次预测、1,101 个功率样本缺失/非正/非有限/超过 500 W 的样本直接拒绝整个 run——500 W 上限是刻意宽松的 sanity check不是校准过的精度边界。起点证据与分母优化目标必须锚定一个可复现的分母。文档给出的起始证据来自仓库内的原始基准多语言 MLX 基准benchmarks/results/perf-laya-multilingual-mlx.json单个 91-token 问题端到端predict测量不含模型加载与 warmupP50 7.870 msP95 9.870 ms100 样本同文件记录 10 次 warmup、identical_rounded_results: true。英文 MLX 基准benchmarks/results/perf-laya-mlx.json93-token 问题13.334 / 13.734 ms。已有 Core ML 多语言导出CPU GPU 方案 P50 11.277 ms见 benchmarks/results/perf-laya-multilingual-coreml.jsonALL 方案 78.037 msbenchmarks/results/perf-multilingual-all.jsonCPU NE 方案 81.336 msbenchmarks/results/perf-multilingual-cpu_ne.json。关于最后一种 CPU NE 方案ANE_MATH.md给出了一个关键的反面证据该计算计划记录1,318 个 CPU-preferred 操作、0 个 NE-preferred 操作另有24 个 SDPA 操作设备元数据未知——这意味着它完全不能支撑NE 已执行的声明。Apple 官方把 compute-plan 的设备使用描述为预期设备使用anticipated device use因此即便计划本身看起来有利也必须用运行时 profiling 或可观测的 NE 活动来佐证。仓库中 benchmarks/results/perf-multilingual-cpu_ne.json 的compute_plan字段完整保留了这些计数preferred_operation_counts中MLCPUComputeDevice: 1318supported_operation_counts中MLNeuralEngineComputeDevice: 988——支持supported与偏好preferred是两个完全不同的概念。基准分母不是永久不变的。文档明确要求新的对比必须重跑当下最强的适用 MLX 路径包括其 opt-in 的编译compile与 prompt-cache 设置历史 eager 结果不能作为永久分母。这也是最终报告改用 compiled MLXmx.compile 前缀缓存 32-token shape buckets的原因——它比历史 eager 基线更快分母更严格。既有 FP16 回归门限的含义现有 FP16 转换的回归门限是100% fixture argmax 一致、输出有限且确定性、校准后与动作概率的绝对漂移不超过 0.02。ANE_MATH.md特意强调这只是小语料上的转换保真度检查它既不证明通用任务精度也不证明 Snake 能力或压缩模型的质量。这一界限在后续压缩筛选中被反复印证详见下文 W6/W4 失败案例。等价图变换不改函数只改布局ANE_MATH.md的核心技术章节是把 Apple 官方 Transformer 部署研究中的四条布局建议四维BC1L激活、1×1 卷积、注意力按头拆分、减少布局拷贝作为待测候选逐一给出数学上的等价变换公式。文档同时声明Apple 研究中的 10× 例子是不同模型、不同设备、不同基线不能直接套用到本项目的 MLX 对比上。线性投影与门控 MLP设X[b,l,i]为现有激活定义U[b,i,0,l] X[b,l,i]。对线性层有Y[b,l,o] sum_i W[o,i] X[b,l,i] bias[o] K[o,i,0,0] W[o,i] Conv2D(U,K)[b,o,0,l] Y[b,l,o]即把稠密权重W[out,in]原样重塑为 1×1 卷积核K[out,in,0,0]不重训、不近似。注意这条变换必须跨整个编码器与两个决策头 Transformer 层保持一致的布局——每个线性层周围转进转出会抵消全部收益。具体做法QKV 保持单一D → 3D卷积再把通道输出切分为 Q、K、V编码器的融合D → 2I投影也保留切分为 value 与 gate对 value 应用原始精确 GELU乘以 gate再做I → D投影。仓库原型 experiments/ane_engineering/model.py 完整实现了这一变换其关键辅助函数conv_from_linear/conv_from_weights正是上述公式的直接代码化nn.Conv2d(linear.in_features, linear.out_features, 1, bias...)weight.detach()[:, :, None, None]。ConvMLP.forward则实现了门控 MLP 的拆分逻辑self.Wi(x).chunk(2, dim1)→F.gelu(value) * gate→self.Wo(...)。序列宽度的对齐建议FP16 下序列宽度若能整除 32可对齐 Apple 研究中描述的 64 字节 last-axis 对齐。本项目初始形状是短 API fixture 的B1,L96和紧凑 Snake 的B3,L64。文档特别提醒这是一个针对该缓冲区模型的建议不是允许把每个负载都填充到任意大长度——Snake 根本不需要 96 个 token。注意力与 RoPE对每个注意力头保持 Q、V 为(B,d,1,L)把 K 转置为(B,L,1,d)score[b,k,0,q] sum_c Q[b,c,0,q] K[b,k,0,c] / sqrt(d) weight softmax(score additive_mask, axiskey) out[b,c,0,q] sum_k weight[b,k,0,q] V[b,c,0,k]关键轴是此表示中的 axis 1key 轴。头输出沿通道轴拼接。这与原注意力是同一个函数——softmax 轴写错会静默改变语义。在 Core ML 中写出一个 einsum并不保证落到预期的设备或得到预期的 lowering因此必须检查转换后的 MIL 算子。Apple 参考实现演示了对应的两个四维收缩QK 与 AV。仓库原型的ConvAttention.forward就是这条公式的直译q, k, v self.qkv(x).chunk(3, dim1)然后按self.dim每头 64 通道逐个切分torch.einsum(bchq,bkhc-bkhq, qi, ki.transpose(1, 3)) * (self.dim**-0.5)计算 QKF.softmax(scores mask, dim1)在 key 轴归一化再torch.einsum(bkhq,bchk-bchq, probabilities, vi)做 AV。RoPE 的拆分约定RoPE 要施加在每个头的通道对上在 QK 之前并保留检查点的 split-half 约定、原始位置与逐层 theta。多语言检查点中 full 与 local RoPE 的 theta 均为160000。文档警告一个常见错误把所有头拼接在一起的第一半与第二半直接拆分是不对的必须在每个 64 通道头内部拆分。位置依赖的旋转一般不能折叠进单个位置无关的权重矩阵。model.py中rotate()用x.chunk(2, dim1)在每头内部拆分左右半通道cos/sin缓冲取自原模型source.cos[0, 0, :length].T[None, :, None, :]正是按头内拆分的代码体现。局部注意力规则双向abs(q-k) 64含端点保留 key padding 与既有 padded-query 规则。固定形状下位置相关的常量部分可以在 tracing 之前预计算但样本 padding 的变化必须仍然影响 key mask。用有限大负数掩码替换数学上的排除是一种数值近似除非它与原实现有限精度行为完全一致否则必须用对抗性与 padding 输入验证。仓库运行时 laya_coreml/ane.py 中窗口按np.abs(positions[:, None] - positions[None, :]) int(self.encoder_cfg.get(local_attention, 128)) // 2计算掩码值用np.where(..., 0, -1e4)生成-1e4 是文档认可的有限掩码方案且在有限验证激活上有预期行为但不声称与任意极端输入下用 -1e4/-inf 替换 masked score 逐位等同。LayerNorm 不能与其他归一化互换对每个(b,l)仅沿通道维度归约mu mean_c U v mean_c (U-mu)^2 normalized (U-mu) / sqrt(v epsilon) output normalized * gamma beta必须保留原始 epsilon、仿射顺序、总体方差population variance、首层恒等归一化、精确 GELU 与残差顺序。文档指出 Apple 参考 LayerNorm 的仿射顺序不同其 DistilBERT adapter 通过变换 bias 来补偿直接复制该类并加载 Laya 的 state dict对非零 bias 是错误的。显式写出原顺序的仿射表达式还能避免除以可能为零的 gamma。仓库的ChannelNorm.forward正是按原顺序实现centered x - x.mean(dim1, keepdimTrue)out centered * (centered.square().mean(dim1, keepdimTrue) self.eps).rsqrt()最后out * self.weight若有 bias 再加self.bias。钳制激活、把 GELU 换成 tanh、或用 RMSNorm 替换 LayerNorm 都会改变函数本身。如果平方值溢出正值重缩放positive rescaling是数学上等价的选项normalize(x/a, epsilon/a^2) normalize(x, epsilon), for a 0但有限精度累加仍需要 parity 测试。FP32 归约可能引入拷贝或 CPU 回退所以要检查 compute plan而不是悄悄放松数值行为。测试 tests/test_ane_layout.py 中的test_channel_norm_keeps_bias_after_scale_and_preserves_epsilon专门覆盖了零 gamma 非零 bias这一最容易被错误仿射顺序破坏的场景atol1e-12验证ChannelNorm与原始nn.LayerNorm在 double 精度下的逐元素一致。把不支持的工作移到模型边界如果 embedding 查找、动态 marker gather 或动作尾部阻碍了连续 NE 区域可以构造一个分区候选CPU: tokenizer → selected embedding rows → embedding LayerNorm NE candidate: all encoder layers → type embedding addition → both heavy head layers CPU: marker/CLS selection → small scorer → raw-probability features → action head只有端点跨引擎——不要每层都把 attention 或 LayerNorm 丢到 CPU。多语言B1,L96下FP16 embedding 张量为 147,456 字节B3,L64下为 294,912 字节。这些拷贝以及任何全隐状态输出拷贝都要计入端到端测量。多语言 token 表有196,608,000 个参数约 196.6M 项但每个请求只 gather 其 token 行。它不需要进入 ANE Transformer 子图也不得在每次预测时被当作整表读取来计数。其 LayerNorm 无位置依赖因此离线预归一化表行在实数算术上等价但可能改变舍入与存储精度需要独立 parity 检查。动作头消费的是原始 marker logits温度校准之前的概率用公开的校准后概率重建其特征会改变检查点行为。运行时 laya_coreml/ane.py 正是按此分区实现CPU 侧只做self.embedding[ids].transpose(...)的逐行查找、FP32 动作头精确 erf GELUNE 侧一次self.model.predict(...)跑完整 encoder head scorer。算术上限10× 延迟声明到底有多难设D为隐层宽度、I为门控编码器中间宽度、N为编码器层数、H2为决策头层数。主要每-token 矩阵参数与稠密算术量为A N(4D^2 3DI) 12HD^2 F_dense(B,L) 2BLA 4B(NH)L^2D乘法与加法分开计数。这些等式排除了 norm、激活、embedding、scoring、掩码、拷贝与运行时开销——它们不是 profiler且即便对 masked local 层也建模当前稠密注意力计算。CheckpointD / I / NAFP16 主矩阵字节B1,L96 稠密工作量要低于当前 MLX P50 的 10× 所需有效算力Multilingual768 / 1152 / 22124,452,864248.91 MB24.574 GFLOP31.23 TFLOP/s0.787 ms 内English / typed 架构1024 / 2624 / 28368,312,320736.62 MB71.848 GFLOP53.89 TFLOP/s1.333 ms 内用英文基线这些是必须达到的速率不是断言中的 ANE 峰值规格。布局重写能去掉开销但去不掉这些稠密投影硬件还必须顺序执行 24 或 30 个 attention/MLP 块的串行链。乐观流式模型给出另一个条件性下限t max(F / effective_compute, bytes_from_DRAM / effective_bandwidth)40-GPU-core M3 Max 官方规格为 400 GB/s 统一内存带宽。如果每个主 FP16 矩阵每次请求都从 DRAM 取一遍即便独占该带宽多语言至少需要 0.622 ms、英文至少需要 1.842 ms。实际 ANE 带宽访问可能更小缓存或压缩权重也会改变假设——这不是无条件的物理下限但它解释了为什么英文 10× 延迟在未压缩流式场景下尤其苛刻也解释了为什么即使延迟只温和改善测量能耗依然有价值。Amdahl 定律对端到端时间中被因子s改进的比例fS 1 / (1-ff/s)。即使某区域无限加速若它占原始延迟不足 90%就达不到 10×。对应地以每决策焦耳为目标时应使用测得能量的比例而非 FLOP 比例。文档还点出两个看似可行实则微弱的路径final-head 的 selected-query 优化只移除了几个百分点的模型算术L64时局部窗口覆盖所有位置局部注意力稀疏性也可忽略——两者都不是站得住的独立 10× 路线。压缩与架构变更的契约不同ANE_MATH.md用一张表严格区分是否保持同一实数域检查点函数与实际能改变什么候选保持同一实值检查点函数现实上能改变什么BC1L 布局、1×1 投影、静态位置/掩码、头拆分是在方程与输入被保留时调度、局部性、编译器分区、内存拷贝CPU 端点分区、离线 embedding norm、final head 的 selected queries实数算术上是需验证舍入不支持的操作、包体积、部分未用工作8/6/4-bit palettization 或权重量化一般不是权重流量/存储可能影响推理能耗/延迟剪枝学习到的非零权重或低秩分解不是除非存在代数精确结构恢复/校准后的矩阵算术与流量提前退出、token 剪枝、更少层、更窄 student不是潜在大节省新模型与质量契约任意问题间的隐状态复用双向编码器下不是无效捷径上下文状态依赖问题本身缓存完全相同的整输入答案缓存命中时精确工作负载特性不是未缓存推理速度Palettization 的定位Apple 当前优化概览指向 NE 内存/延迟收益的 palettization并标识 A17 Pro/M4 上更新的 W8A8 计算路径——但不要把新硬件的加速外推到这台 M3 Max。量化性能指南还警告激活反量化可能拖慢 CPU/GPU 执行。正确顺序是先取得 NE-resident 基线再从 8-bit 向下测权重 palettization同时按需保留敏感 norm/scorer 的精度。压缩≠延迟倍数FP16 权重打包为 8 位或 4 位理想存储比是 2× 或 4×元数据之前但解压、激活搬运与计算仍然存在因此它不是等比的延迟倍数。剪枝只有在所选表示真正利用零值时才有助于运行时随意删头/删层或低秩截断需要质量恢复不能无附加条件地保留原模型身份。量化诊断的证书对每输入 logit 误差界||z-z||_infinity delta充分的 argmax 证书是top1(z)-top2(z) 2delta相同正校准温度T下softmax 的无穷范数 Lipschitz 界给出||p-p||_infinity delta/(2T)。这些是已评估输入上的有用诊断不是量化的全局证书。要保留独立的 close-margin 与多语言评估切片——饱和样本会掩盖大的 logit 误差。三个实验与验收门限ANE_MATH.md把研究收敛到三个可判定的实验固定形状等价 NE 图以 BC1L 投影、正确的逐头 RoPE、显式注意力与原始 LayerNorm/GELU 导出多语言B1,L96,K4与 SnakeB3,L64,K4。将输入数组与逐层输出对照原图检查主要投影与注意力块是否 NE-preferred再核对实际运行时 NE 活动。仅 supported-op 计数不是成功还要在交替块中重跑对应的优化 MLX 基线。一个连续 transformer 岛若第一图碎片化把 embedding 与小型尾部移到 CPU 边界在同一功率测量下与全图候选对比。只有完整预测在延迟或能耗上超出 run-to-run 波动才保留候选必须计入所有拷贝——孤立的快速 encoder 不足为凭。放置成功后的能耗导向压缩先筛选 8-bit palettization再把 6/4-bit 作为独立近似变体。运行未变更的 fixture 门限、保留的 choice/score/noul 任务、多语言输入、近并列与 Snake 轨迹并把精度、概率漂移与校准同性能一起发布。改变学习行为的激进压缩或蒸馏应归入单独命名的模型。发布声明前的协议使用相同检查点/输入哈希、交替的 baseline/candidate 顺序排除冷编译但单独报告它每个 finalist 至少五个持续块保留原始延迟、完成调用与功率样本在不放宽既有 fixture 一致性与概率容差的前提下通过候选且输出稳定有限、内存有界长输入与形状边界输入必须与短固定形状 demo 分开测量。声明 10×的判据只有当相关速度、等负载功率或能耗比率至少为十、且不确定性支持该声明、同时满足既定延迟与任务质量界限时才能声明 10×。若下限不确定区间达不到十就报告测得比率。一个较小的能耗增益加上已验证的 NE 执行仍是有效证据但它不是数量级结果。从数学到工程原型与验证的落地证据ANE_MATH.md是研究起点docs/ANE_ENGINEERING.md 记录了该重写的实现结果用实测数据印证了上述每一条数学判断放置结果固定B1,L96原型在 Core ML 预期计算计划中6,390 个非常量操作偏好 ANE其余 3,809 项为常量而原始 enumerated-shape/SDPA 导出在CPU_AND_NE下所有 1,318 个分配操作均偏好 CPU尽管有 988 个操作把 ANE 列为支持设备——与ANE_MATH.md的supported ≠ preferred判断完全一致。端到端速度完整预测路径 50 次筛选调用测得5.167 ms p50含 tokenization、embedding 查找、掩码构造、ANE 推理、CPU 动作头、校准与格式化隔离 Core ML 主体在合成 embedding 下为 4.403 ms p50组件测量非端到端声明。数值保真原 FP32 golden reference 的固定长度子集上59/59 答案一致含八种语言与 choice/score/noul 题型最大校准概率变化0.002925100 次重复调用输出有限且舍入后一致。含 3 个 1024-token 长输入与 1 个 147-token 20 选项输入的 4 项被 L96 导出显式跳过这些是回归对比不是 59 个独立标注样本。更长容量独立的 L19260/60与 L1024完整 63/63导出同样把全部 6,390 个分配操作置于 ANE最大概率误差仍为 0.002925但 L1024 真实 1024-token 请求的串行屏测得 91.703 ms p50而历史 MLX 长输入基准为 51.98 ms p50——短输入优势不能外推到长上下文与ANE_MATH.md的谨慎立场一致。原始证据保留在 experiments/ane_engineering/body96/report.json、experiments/ane_engineering/validation96.json、experiments/ane_engineering/validation192.json、experiments/ane_engineering/validation1024.json 与 experiments/ane_engineering/long1024-performance.json。CPU 独立回归tests/test_ane_layout.py 用微型ConvBody对照原始DecisionModel覆盖显式/SDPA 两种 attention oracle、三种题型、变更 padding、非零 norm bias、多个 RoPE 基与非默认 norm epsilon如 tiny model 中 full/local theta 分别取 100 与 10000、local_attention4、norm_eps3e-4。test_conv_attention_matches_original_across_heads_and_padding与test_conv_body_matches_original_logits_and_cls_for_types_and_padding分别验证逐头注意力和整图 logits/CLS 一致且验证掩码 token 的值不得泄漏进有效决策——这是文档保留 padded-query 规则的直接测试化。压缩筛选结果精度边界实测ANE_ENGINEERING.md的压缩筛选表完整印证了ANE_MATH.md关于压缩契约不同的警告L96 变体Body 包十进制 MB最大校准概率误差完整预测筛选 p50质量门限FP16validation96.json251.910.0029255.167 ms通过W8 uniform, group 32validation96-w8.json129.290.0236124.923 ms失败W8 uniform, group 4validation96-w8g4.json146.060.0338585.420 ms失败W8 K-means, group 32validation96-w8km.json129.290.0143934.792 ms通过W6 K-means, group 32validation96-w6km.json96.230.0522434.841 ms失败W4 K-means, group 32validation96-w4km.json64.520.2002215.001 ms失败所有压缩变体都保留了 6,390 个 NE-preferred 操作、59/59 argmax 一致与 100 次稳定重复调用——但 W6/W4 的概率漂移分别达 0.052243 与 0.200221未通过 0.02 门限。五个压缩屏无一改变 argmax正说明该 fixture 的饱和决策本身不足以作为验收测试。另外W6 的最大动作 logit 误差达 76.62、W4 达 605.30而 W8 K-means 虽通过门限其饱和动作概率下仍隐藏着最高 16.24 的 logit 差异——通过小回归 fixture 并不等于保持通用校准或任务精度。压缩仅针对多语言 L96 子集验证过63 题的 L1024 结果属于独立的 FP16 导出。最终测量1.39× 与 2.78×而不是 10×docs/ANE_BENCHMARKS.md 记录了三臂饱和对比的最终结果M3 Max、同源多语言检查点、91 实 token 填充到 96、四个选项的单一问题、无输出缓存指标MLX GPU FP16compiledANE FP16ANE W8 K-means完成决策数17,18423,96124,453测量活动时长120.02 s120.02 s120.02 s端到端 P506.937 ms4.976 ms4.879 ms端到端 P957.393 ms5.307 ms5.227 ms每决策平均耗时6.984 ms5.009 ms4.908 ms整机平均功率估计61.39 W30.75 W27.39 W整机每决策能耗0.4288 J0.1540 J0.1344 J空闲扣除后每决策能耗0.3393 J0.0888 J0.0715 J相对 compiled MLX 速度增益1×1.394×1.423×相对 compiled MLX 整机能耗增益1×2.784×3.189×空闲扣除后能耗增益1×3.823×4.749×比率用区间均值含全部完成工作FP16: speed 1.394 × average system-power ratio 1.997 energy gain 2.784。把能耗比再乘一次速度会重复计入耗时——这正是ANE_MATH.md反复强调的陷阱。空闲扣除行使用不同测量边界不代表整机功率真的下降 3.8–4.7×。这些是饱和吞吐区间固定 FPS 的功率声明需要等请求速率实验。功率测量采用独立的、无特权的PSTR-only 采样器benchmarks/pstr_sampler/README.md基于 macmon 0.8.2 的 SMC API500 ms 采样一次只读连接。这是必要的官方 macmon CLI 计算sys_power max(PSTR, component_sum)而本 OS 上 CPU/ANE 计数器常返回零随后一个异常样本跳到约 38,021 W CPU 与 2,068 W ANE被 component floor 放大成 40,089 W 系统读数——受影响的整个能量 run 被拒绝其记录保留在 benchmarks/results/ane-energy-rejected-telemetry.json 中供审计但聚合值不得用作结果。这里没有任何钳制或裁剪。NE 是否真的在干活重写后的 B1/L96 图计算计划把全部 6,390 个非恒定操作置于MLNeuralEngineComputeDevice此外一次独立的 15.97 秒 Instruments Core ML trace 捕获了3,124 个活跃的 Neural Engine Prediction 区间为运行时 ANE 活动提供了超出 compute plan 的正向硬件证据允许列表见 benchmarks/results/ane-hardware-events.json。该表是全局的不把每个预测都绑定到 PID 或模型身份因此不把所有硬件区间都归于 Laya也不声称宿主机工作跑在 ANE 上。原始最终数据见 benchmarks/results/ane-energy-finalists.json 与带 session 内 bootstrap 区间的 benchmarks/results/ane-energy-summary.json。结论是诚实的FP16 ANE 重写带来 1.39× 速度与 2.78× 整机能耗增益W8 为 1.42× 与 3.19×——均未达到 10× 目标。这与ANE_MATH.md的算术边界预测一致布局重写移除的是开销不是稠密投影本身。一个经过验证的较小能耗增益 已确认的 NE 执行仍比一个夸大的未验证数字更有研究价值但它不是数量级结果。这正是本文所承载的研究态度先定义可测量的目标用等价变换守住函数边界用算术上限设定现实预期最后让验收门限替我们把关。复现路径完整复现需要先构建固定 L96 FP16 与 W8 K-means 包命令见 docs/ANE_ENGINEERING.md输出到artifacts/ane-repro/下的新目录然后本地构建采样器并运行能量对比pip install -e .[convert,dev,compare,research] cargo build --release --locked --manifest-path benchmarks/pstr_sampler/Cargo.toml python -m benchmarks.energy \ --source /path/to/original/laya-multilingual \ --candidate artifacts/ane-repro/body96-w8km/model.mlpackage \ --fp16-candidate artifacts/ane-repro/body96/model.mlpackage \ --candidate-factory experiments.ane_engineering.runtime:ANEAgent \ --sampler benchmarks/pstr_sampler/target/release/pstr-sampler --pstr-only \ --cycles 3 --seconds 20 --idle-seconds 10 \ --output artifacts/energy.json python -m benchmarks.energy_summary artifacts/energy.json \ --output artifacts/energy-summary.jsonSnake 兼容性对比600 步、seed 101/102、600/600 动作一致、零死亡零盾干预的命令与 ANE 硬件 tracexcrun xctrace record --template Core MLbenchmarks.trace_summary均记录在 docs/ANE_BENCHMARKS.md。所有测量前提M3 Max、macOS 27.2、Core ML Tools 9.0、固定 B1/L96都以元数据形式保留在对应 JSON 报告中——本文的所有数字都来自这些可核查的仓库证据而非推测。相关文档docs/ANE_MATH.md本文主体数学边界与验收判据docs/ANE_ENGINEERING.mdBC1S/Conv 原型、放置与保真实验、压缩筛选docs/ANE_BENCHMARKS.md三臂速度/能耗实测与功率测量协议experiments/ane_engineering/model.py等价变换原型实现experiments/ane_engineering/runtime.pyCPU→ANE→CPU 单边界运行时laya_coreml/ane.pyANEAgent发布运行时与输入校验tests/test_ane_layout.py布局与掩码语义的 CPU 回归benchmarks/energy.py 与 benchmarks/pstr_sampler/README.md能量测量实现赞分享【免费下载链接】laya-coremlLocal Laya typed decisions on Apple Core ML and Neural Engine. Validated ports, ~5 ms short decisions on M3 Max, reproducible speed and energy benchmarks.项目地址https://gitcode.com/gh_mirrors/la/laya-coreml点击查看免费下载相关推荐本地补丁彻底解除 Wand 免费时长限制本地补丁彻底解除 Wand 免费时长限制 每天用 Wand 到第二小时弹窗准时弹出来免费时长已用完想继续就付费。 Wand Enhancer 是个开源的本桌面应用前端ML-Agents模型可解释性评测用户研究方法ML Agents模型可解释性评测用户研究方法 1. 为什么需要模型可解释性 在机器学习Machine Learning领域随着深度强化学习Deep人工智能强化学习深度学习机器学习游戏开发AI 应用IT-Tools终极指南开发者必备的80在线工具集合IT Tools终极指南开发者必备的80在线工具集合 IT Tools是一个专为开发者和IT专业人员设计的在线工具集合提供超过80种实用工具涵盖了加密转开发工具前端创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
