Apple Core AI統合#
coreai-core は macosx_26_0_arm64 と manylinux_2_34_x86_64 の wheel を公開しているため、Apple silicon 搭載 Mac および glibc 2.34 以降の x86_64 Linux でエクスポートを実行できます。エクスポートされた .aimodel は iOS 27 および macOS 27 で動作します。Ultralytics iOS SDK(8.9.15 以降)と Flutter plugin(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 Neural Engine(ANE)にまたがる処理をスケジュールできます。
Core AIはCore MLの新しい名称ではなく、新たなデプロイ経路です。2つのフレームワークでは、モデル形式、変換ツール、ランタイム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を介して使用 |
| 変換ワークフロー | PyTorchのtorch.exportからcoreai-torchを介した変換 | coremltoolsを介したTorchScript変換 |
| 主な対象 | 最新のニューラルネットワークと生成AI | ニューラルモデルと非ニューラルモデルを含む、幅広い機械学習のデプロイ |
| 画像の統合 | アプリケーションでテンソルを準備するか、Core AIの画像記述子とバッファを使用 | 画像のスケーリング、向きの調整、リクエストに対応するVisionフレームワークとの直接統合 |
| ハードウェア | CPU、GPU、Apple Neural Engine | CPU、GPU、Apple Neural Engine |
| モデルの準備 | インストール時または初回使用時に特殊化し、必要に応じて事前コンパイル | Xcodeまたはデバイス上でのモデルコンパイル |
| カスタムオペレーション | カスタムCore AI loweringとMetalカーネル | Core MLのカスタムレイヤーとサポート対象のMILオペレーション |
| デプロイの提供状況 | Appleの新しいOS世代。現在ベータ版 | 既存のApple OS全般で幅広くサポート |
| 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オペレーションにloweringすることで、torch.export.ExportedProgramを変換します。サポートされていないオペレーションは、カスタムloweringまたはカスタム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プリミティブがないため、この選択処理は全件ソートにloweringされ、Apple Neural Engineのパーティション境界で固定コストが発生します。このコストは約1.7 msで、max_detにかかわらず一定です。nms=Noneを指定してエクスポートすると、代わりに生の(1, 84, 8400)予測を出力し、非最大抑制はpredictorに委ねられます。
yolo export model=yolo26n.pt format=coreai nms=None quantize=16iOS 27.0を搭載したiPhone 17 Proでは、640サイズのYOLO26nは、ヘッドをグラフに含めた場合に3.01 ms、含めない場合に1.28 msです(FP16、事前コンパイル済み、50イテレーションを3ブロックに分けて交互に実行)。どちらも推論時にはYOLO(...)を介して往復変換されます。1回のグラフ呼び出しで検出結果まで取得する必要がある場合はnms=Falseを使用し、外部でNMSを実行する場合はデフォルトのnms=Noneを使用してください。
iOS 27またはmacOS 27では、アプリケーションはAppleのCore AI Swift APIを介してエクスポート済みアセットを読み込み、実行します。エクスポート済みアセットはエントリポイントとしてmainを使用し、形状が[batch, 3, imgsz, imgsz]のimages入力を1つ受け取り、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経路では、レターボックス前処理とNDArrayの構築を独自に行い、アセットのmetadata.jsonから同じUltralyticsメタデータを読み取り、Core MLの出力デコーダーを再利用します。アプリから.aimodelパスまたは.aimodel.zip URLが渡されると読み込まれます。Appleは、Core AIフレームワークのドキュメントで最新のAPI詳細を、Core AIモデルリポジトリで動作するモデルの例を公開しています。
実測パフォーマンス#
Apple M4 搭載 Mac mini(Performance CPU コア 4 個、Efficiency CPU コア 6 個、10 コア GPU、16 コア Neural Engine)、メモリ 16 GB、macOS 27.0 での YOLO26n FP16(quantize=16)Core ML および Core AI エクスポートのエンドツーエンド単一画像推論。デフォルトの raw head(nms=None)を使用し、Core ML 推論には ultralytics 8.4.168 と coremltools 9.0、Python 3.13 上の Core AI 推論には coreai-torch 0.4.3 と coreai-core 1.0.0b3 を使用しています。各セルには合計時間(前処理 + 推論 + 後処理)を示し、その下にステージごとの内訳を示しています。
| モデル | タスク | サイズ (ピクセル) | Core ML CPUCPU_ONLY(ms) | Core ML CPU + ANE 優先CPU_AND_NE(ms) | Core AI CPUcpu_only()(ms) | Core AI CPU + ANE 優先neural_engine()(ms) |
|---|---|---|---|---|---|---|
| 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 |
- 速度の値は単一画像バーストのレイテンシです。
bus.jpg上で Ultralytics Python API を介して実行したpredict呼び出しについて、ウォームアップ 3 回の後に続く 15 回の平均値を示しています。各モデルとコンピュートユニットは新しいプロセスで実行しています。1 回の連続スイープ内で、CPU とアクセラレーターの順序をタスクごとに交互にしています。Core ML の行ではcoremltools.ComputeUnit.CPU_ONLYまたはCPU_AND_NEを読み込みます。Core AI の行ではSpecializationOptions.cpu_only()またはSpecializationOptions.from_preferred_compute_unit_kind(ComputeUnitKind.neural_engine())を使用して特化させ、最終的な演算の配置は各フレームワークによって制御されます。 - Detect、segment、classify、pose、OBB は、すべてのコンピュートユニットで両方の形式において同じ予測を返しました。この Mac では、Core ML FP16 のセマンティックモデルは、Neural Engine を優先した場合、CPU のみの場合よりも低速で動作します。また、Core AI のセマンティック後処理には 6.4~7.4 ms かかるのに対し、Core ML では 0.4 ms です。
- CoreML integrationで、デバイス上の iPhone 17 Pro の結果と比較してください。
Core AIの利点#
Core AIには、将来的なUltralyticsのデプロイに役立つ可能性のある利点がいくつかあります。
- 最新のPyTorchエクスポート経路: 変換は
torch.exportから始まるため、多くの既存のエクスポーターで使用されるトレース方式よりも表現力の高いPyTorchグラフを保持できます。 - きめ細かなランタイム制御: アプリケーションで、特殊化、コンパイル済みモデルのキャッシュ、推論関数、メモリ、計算処理の配置を管理できます。
- 高度なモデルのサポート: ステートフル実行、動的形状、1つのアーティファクト内の複数関数、カスタムMetalカーネルは、最新のビジョンおよび生成アーキテクチャ向けに設計されています。
- 専用の開発者ツール: Core AI Debuggerでは、グラフやテンソル値を調べ、それらを元のPythonコードまで追跡できます。XcodeとInstrumentsでは、ランタイムのプロファイリングが可能です。
- ゼロコピーの可能性: Core AIは、カメラ、グラフィックス、推論の各ワークロード間でのコピーを減らすことを目的としたストレージおよびバッファ制御機能を提供します。
- Appleシリコン向けの最適化: デバイスごとの特殊化により、Appleは各デバイスで利用できるCPU、GPU、Neural Engineに合わせてモデルを最適化できます。
- 柔軟な圧縮: AppleのCore AI Optimizationツールは、低ビット重み形式を含む量子化、パレット化、プルーニングをサポートします。
これらの機能は、動的な実行、大規模なマルチモーダルコンポーネント、または既存のCore MLオペレーションに適切に対応付けられないカスタムオペレーションを備えた将来のYOLOモデルで、特に役立つ可能性があります。
現在の欠点と制限事項#
Core AIは、現時点では本番環境向けのCore ML経路に代わるものではありません。
- 新しいOSが必要: 公開されているフレームワークはiOS 27およびmacOS 27世代を対象としている一方、Core MLはより幅広い既存デバイスでサポートされています。
- ベータ版ソフトウェア: AppleのCore AIフレームワークとPythonツールチェーンの一部はまだ初期段階にあり、正式リリースまでに変更される可能性があります。
- エクスポート環境の制約:
coreai-torchでは現在、Python 3.11~3.14と比較的新しいPyTorchバージョンが必要です。これはUltralyticsがサポートするPythonおよびPyTorchのバージョン範囲よりも大幅に狭いものです。 - エクスポート可能なプラットフォームの制限:
coreai-coreが公開する wheel はmacosx_26_0_arm64とmanylinux_2_34_x86_64のみのため、format=coreaiを使用するには、macOS 26 以降を搭載した Apple silicon Mac、または glibc 2.34 以降の x86_64 Linux(Ubuntu 22.04 以降など)が必要です。.aimodelを実行するには、引き続き Apple 製ハードウェアが必要です。 - Ultralytics SDKではオプトインであり、デフォルトではない: iPhone 17 Proでのオンデバイス比較では、パイプライン全体の性能はCore AIとCore MLで同等であり、Core AIが上回る結果ではありませんでした。また、セマンティック推論、深度推論、CPUのみの推論は遅く、FP16アセットのダウンロードサイズは約2倍です。そのため、iOS SDKとFlutterプラグインではCore MLをデフォルトにしています。
- SDKでは生のヘッドを使用:
nms=Falseでは、Core AI上のYOLO26nはCore ML上より約2倍の時間がかかります(比較実行の1回では3.06 ms対1.53 ms)。また、FP16エンドツーエンド姿勢推定モデルは、iOS 27.0でCore AIのデフォルト配置を使用すると検出結果を返しません(apple/coreai-torch#115)。生のヘッド(nms=None、デフォルト)はこの両方を回避し、SDKはSwiftでNMSを実行します。ヘッドの選択をご覧ください。 - iOS Simulatorランタイムがない: iOS Simulator SDKにはCore AIが含まれていません。
- アプリケーションの移行が必要:
.aimodelは.mlpackageの代わりにはなりません。モデルの読み込み、前処理、推論呼び出し、メタデータ処理、出力デコードにはCore AIの実装が必要です。Ultralytics SDK以外で実装する必要がありますが、Ultralytics SDKには実装が用意されています。 - 本番環境での検証が不足: サポート対象のYOLOタスクとデバイスの組み合わせ全体で、性能、消費電力、初回の特殊化にかかる時間、精度、圧縮を検証する必要があります。
- NMSパイプラインがない: Core MLでは、旧式のYOLO検出モデル向けにNMSステージをパッケージ化できます。Core AIはデフォルトでone-to-manyの生の予測をエクスポートします。YOLO26のNMS不要ヘッドには
nms=Falseを使用してください。埋め込みNMS(nms=True)とdynamic=Trueはサポートされていません。coreai-torchにはtorchvision::nmsへのloweringがないため、NMSはホスト側で実行されます。 - 入力サイズが固定: エクスポートされたグラフは1つの
imgszでトレースされ、動的形状には対応していません。エクスポート時と同じサイズで推論してください。 - FP16アセットは読み込み時に異常終了することがある: 一部のFP16
.aimodelアセットではApple Neural Engineプログラムの読み込みに失敗し、MPSGraphがアサーション失敗を発生させます。この場合、フォールバックせずにプロセスが終了します。これはUltralyticsのコードが実行される前にAppleのランタイム内で発生し、同じアセットでもCPUのみの特殊化では読み込めます。この問題が発生するアセットではFP32に切り替えてください。iPhone 17 Proで検証したFP16 SDKアセット(すべてのnanoモデル、すべてのサイズのdetectモデル、各タスクで最大のモデル)は、異常終了せずに読み込めました。
どのApple形式を使用すべきですか?#
次の要件がある場合は、現時点ではCore MLを使用してください。
- 現行および旧世代のApple OSへのデプロイ
- Ultralytics iOS SDKまたは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 Neural Engineでのエンドツーエンドヘッドのレイテンシー差を解消する(apple/coreai-torch#66)とともに、Neural Engineの正確性に関する問題に対処します(apple/coreai-torch#115、#116)。
- INT8およびパレット化されたCore AIアセット。SDKのアセットはFP16で、INT8 Core MLアセットと比べてダウンロードサイズが約2倍です。
- Appleフレームワークと変換ツールの正式リリース(iOS 27およびmacOS 27世代は現在ベータ版です)。
- サポート対象デバイス全体でのメモリ、消費電力、特殊化のベンチマーク。
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 silicon Mac、または glibc 2.34 以降の x86_64 Linux で、
model.export(format="coreai")またはyolo export format=coreaiを使ってエクスポートできます。エクスポートされた.aimodelは iOS 27 および macOS 27 で動作します。Ultralytics iOS SDK と Flutter SDK は、iOS 27 デバイスでオプトイン設定によりこれを読み込みます。デフォルトの経路、およびそれ以前の世代の OS では、format="coreml"を使って Core ML の.mlpackageファイルをエクスポートしてください。すぐには置き換わりません。Core AIは最新のニューラルネットワーク向けにAppleが提供する新しい方法ですが、Core MLも引き続きサポートされ、より幅広いOSに対応しているほか、Visionとの統合や非ニューラルモデルのサポートも提供しています。
いいえ。それぞれ異なるモデル表現を含み、異なるフレームワークによって読み込まれます。変換は、適切なAppleツールチェーンを使用してソースモデルから開始する必要があります。
初期の統合はCore MLと共存する見込みです。将来的に置き換えるかどうかは、OSの普及状況、安定したツールの提供、およびデバイス上のパフォーマンスによって決まります。