思想领袖
避免隐藏的危险:在iOS上导航非明显的机器学习陷阱

您是否需要机器学习?
机器学习在识别模式方面非常出色。如果您能够为您的任务收集干净的数据集,一般来说,只要有足够的时间,您就能够构建一个具有超人性能的机器学习模型。这在分类、回归和异常检测等经典任务中尤其如此。
当您准备好使用机器学习解决一些业务问题时,您必须考虑您的机器学习模型将在哪里运行。对于一些人来说,运行服务器基础设施是有意义的。这有利于保持您的机器学习模型私有,因此竞争对手更难跟上。此外,服务器可以运行更广泛的模型。例如,GPT模型(以ChatGPT而闻名)目前需要现代GPU,因此消费设备不适用。另一方面,维护基础设施的成本相当高,如果消费设备可以运行您的模型,为什么要支付更多?此外,还可能存在隐私问题,即无法将用户数据发送到远程服务器进行处理。
但是,假设使用客户的iOS设备运行机器学习模型是有意义的。那么,什么可能会出错?
平台限制
内存限制
iOS设备的可用视频内存比其桌面对应设备少得多。例如,最近的Nvidia RTX 4080 Ti具有20 GB的可用内存。另一方面,iPhone具有所谓的“统一内存”,即视频内存与RAM共享。例如,iPhone 14 Pro具有6 GB的RAM。此外,如果您分配超过一半的内存,iOS非常可能会终止应用程序,以确保操作系统保持响应。因此,您只能依赖2-3 GB的可用内存用于神经网络推理。
研究人员通常会训练他们的模型以优化准确性而不是内存使用。然而,也有一些研究专注于优化速度和内存占用,因此您可以寻找需求较低的模型或自己训练一个模型。
网络层(操作)支持
大多数机器学习和神经网络来自知名的深度学习框架,然后使用Core ML Tools转换为CoreML模型。CoreML是由Apple编写的推理引擎,可以在Apple设备上运行各种模型。这些层针对硬件进行了优化,支持的层列表相当长,因此这是一个很好的起点。然而,还有其他选项,如Tensorflow Lite。
查看已经使用像Netron这样的查看器转换的模型是了解CoreML可以做什么的最佳方式。Apple列出了部分官方支持的模型,但也有一些社区驱动的模型。支持的操作列表正在不断变化,因此查看Core ML Tools的源代码可以作为一个有用的起点。例如,如果您想转换PyTorch模型,可以尝试在这里找到必要的层。
此外,一些新架构可能包含某些层的手写CUDA代码。在这种情况下,您不能指望CoreML提供预定义的层。然而,如果您有一个熟悉写GPU代码的熟练工程师,您可以提供自己的实现。
总的来说,最佳建议是在训练模型之前尽早将其转换为CoreML。如果您有一个没有立即转换的模型,仍然可以修改神经网络定义以生成有效的CoreML模型,而无需为CoreML推理编写自定义层。
验证
推理引擎错误
由于无法测试所有可能的层组合,因此推理引擎将始终存在一些错误。例如,使用CoreML时,膨胀卷积往往会使用过多的内存,可能表明实现中有一个带有零填充的大内核。另一个常见的错误是某些模型架构的模型输出不正确。
在这种情况下,操作顺序可能是一个因素。根据激活与卷积或残差连接的顺序,可能会得到不同的结果。确保一切正常工作的唯一方法是将模型运行在目标设备上,并将结果与桌面版本进行比较。对于此测试,拥有至少一个半训练好的模型会很有帮助,否则,数字错误可能会在随机初始化的模型中积累。即使最终的训练模型可以正常工作,但在设备和桌面之间的结果也可能相差很大。
精度损失
iPhone广泛使用半精度准确性进行推理。虽然一些模型由于浮点表示中的位数较少没有明显的准确性下降,但其他模型可能会受到影响。您可以通过在桌面上使用半精度评估模型并计算模型的测试指标来近似精度损失。更好的方法是直接在实际设备上运行模型,以确定模型是否像预期的那样准确。
性能分析
不同的iPhone模型具有不同的硬件能力。最新的模型具有改进的神经引擎处理单元,可以显著提高整体性能。它们针对某些操作进行了优化,CoreML能够在CPU、GPU和神经引擎之间智能地分配工作。Apple GPU也随着时间的推移而改进,因此在不同iPhone模型之间看到性能波动是正常的。测试模型在最低支持的设备上以确保最大兼容性和旧设备的可接受性能是一个好主意。
值得注意的是,CoreML可以优化掉一些中间层和计算,从而大大提高性能。另一个需要考虑的因素是,有时在桌面上性能较差的模型可能实际上会在iOS上更快地进行推理。这意味着值得花时间尝试不同的架构。
为了获得更好的优化,Xcode具有一个很好的Instruments工具,带有一个专门为CoreML模型设计的模板,可以更深入地了解是什么因素减慢了您的模型推理。
结论
没有人能够预见在iOS上开发机器学习模型的所有可能的陷阱。然而,如果您知道要寻找什么,一些错误可以避免。尽早将机器学习模型转换、验证和分析,以确保您的模型能够正常工作并满足您的业务需求,并按照上述提示以最快的速度实现成功。
