在尝试使用一台 iPhone 16 Pro Max 运行机器学习模型时,设备输出了完全错误的乱码结果。经过对比测试,发现同样的代码在 iPhone 15 Pro 和 MacBook Pro 上均可正常运行。通过深入调试,比较了不同设备上的计算过程,最终确认这台 iPhone 16 Pro Max 存在硬件缺陷,很可能是其神经引擎(Neural Engine)在进行数学运算时出错。这次经历提醒我们,在排查问题时,除了检查软件代码,也应将硬件故障纳入考量范围。
一次简单的项目尝试
最初,这只是一个放松性质的小项目:开发一个简单的开销追踪应用。主要功能包括:
- 自动记录每一笔消费。
- 在 Apple Watch 上显示已用预算的百分比。
- 自动对消费进行分类,以便后续分析。
在集成了快捷指令后,应用很快便能记录消费。接下来,作者决定先实现消费分类功能。
第一次尝试:Apple Intelligence
作者首先尝试使用苹果官方的 Apple Intelligence API。然而,在 iPhone 16 Pro Max 上运行时,模型功能始终处于下载状态,无法启用。在网上查询后发现,许多用户都遇到了同样的问题。这表明苹果的服务可能存在不稳定性。由于无法解决,作者放弃了这条路线。
第二次尝试:MLX 本地模型
作者转向了苹果的另一个机器学习框架 MLX,它允许将模型直接下载到应用中运行。然而,在 iPhone 16 Pro Max 上,模型虽然启动了,但输出的却是完全无意义的乱码。
当提问“2+2 等于几?”时,手机的回答是一串类似“Applied…..*_dAK[…]”的胡言乱语。
在排除了代码编写错误的可能性后,作者开始陷入了深深的自我怀疑,认为自己能力不足,甚至连一个现成的框架都用不好。
关键转折:在旧设备上测试
在困扰了三天后,作者突然想到一个可能性:会不会是设备本身的问题?于是,他拿出旧的 iPhone 15 Pro 运行了完全相同的代码。
结果,一切正常。 不论是 Gemma 还是 Qwen 模型,都能生成清晰、准确的回答。
为了确认这不是操作系统版本导致的问题,作者将两台手机都更新到最新的 iOS 26,结果依旧:iPhone 15 Pro 运行正常,而 iPhone 16 Pro Max 依然输出乱码。此时,问题焦点开始从软件转向硬件。
寻找确凿证据
为了彻底搞清楚问题,作者制定了一个调试计划:
- 使用一个可靠的小型模型(Gemma)。
- 使用一个极简单的提问:“What is 2+2?”
- 将模型推理的温度设为 0.0,以消除随机性。
- 在模型运算的每一层设置断点,打印出中间计算结果(张量)。
通过对比两台手机的日志,真相浮出水面。在运算过程的某个中间步骤,两台设备的数据出现了巨大差异。
iPhone 15 Pro (正常):
[[[[53.875, 62.5625, -187.75, ..., 42.625, 6.25, -21.5625]]]]iPhone 16 Pro Max (故障):
[[[[191.5, 23.625, 173.75, ..., 1298, -147.25, -162.5]]]]
很明显,这台 iPhone 16 Pro Max 输出的数值 偏差极大,完全不合逻辑。作为最终验证,作者在 MacBook Pro 上也运行了相同的代码,其结果与 iPhone 15 Pro 完全一致。
结论:手机硬件坏了
到此可以确定:不是代码有问题,也不是作者的技术有问题,而是这台 iPhone 16 Pro Max 的硬件存在缺陷。
最可能的原因是,这台手机的 A18 芯片中的 神经引擎(Neural Engine) 或相关计算单元在执行机器学习运算时出错了。MLX 框架通过 Metal API 调用这些硬件加速器,而在某个环节,计算结果变得一塌糊涂。
作者最终将这台有问题的手机进行了退换。后续收到的新手机运行同样的代码完全正常,进一步证实了之前的设备确实存在硬件缺陷。这个经历得出的最大教训是:
在调试问题时,我们习惯性地认为是代码、框架或自己的技术出了问题。但有时,也应该考虑最基础的物理层——硬件本身可能就是故障的根源。