2. iOS原生框架概览

好,咱们正式开始聊iOS上的原生框架。说实话,很多做AI的同学一上来就想着集成TensorFlow Lite或者ONNX,反而把苹果自家这三件套给忽略了。我个人觉得,在iOS上做推理,原生框架永远是第一选择。为什么?因为它们是系统级优化的,能最大程度发挥A系列芯片的潜力。

今天咱们就挨个看看Core ML、Metal Performance Shaders(MPS)和Vision框架。这三个东西各司其职,但又可以互相配合。你想想看,搞懂它们,你就能在iPhone上跑MobileViT了。

2.1 Core ML:苹果的AI推理引擎

Core ML是苹果在2017年推出的机器学习框架。说白了,它就是iOS上的模型运行环境。你训练好的模型,不管是PyTorch还是TensorFlow的,都可以转换成.mlmodel文件,然后丢给Core ML去跑。

Core ML的核心能力:

  • 模型转换:支持从PyTorch、TensorFlow、Keras等主流框架转换
  • 硬件加速:自动利用CPU、GPU、Neural Engine
  • 低功耗推理:相比第三方框架,功耗控制更好
  • 隐私保护:所有推理都在设备端完成

重要概念:Core ML其实是一个运行时,它不负责训练。你只需要把训练好的模型转换过来,它负责在设备上高效运行。

我在项目中遇到过一个问题:用PyTorch训练的MobileViT模型,直接转Core ML会报错。后来发现是某些算子不支持。嗯,这里要注意,不是所有PyTorch算子都能转。我建议你在训练时就考虑目标平台,尽量用Core ML支持的算子。

2.2 Metal Performance Shaders:GPU加速利器

Metal Performance Shaders,简称MPS,是苹果Metal框架的一部分。它提供了一系列高度优化的GPU计算内核,包括矩阵乘法、卷积、池化等。说白了,它就是给GPU写好的“加速库”。

MPS在AI推理中的角色:

  • 卷积运算:MPS提供了MPSImageConvolution等内核
  • 矩阵运算:MPSMatrixMultiplication等
  • 神经网络层:MPS提供了完整的神经网络图执行能力

我记得有一次,Core ML跑一个模型速度不理想,我尝试直接用MPS写推理代码。结果发现,对于某些自定义层,MPS反而更灵活。但代价是——你得自己管理GPU内存和计算管线。

我的经验:如果你只是想把MobileViT跑起来,用Core ML就够了。但如果你需要对推理过程做精细控制(比如混合精度、自定义算子),那MPS是更好的选择。

为什么会这样?因为Core ML是一个黑盒,你很难干预它的内部优化策略。而MPS给了你直接操作GPU的能力。当然,这也意味着你需要更懂GPU编程。

2.3 Vision框架:图像处理的瑞士军刀

Vision框架是苹果在2017年推出的图像分析框架。它内置了很多预训练模型,比如人脸检测、文字识别、物体分类等。但你可能不知道,Vision框架也可以加载自定义的Core ML模型。

Vision框架的核心功能:

  • 图像预处理:自动缩放、裁剪、归一化
  • 特征提取:内置了多种特征检测器
  • 模型集成:可以无缝集成Core ML模型
  • 视频处理:支持逐帧分析视频流

我曾经在做一个实时物体检测项目时,直接用Vision框架加载Core ML模型。效果出奇的好——它自动处理了图像方向、缩放等问题,我只需要关心模型输出。但要注意,Vision框架对输入图像有格式要求,比如像素格式、颜色空间等。

避坑指南:我曾经因为没注意Vision框架的输入图像格式,导致模型推理结果全错。后来发现,Vision框架默认使用BGRA格式,而我的模型训练时用的是RGB。这个问题折腾了我一整天。

2.4 三个框架的关系与选择

这三个框架不是互斥的,而是可以配合使用的。我画了一张图,帮你理清它们的关系:

iOS原生AI推理框架关系图 Core ML 模型运行时 模型转换与推理 MPS GPU加速库 底层GPU计算 Vision 图像分析框架 图像预处理+推理 调用 集成 使用场景建议: • 快速集成:Vision + Core ML,适合图像类任务 • 性能优先:Core ML + MPS,适合需要精细控制GPU的场景 • 自定义算子:直接使用MPS,适合有GPU编程经验的开发者 iOS原生AI推理框架关系图

从这张图你可以看到:

  • Core ML是中间层,它调用MPS来做GPU加速
  • Vision可以集成Core ML模型,提供更高级的图像处理能力
  • MPS是最底层,直接操作GPU

对于MobileViT这个项目,我建议的路线是:先用Core ML跑起来,如果遇到性能瓶颈,再考虑用MPS做定制优化。Vision框架则适合做图像预处理和后处理。

2.5 性能对比与选择建议

我整理了一个表格,方便你对比这三个框架:

特性 Core ML MPS Vision
易用性 高(拖拽式集成) 低(需要GPU编程) 中(API简洁但有限制)
性能 中(自动优化) 高(手动调优) 中(受限于Core ML)
灵活性 低(黑盒) 高(完全控制) 中(图像处理灵活)
适用场景 标准模型推理 自定义算子、高性能计算 图像分析、视频处理
学习曲线 低 高 中

我的建议:如果你是第一次在iOS上做AI推理,从Core ML开始。它足够应付大多数场景。等你遇到性能瓶颈或者需要自定义算子时,再深入MPS。Vision框架则可以作为图像处理的辅助工具。