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

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












