Apple Core AI 集成#
coreai-core 会发布 macosx_26_0_arm64 和 manylinux_2_34_x86_64 wheel,因此可在 Apple 芯片 Mac 和 glibc 2.34 或更高版本的 x86_64 Linux 上执行导出。导出的 .aimodel 可在 iOS 27 和 macOS 27 上运行。Ultralytics iOS SDK(8.9.15 及更高版本)和 Flutter 插件(0.6.15 及更高版本)可在 iOS 27 设备上选择加载 .aimodel 资源;Core ML 仍是默认选项。
Core AI 是 Apple 推出的新框架,可直接在 Apple 芯片上运行神经网络。它引入了 .aimodel 模型格式、现代 Swift 推理 API、基于 PyTorch 的转换工具、提前编译、模型专门化,以及专用调试和性能分析工具。
Apple 将 Core AI 描述为设备端 AI 执行技术的下一代演进,也是设备端 Apple Intelligence 背后的推理框架。它面向当前的神经网络架构设计,涵盖紧凑型视觉模型到大型生成式模型,并可在 CPU、GPU 和 Apple 神经网络引擎(ANE)之间调度工作。
Core AI 是一条新的部署路径,而不是 Core ML 的新名称。这两个框架使用不同的模型格式、转换工具、运行时 API 和应用集成模式。
Core AI 与 Core ML 对比#
| 能力 | Core AI | Core ML |
|---|---|---|
| 模型文件 | .aimodel | .mlpackage 或 .mlmodel |
| Ultralytics 导出 | 可通过 format=coreai 使用 | 可通过 format=coreml 使用 |
| Apple 运行时 API | AIModel、InferenceFunction 和 NDArray | MLModel,通常通过 VNCoreMLModel 和 VNCoreMLRequest 使用 |
| 转换工作流 | 通过 coreai-torch 转换 PyTorch torch.export | 通过 coremltools 转换 TorchScript |
| 主要侧重点 | 现代神经网络和生成式 AI | 广泛的机器学习部署,包括神经网络和非神经网络模型 |
| 图像集成 | 应用准备张量,或使用 Core AI 图像描述符和缓冲区 | 直接集成 Vision 框架,处理图像缩放、方向和请求 |
| 硬件 | CPU、GPU 和 Apple 神经网络引擎 | CPU、GPU 和 Apple 神经网络引擎 |
| 模型准备 | 在安装时或首次使用时进行专门化,并可选择提前编译 | 通过 Xcode 或在设备上编译模型 |
| 自定义操作 | 自定义 Core AI 降级实现和 Metal 内核 | Core ML 自定义层和受支持的 MIL 操作 |
| 部署可用性 | 新一代 Apple 操作系统;目前为 beta 版 | 广泛支持现有 Apple 操作系统 |
| Ultralytics iOS 和 Flutter SDK | 可在 iOS 27 及更高版本的设备上选择启用 | 全面支持,且为默认选项 |
如果应用需要广泛的设备覆盖、Vision 框架集成,或决策树和表格数据管线等模型类型,Core ML 仍是合适的选择。Apple 会继续支持 Core ML,并建议开发者使用 Core ML 处理非神经网络模型类型。
Core AI 格式的工作原理#
Core AI 的创作工作流从 PyTorch 模型开始:
PyTorch model
↓ torch.export
ExportedProgram
↓ coreai-torch
Core AI program
↓ optimize and save
.aimodel
↓ specialize or compile ahead of time
Apple silicon executableApple 的 coreai-torch 软件包通过将 PyTorch ATen 操作降级为 Core AI 操作来转换 torch.export.ExportedProgram。对于不受支持的操作,可以通过自定义降级实现或自定义 Metal 内核来实现。
生成的 .aimodel 是尚未专门化的模型资源。应用准备模型时,Core AI 会针对目标设备对模型进行专门化。应用可以在首次使用时进行专门化,也可以提前请求专门化,或随应用提供提前编译的模型以缩短初始加载时间。
在 Swift 中,应用使用 Core AI 框架加载资源、选择推理函数、提供带类型的 NDArray 输入,并接收具名输出。这与将 Core ML 模型封装在 Vision 请求中不同,因此采用 Core AI 需要应用运行时支持 .aimodel 资源。
如需了解实现细节,请参阅 Apple 关于 AIModel、模型专门化和缓存以及提前编译的文档。
将 YOLO26 模型导出到 Core AI#
from ultralytics import YOLO
model = YOLO("yolo26n.pt")
model.export(format="coreai") # 创建“yolo26n.aimodel”
model.export(format="coreai", quantize=16) # FP16 asset
# 运行导出的模型
coreai_model = YOLO("yolo26n.aimodel")
results = coreai_model("https://ultralytics.com/images/bus.jpg")完整参数列表请参阅导出模式。计算图是静态的:它会按照传给 export 的 imgsz 进行跟踪,因此预测时请使用相同尺寸。Ultralytics 元数据保存在资源自身的 metadata.json 中,因此类别名称、步幅和任务信息在整个往返过程中都会保留。
选择检测头#
使用 nms=False 时,YOLO26 会导出端到端检测头,在计算图内部筛选检测结果。Core AI 没有 top-k 原语,因此该筛选会降级为完整排序,并在 Apple 神经网络引擎分区边界产生固定开销——约 1.7 ms,与 max_det 无关。使用 nms=None 导出时,则会输出原始 (1, 84, 8400) 预测结果,并由预测器负责非极大值抑制:
yolo export model=yolo26n.pt format=coreai nms=None quantize=16在运行 iOS 27.0 的 iPhone 17 Pro 上,YOLO26n 在输入尺寸为 640 时,检测头位于计算图内的耗时为 3.01 ms,移除检测头后为 1.28 ms(FP16、提前编译、三个交错的 50 次迭代区块)。两种方式都通过 YOLO(...) 往返执行推理。如果单次计算图调用必须返回最终检测结果,请使用 nms=False;如果要在外部执行 NMS,则保留默认的 nms=None。
在 iOS 27 或 macOS 27 上,应用随后可通过 Apple 的 Core AI Swift API 加载并运行导出的资源。导出资源使用入口点 main,接收形状为 [batch, 3, imgsz, imgsz] 的单个 images 输入,并返回 output0(实例分割模型还会返回 output1):
import CoreAI
let modelURL = Bundle.main.url(forResource: "yolo26n", withExtension: "aimodel")!
let model = try await AIModel(contentsOf: modelURL)
guard let function = try model.loadFunction(named: "main") else {
throw AppError.missingInferenceFunction
}
let outputs = try await function.run(inputs: ["images": imageTensor])与当前的 Core ML 和 Vision 工作流不同,Ultralytics iOS SDK中的 Core AI 路径会自行执行 letterbox 预处理并构造 NDArray,从资源的 metadata.json 读取相同的 Ultralytics 元数据,并复用 Core ML 输出解码器。应用传入 .aimodel 路径或 .aimodel.zip URL 时即可加载。Apple 在 Core AI 框架文档中提供最新 API 详情,并在 Core AI 模型仓库中提供可运行的模型示例。
实测性能#
YOLO26n FP16 (quantize=16) 的 Core ML 和 Core AI 导出模型采用默认原始检测头 (nms=None),并在配备 Apple M4 的 Mac mini 上进行端到端单图推理;该 Mac mini 配备由 4 个性能核心和 6 个能效核心组成的 CPU、10 核 GPU、16 核神经网络引擎和 16 GB 内存,运行 macOS 27.0;Core ML 推理使用 ultralytics 8.4.168 和 coremltools 9.0,Core AI 推理使用 coreai-torch 0.4.3 并搭配 coreai-core 1.0.0b3,均在 Python 3.13 上运行。每个单元格显示总耗时(预处理 + 推理 + 后处理),其下方列出各阶段耗时。
| 模型 | 任务 | 尺寸 (像素) | Core ML CPUCPU_ONLY(毫秒) | Core ML CPU + 优先使用 ANECPU_AND_NE(毫秒) | Core AI CPUcpu_only()(毫秒) | Core AI CPU + 优先使用 ANEneural_engine()(毫秒) |
|---|---|---|---|---|---|---|
| YOLO26n | 检测 | 640 | 14.4 0.6 / 13.4 / 0.4 | 7.6 0.6 / 6.7 / 0.4 | 16.8 0.6 / 15.9 / 0.3 | 2.8 0.6 / 2.0 / 0.2 |
| YOLO26n-seg | 分割 | 640 | 18.7 0.6 / 16.5 / 1.5 | 9.2 0.6 / 7.1 / 1.5 | 25.3 0.6 / 23.2 / 1.5 | 5.1 0.6 / 3.1 / 1.4 |
| YOLO26n-sem | 语义 | 640 | 33.9 1.3 / 32.2 / 0.4 | 73.7 1.4 / 71.9 / 0.4 | 47.1 1.2 / 38.5 / 7.4 | 18.7 1.2 / 11.1 / 6.4 |
| YOLO26n-depth | 深度 | 640 | 36.8 0.8 / 35.5 / 0.5 | 12.1 0.9 / 10.7 / 0.5 | 40.2 0.8 / 39.0 / 0.5 | 7.5 0.7 / 6.3 / 0.5 |
| YOLO26n-cls | 分类 | 224 | 3.8 1.9 / 1.8 / 0.0 | 3.3 1.9 / 1.4 / 0.0 | 3.0 1.9 / 1.0 / 0.0 | 2.4 1.9 / 0.6 / 0.0 |
| YOLO26n-pose | 姿态 | 640 | 15.5 0.6 / 14.6 / 0.3 | 7.0 0.6 / 6.2 / 0.3 | 17.8 0.5 / 17.0 / 0.3 | 2.7 0.5 / 2.0 / 0.2 |
| YOLO26n-obb | OBB | 640 | 32.7 1.3 / 31.1 / 0.2 | 16.9 1.5 / 15.2 / 0.2 | 37.2 1.1 / 35.9 / 0.2 | 5.7 1.3 / 4.3 / 0.1 |
- 速度数据是单图突发延迟:通过 Ultralytics Python API,在
bus.jpg上先进行 3 次预热调用,再对predict调用 15 次并取平均值;每个模型和计算单元都在独立的新进程中运行。同一轮顺序测试中,各任务的 CPU/加速器顺序交替进行。Core ML 行使用coremltools.ComputeUnit.CPU_ONLY或CPU_AND_NE加载;Core AI 行使用SpecializationOptions.cpu_only()或SpecializationOptions.from_preferred_compute_unit_kind(ComputeUnitKind.neural_engine())进行专门化,最终的运算分配由各框架控制。 - 在每个计算单元上,检测、分割、分类、姿态和 OBB 两种格式返回的预测结果都相同。在这台 Mac 上,优先使用神经网络引擎时,Core ML FP16 语义分割模型的运行速度比仅使用 CPU 时更慢;Core AI 语义后处理耗时为 6.4 到 7.4 ms,而 Core ML 为 0.4 ms。
- 在 CoreML 集成中查看 iPhone 17 Pro 设备端结果并进行比较。
Core AI 的优势#
Core AI 为未来的 Ultralytics 部署带来了多项值得期待的优势:
- **现代 PyTorch 导出路径:**转换从
torch.export开始,相较于许多现有导出器采用的跟踪工作流,能够保留表达能力更强的 PyTorch 计算图。 - **精细的运行时控制:**应用可以管理专门化、编译模型缓存、推理函数、内存和计算任务放置。
- **先进的模型支持:**有状态执行、动态形状、单个资源中的多个函数以及自定义 Metal 内核,都是为现代视觉和生成式架构而设计的。
- **专用开发者工具:**Core AI Debugger 可以检查计算图和张量值,并追溯到相应的 Python 源代码。Xcode 和 Instruments 可用于运行时性能分析。
- **零拷贝机会:**Core AI 提供存储和缓冲区控制,旨在减少相机、图形处理和推理任务之间的数据拷贝。
- **针对 Apple 芯片优化:**设备专门化使 Apple 能够针对特定设备上的 CPU、GPU 和神经网络引擎优化模型。
- **灵活压缩:**Apple 的 Core AI Optimization 工具支持量化、调色板化和剪枝,包括低位宽权重格式。
对于具有动态执行、更大多模态组件,或难以映射到现有 Core ML 操作的自定义操作的未来 YOLO 模型,这些能力可能尤其有用。
当前的劣势和限制#
目前,Core AI 还不能取代生产环境中的 Core ML 路径:
- **需要新一代操作系统:**公开提供的框架面向 iOS 27 和 macOS 27,而 Core ML 支持的已安装设备数量要多得多。
- **Beta 软件:**Apple 的 Core AI 框架及其 Python 工具链中的部分内容仍处于初期阶段,正式发布前可能会发生变化。
- 导出环境限制较多:
coreai-torch目前需要 Python 3.11 至 3.14,以及较新的 PyTorch 版本;其支持范围远小于 Ultralytics 支持的 Python 和 PyTorch 版本范围。 - 导出平台受限:
coreai-core仅发布macosx_26_0_arm64和manylinux_2_34_x86_64wheel,因此format=coreai需要在运行 macOS 26 或更高版本的 Apple 芯片 Mac 上使用,或在 glibc 2.34 或更高版本的 x86_64 Linux 上使用(例如 Ubuntu 22.04+)。运行.aimodel仍需要 Apple 硬件。 - **Ultralytics SDK 中需选择启用,并非默认选项:**在 iPhone 17 Pro 上,设备端对比显示,完整管线中 Core AI 与 Core ML 性能相当,而非更快;语义、深度和仅使用 CPU 的推理更慢,FP16 资源的下载体积约为两倍,因此 iOS SDK 和 Flutter 插件仍默认使用 Core ML。
- **SDK 应使用原始检测头:**使用
nms=False时,YOLO26n 在 Core AI 上的运行时间约为 Core ML 的两倍(一次对比测试中为 3.06 ms,而 Core ML 为 1.53 ms);在 iOS 27.0 上,FP16 端到端姿势模型使用 Core AI 默认的任务放置方式时检测不到任何目标(apple/coreai-torch#115)。原始检测头(nms=None,默认选项)可避免这两个问题,SDK 会在 Swift 中运行 NMS。请参阅选择检测头。 - **没有 iOS Simulator 运行时:**iOS Simulator SDK 不包含 Core AI。
- 需要迁移应用:
.aimodel不能直接替换.mlpackage;模型加载、预处理、推理调用、元数据处理和输出解码都需要在 Ultralytics SDK 之外实现 Core AI 支持,而 Ultralytics SDK 已提供此实现。 - **生产环境验证数据有限:**性能、功耗、首次运行专门化时间、精度和压缩效果,都需要在受支持的 YOLO 任务和设备矩阵中进行验证。
- **没有 NMS 管线:**Core ML 可以为较早的 YOLO 检测模型封装 NMS 阶段。Core AI 默认导出原始的一对多预测;对 YOLO26 的无 NMS 检测头,请使用
nms=False。不支持内嵌 NMS(nms=True)和dynamic=True。coreai-torch没有针对torchvision::nms的降级实现,因此 NMS 会留在主机端执行。 - **输入尺寸固定:**导出的计算图会按照一个
imgsz进行跟踪,不支持动态形状,因此预测时必须使用导出时的尺寸。 - **FP16 资源加载时可能导致程序中止:**某些 FP16
.aimodel资源无法加载其 Apple 神经网络引擎程序,MPSGraph 会触发断言失败并结束进程,而不是回退。此问题发生在 Apple 运行时内部,早于任何 Ultralytics 代码执行;同一资源使用仅 CPU 的专门化方式则可以加载。如果资源出现此问题,请回退到 FP32;在 iPhone 17 Pro 上检查过的 FP16 SDK 资源(所有 nano 模型、所有尺寸的 detect 模型,以及各任务中最大的模型)均可正常加载,不会导致程序中止。
应该使用哪种 Apple 格式?#
如果你需要以下功能,目前请选择 Core ML:
- 部署到当前和较旧版本的 Apple 操作系统
- 将 Ultralytics iOS 或 Flutter SDK 的默认路径作为部署方案
- 使用 Vision 框架处理图像
- 经过测试的 FP16 和 INT8 YOLO 部署方案
- 为兼容的旧版检测模型内嵌 NMS
如果你可以要求使用 iOS 27 或 macOS 27,并且需要以下功能,请评估 Core AI:
- 最新的 Apple 设备端神经网络运行时
- 显式控制专门化和缓存
- 先进的动态或有状态模型执行
- 自定义 Core AI 操作或 Metal 内核
- 详细调试 Core AI 计算图并进行运行时性能分析
预计应用过渡期间 Core ML 和 Core AI 会共存。支持 Core AI 并不意味着可以立即弃用 Core ML,因为两者的部署目标和应用接口约定不同。
Ultralytics 路线图#
专用的 coreai 导出目标已经实现:导出和数值验证覆盖受支持的 YOLO26 任务模型,并在 macOS 26 上持续通过 Ultralytics CI 运行,同时在设备上测量 FP16 延迟。Core AI 要达到与 Core ML 路径相当的水平,后续路线图包括:
- 缩小 Apple 神经网络引擎上的端到端检测头延迟差距(apple/coreai-torch#66),并解决神经网络引擎正确性问题(apple/coreai-torch#115、#116)。
- INT8 和调色板化的 Core AI 资源;SDK 资源采用 FP16,下载体积约为 INT8 Core ML 资源的两倍。
- 发布稳定版 Apple 框架和转换工具(iOS 27 和 macOS 27 这一代目前仍处于 beta 阶段)。
- 在受支持的设备矩阵中评测内存、功耗和专门化性能。
Ultralytics iOS SDK 和 Flutter 插件可在 iOS 27 及更高版本中选择启用 Core AI;Core ML 仍是默认选项,也是覆盖 iOS 27 以下版本的推荐目标。请关注 Ultralytics 路线图和发行说明,了解剩余事项的进展。
更多资源#
- Apple Core AI 概览
- Core AI 框架文档
- Core AI PyTorch 扩展
- Core AI 优化
- Apple Core AI 模型仓库
- Ultralytics Core ML 集成
常见问题#
可以。在运行 macOS 26 或更高版本的 Apple 芯片 Mac 上,或在 glibc 2.34 或更高版本的 x86_64 Linux 上,使用
model.export(format="coreai")或yolo export format=coreai导出;导出的.aimodel可在 iOS 27 和 macOS 27 上运行。Ultralytics iOS 和 Flutter SDK 可在 iOS 27 设备上选择加载该模型。若要使用默认路径,或在更早一代的操作系统上运行,请使用format="coreml"导出 Core ML.mlpackage文件。不会立即取代。Core AI 是 Apple 面向现代神经网络的较新方案,而 Core ML 仍受支持,并且支持更广泛的操作系统、可与 Vision 集成,还支持非神经网络模型。
不可以。它们包含不同的模型表示形式,并由不同的框架加载。转换必须从源模型开始,并使用相应的 Apple 工具链。
初期集成预计将与 Core ML 并存。未来是否取代 Core ML,取决于操作系统的普及程度、工具链的稳定性以及设备端性能。