Core ML — 是什么,机器学习模型及在 iOS 中的工作

作者: IT Sectr 发布日期: 2026-03-26 阅读时间: 8 分钟

Core ML — 苹果公司的机器学习框架,针对直接在 iOS、macOS、watchOS 和 tvOS 设备上运行 ML 模型进行了优化。与云端 ML 服务不同,Core ML 使用苹果的硬件加速器:Neural Engine、GPU 和 CPU,确保数据处理时的最小延迟。根据 Apple Core ML Documentation (2026),该框架支持 PyTorch、TensorFlow 和 Create ML 模型以统一的 .mlpackage 格式,平均推理时间为 5–50 毫秒。

要点

  • Core ML — 苹果在生态系统所有平台上进行设备端机器学习的框架
  • Apple Neural Engine (ANE) 提供神经网络的硬件加速,性能高达 11 TOPS
  • .mlpackage 格式将模型、元数据和配置整合在一个方便的容器中
  • 转换来自 PyTorch 和 TensorFlow 的模型通过 Python 工具 coremltools 完成
  • 集成Vision 和 Natural Language 可以创建复杂的 ML 管道

什么是 Core ML?

Core ML — 是苹果在 WWDC 2017 上推出的机器学习框架,作为 iPhone、iPad、Mac、Apple Watch 和 Apple TV 开发生态系统的一部分。Core ML 提供了在设备上运行 ML 模型的运行时环境,使开发者无需关注硬件优化的细节。该框架会自动为每个模型操作选择最佳计算引擎 — A12+ 芯片上的 Neural Engine、GPU 或 CPU。

Core ML 的关键优势 — 与 Apple Silicon 深度集成。神经网络操作在专用的 Neural Engine 上执行,不会加重处理器主核心的负担。据苹果称(WWDC 2025),Core ML 模型在类似 Android 设备上比 TensorFlow Lite 快 6 倍。

主要功能

Core ML 支持广泛的机器学习任务:图像分类、物体检测、语义分割、自然语言处理、声音分析和表格数据。该框架适用于各种类型的模型:神经网络(卷积、循环、变换器)、树集成、线性回归和高斯过程。

Core ML 如何工作

Core ML 接收 .mlpackage 格式的训练模型作为输入,将其编译为针对特定设备优化的机器码,并通过统一 API 启动推理。整个管道 — 从加载模型到获取结果 — 只需要 3–5 行 Swift 代码。

.mlpackage 模型格式

.mlpackage — 是一种容器格式,由苹果于 2020 年引入,用于取代过时的 .mlmodel。该包是一个包含 JSON 清单、MLProgram 二进制格式的模型文件、元数据(作者、版本、描述)和资源(如类别标签)的目录。据苹果称,由于权重优化,.mlpackage 比 .mlmodel 减小模型大小 30–50%。

Apple Neural Engine

Apple Neural Engine (ANE) — 从 A12 Bionic (2018) 开始嵌入苹果芯片的专用神经处理器。ANE 在相同功耗下处理矩阵运算的效率比 CPU 高几十倍。ANE 的性能从 A12 的 5 TOPS 提升到 M4 Ultra (2025) 的 35 TOPS,使得可以运行具有数十亿参数的模型。ANE 自动用于所有具有神经网络架构的 Core ML 模型。

Core ML 的一个重要特性 — 支持模型量化到 FP16 和 INT8 而不损失精度。量化将模型大小减少 2–4 倍,并在 ANE 上将推理速度提高 40–60%。苹果提供 Xcode Model Quantization 工具用于自动选择最佳精度:开发者加载模型,指定允许的质量损失(通常 0.1–0.5%),Xcode 选择最佳的权重表示格式。

Core ML 性能对比

芯片TOPS (ANE)ResNet-50 推理年份
A12 Bionic518 毫秒2018
A14 Bionic119 毫秒2020
M1 Max224 毫秒2021
M4 Ultra352 毫秒2025

将模型转换为 Core ML

大多数 ML 模型在 PyTorch 或 TensorFlow 中创建,需要在 Core ML 中使用之前转换为 .mlpackage 格式。苹果提供 coremltools 工具 — 用于模型转换、优化和验证的 Python 包。

coremltools 工具

coremltools — 是苹果官方用于转换 ML 模型的工具。支持从 PyTorch(通过 torch.onnx 或直接)、TensorFlow(SavedModel、H5、Frozen Graph)和 ONNX 导入。转换后可以激活 FP16 或 INT8 量化,将模型大小减少 2–4 倍而不会显著损失精度。

从 PyTorch 转换示例

让我们看看使用 coremltools 8.0 版本将训练好的 PyTorch 模型转换为 Core ML 格式的过程。该过程在 Python 中需要 2–3 步。

python
import torch
import coremltools as ct

# 加载训练好的 PyTorch 模型
model = torch.load('model.pth')
model.eval()

# 使用示例输入跟踪模型
example_input = torch.randn(1, 3, 224, 224)
traced_model = torch.jit.trace(model, example_input)

# 转换为 Core ML .mlpackage
mlmodel = ct.convert(
    traced_model,
    convert_to='mlprogram',
    inputs=[ct.TensorType(shape=(1, 3, 224, 224))]
)
mlmodel.save('Model.mlpackage')

代码加载训练好的 PyTorch 模型,用示例输入执行 JIT 跟踪,并将其转换为 mlprogram 格式(Core ML 二进制格式)。生成的 .mlpackage 可以拖入 Xcode 并立即在 Swift 代码中使用。

将 Core ML 集成到 iOS 应用

模型转换后,将其集成到 iOS 应用的 Swift 代码中只需几行。Xcode 会根据 .mlpackage 元数据自动为模型生成 Swift 类。

Swift 代码示例

让我们看看使用 Core ML 和 Vision 框架进行图像分类的示例。Vision 会自动将图像转换为所需的大小和像素格式。

swift
import CoreML
import Vision

// 加载 Core ML 模型
guard let model = try? VNCoreMLModel(
    for: MobileNetV2.configuration.model
) else { return }

// 创建 VNCoreMLRequest
let request = VNCoreMLRequest(model: model) { request, error in
    guard let results = request.results
        as? [VNClassificationObservation]
    else { return }

    // 输出前 3 个预测结果
    for result in results.prefix(3) {
        print("\(result.identifier):
              \(result.confidence)")
    }
}

// 启动图像处理
let handler = VNImageRequestHandler(
    url: imageURL
)
try? handler.perform([request])

Swift 代码通过 Vision 框架加载 MobileNetV2 模型,创建分类请求,并处理结果 — 包含类别标签和置信度百分比的 VNClassificationObservation 对象数组。从加载到获取结果的整个管道根据模型不同需要 5–50 毫秒。

为了优化启动时间,Core ML 在首次使用时编译模型。预编译(precompiled model)将冷启动从 2–3 秒减少到 100–200 毫秒。建议在 Xcode 的构建阶段进行模型编译,而不是在应用首次启动时。这对于包含多个 ML 模型的应用尤其重要 — 例如,物体检测 + 分类 + NLP。

Core ML vs ML Kit

Core ML 和 ML Kit 解决类似的设备端 ML 任务,但面向不同的生态系统。Core ML 与 Apple Silicon 深度集成,仅支持苹果平台。Google 的 ML Kit 是适用于 Android 和 iOS 的跨平台解决方案。

特性Core MLML Kit
平台iOS, macOS, watchOS, tvOSAndroid, iOS
现成 API通过 Vision, Natural Language15+ 内置 API
自定义模型.mlpackage (PyTorch, TF)TFLite(通过适配器)
硬件加速ANE, GPU, CPUGPU (Android), CPU
上手简易度需要模型转换无需数据科学的现成 API
性能2–50 毫秒 (ANE)80–200 毫秒 (CPU/GPU)

如果您的生态系统完全是苹果,并且需要通过 ANE 获得最大性能,请选择 Core ML。如果需要跨平台或无需转换的现成 API — ML Kit 会更实用。

在实践中,许多项目同时使用这两个框架:在 iOS 上通过 Core ML 获得高性能,在 Android 上使用 ML Kit 或 TensorFlow Lite。同一个 PyTorch 模型被转换为 .mlpackage(用于 Apple)和 .tflite(用于 Android),从而在两个平台上保持相同的 ML 功能质量。这种方法在 DevOps 中需要稍微多一点的工作量,但能提供最大的受众覆盖。

在 Core ML 和替代方案之间做选择时,请考虑开发成本:Core ML 集成所需的代码更少(3–5 行 Swift vs. TFLite 的 15–20 行),但需要 Mac 和 Xcode 进行构建。ML Kit 则相反,可以在任何平台上工作,但由于无法访问 Apple Neural Engine,在 iOS 上的性能较低。

常见问题

Core ML 运行的最低要求是什么?

iOS 11+ 用于基础模型,iOS 14+ 用于 .mlpackage 格式。Apple Neural Engine 需要 A12 Bionic 及以上芯片。Core ML 支持 2017 年以来的所有 iPhone、iPad 和 Mac。

Core ML 能否与 TensorFlow 一起使用?

可以,通过 coremltools 工具。TensorFlow 模型可以转换为 .mlpackage 并保持精度。支持 TensorFlow 2.x、SavedModel、H5 和 Frozen Graph 格式。

.mlpackage 与 .mlmodel 有何不同?

.mlpackage — 现代容器格式,是一个包含元数据、二进制 MLProgram 文件和资源的目录。比旧的 .mlmodel 紧凑 2–3 倍,并支持量化。

Core ML 如何处理数据隐私?

所有计算严格在设备上执行。Core ML 不会将数据发送到苹果服务器。该框架在飞行模式下工作,推理不需要互联网连接。

Core ML 支持哪些编程语言?

Swift — 在 iOS/macOS 应用中集成 Core ML 的主要语言。Python 用于通过 coremltools 进行模型转换。Objective-C 也支持向后兼容。

总结

  • Core ML — 苹果在生态系统所有平台上支持 Apple Neural Engine 的设备端 ML 框架
  • .mlpackage — 将模型、元数据和资源整合在一个包中的现代容器格式
  • Apple Neural Engine 在 M4 Ultra 上提供高达 35 TOPS 性能的神经网络硬件加速
  • coremltools 允许在 Python 中用三个步骤转换来自 PyTorch、TensorFlow 和 ONNX 的模型
  • 集成通过 Vision 框架需要 5–10 行 Swift 代码在图像上运行模型
  • 推理性能根据模型和芯片不同为 2–50 毫秒
  • 数据隐私 — 所有计算严格在本地进行,不向服务器发送数据

我们将开发一款交钥匙移动应用程序

IT Sectr自2017年以来为初创企业和企业打造iOS和Android应用程序。我们将为您提供咨询并提出最佳解决方案。

讨论项目

另请阅读