Core MLはAppleの機械学習フレームワークで、予めトレーニングされたMLモデルをiOS、iPadOS、macOS、watchOS、tvOSアプリケーションに直接統合できます。このフレームワークは、ニューラルネットワーク、ディシジョンツリー、線形回帰、アンサンブル法をサポートし、TensorFlow、PyTorch、Keras、ONNXからApple独自のフォーマットへのモデル変換もサポートします。Apple Machine Learning Research (2025)によると、Core MLはデバイス上で完全に推論を実行し、データプライバシーを確保し、多くのモデルにと10ミリ秒未満のレイテンシーを実現します。
メインポイント
Core MLはAppleの機械学習エコシステムの重要なコンポーネントで、WWDC 2017で発表されました。Core ML以前、iOS開発者はサードパーティのライブラリ (TensorFlow Mobile, Caffe2) やカスタムソリューションを使ってデバイス上でMLモデルを実行していました。Core MLは、古典的な回帰から深层ニューラルネットワークまで、すべてのモデルタイプに対する単一の統一インターフェースを提供し、特定のデバイスに対するローレベルの最適化を担当しました。
Core ML (2017)の初版は、固定サイズの入力をもつ静的なモデルのみをサポートしていました。Core ML 2 (2018)はバッチ予測とリアルタイムのモデル更新をサポートしました。Core ML 3 (2019)はオンデバイストレーニングと新たなニューラルネットワークレイヤーをサポートしました。Core ML 4 (2021)は多出力モデルと改善された画像処理をサポートしました。Core ML 5 (2024)は動的ニューラルネットワークと新しいMLレイヤーを使用したオンデバイス監督付き学習をサポートしました。
デバイス上で機械学習を実行すると、3つの主なメリットがあります: プライバシー — データがデバイスから外に出ることがない (GDPR・HIPAAの要件を満たします)、速さ — 推論がネットワークレイテンシーなしでミリ秒単位で完了する、オフライン利用可能 — インターネットに接続せずにモデルが動作する。Apple Privacy Report (2025)によると、Appleプラットフォーム上のML推論の90%以上がCore MLによりデバイス上で実行されています。
Core MLのアーキテクチャは多層プリンシプルに基づいています: 上位レベルには開発者API (MLModel, MLFeatureProvider, MLPredictionOptions)、中位レベルには.mlpackageフォーマットのモデル、下位レベルにはコンピューティングバックエンド: Apple Neural Engine (ANE)、GPU (Metal Shaders)、CPU (BNNS, Accelerate framework)があります。Core MLは、モデルとデバイスハードウェアに応じて最適なバックエンドを自動的に選択します。
| バックエンド | デバイス | パフォーマンス |
|---|---|---|
| Neural Engine | iPhone Xs+, iPad A12+, Mac M1+ | 最大 (TOPS) |
| GPU (Metal) | すべてのAppleデバイス | 高い (並列計算) |
| CPU (BNNS) | すべてのAppleデバイス | 基本的 (互換性) |
Neural Engine (ANE)はApple A12+およびM1+チップに組み込まれた専用ニューラルプロセッサーです。ANEは、A17 Proで最大15.8 TOPS、M4で最大38 TOPSのパフォーマンスで、卷き込みニューラルネットワーク (CNN) 操作と行列乗算に最適化されています。Core MLは、モデルがANEで実行できるかどうかを自動的に判別し、できる場合はそこにロードします。モデルがANEでサポートされていない操作を含む場合、Core MLは計算をGPUとCPUに分散します。
GPUでの計算には、Core MLはMetal Performance Shaders Graph (MPSGraph)を使用します。MPSGraphはGPU上で計算グラフを構築および実行するためのフレームワークです。MPSGraphはCore MLからニューラルネットワークグラフを取り、特定のGPUアーキテクチャ (7コアA17 GPUまたは40コアM4 Ultra GPU) に最適化されたMetal Shadersにコンパイルします。MPSGraphの自動最適化には、レイヤー融合、余分な操作の削除、最適データフォーマットの選択が含まれます。
Core MLは、主な機械学習モデルタイプをすべてサポートし、3つのカテゴリに分けられています: ニューラルネットワーク (卷き込みCNN、後退RNN/LSTM、トランスフォーマー)、アンサンブルモデル (Random Forest、Gradient Boosting、XGBoost、ディシジョンツリー)、回帰モデル (線形回帰、SVM、CRF)。各モデルタイプには独自のMLModelTypeサブプロトコルがあり、Core MLが適切なバックエンドと実行フォーマットを自動選択します。
Core MLは150種類以上のニューラルネットワークレイヤーをサポートしています: Convolution (1D/2D/3D)、BatchNormalization、Pooling (Max/Average)、Activation (ReLU, Sigmoid, Tanh, LeakyReLU, PReLU)、Recurrent (LSTM/GRU/SimpleRNN)、Transformers (MultiHeadAttention, LayerNorm)、Metal固有レイヤー。サポートされていないレイヤーには、Core MLはカスタムレイヤーメカニズムを提供します — Metal Shading LanguageまたはSwiftでレイヤー実装を書くことができます。
let model = try MLModel(contentsOf: modelURL)
let input = try MLMultiArray(shape: [1, 224, 224, 3], dataType: .float32)
let prediction = try model.prediction(from: input)
2021年以前、Core MLは.mlmodelフォーマットを使用していました — すべてのモデル資重とメタデータを含む二進ファイルです。Xcode 13およびCore ML 4から、Appleは新しい.mlpackageフォーマットを導入しました — モデル、メタデータ、入力/出力説明、JSONの前/後処理ファイルを含むディレクトリベースのパッケージ構造です。mlpackageはgitバージョン管理をサポートし、チーム開発を簡素化します。.mlmodelから.mlpackageへの変換は、Xcode Model Compilerユーティリティまたはcoremltools Pythonスクリプトで実行できます。
変換はPythonのcoremltoolsライブラリを使って実行されます。coremltoolsはTensorFlow 1.x/2.x (SavedModel, PB, HDF5)、PyTorch (TorchScript, traced/scriptedモデル)、Keras (H5)、ONNX、Create MLからのモデルインポートをサポートしています。標準変換パイプラインは3つのステップからなります: 元のフォーマットでモデルをロードする、MIL (Model Intermediate Language) — Core MLの内部表現 — に変換する、.mlpackageにエクスポートする。
import coremltools as ct
model = ct.converters.pytorch.convert(
source = "model.pt",
inputs = [ct.TensorType(shape=(1, 3, 224, 224))]
)
model.author = "IT Sectr"
model.short_description = "Image classifier"
model.save("MyModel.mlpackage")
変換後は、同じデータで元のモデルと変換後のCore MLモデルの予測を比較してモデルの精度を検証する必要があります。許容される偏差はFloat32では1e-3 (0.1%)以下、Float16/Int8では1e-2 (1%)以下です。coremltoolsは自動比較のためのct.utils.compare_models()ユーティリティを提供しています。偏差が基準を超える場合、サポートされていない操作が問題の可能性があります — カスタムレイヤーに置き換えるか、モデルを簡素化する必要があります。
最適化は、精度を大きく損なわずにモデルサイズを削減し、推論速度を向上させるプロセスです。AppleはcoremltoolsとXcodeに組み込まれたいくつかの最適化ツールを提供しています: 量子化 (資重の精度を下げる)、プルーニング (不要なニューロンを削除する)、余分なレイヤーを削除する、グラフを軽量化するためのレイヤー融合。
量子化では、Float32と比べてモデルサイズが約2倍 (Float16) または4倍 (Int8) に減少します。Core MLは3つの量子化モードをサポートしています: キャリブレーションデータセットを用いた学習後量子化 (PTQ)、coremltoolsによる変換中の量子化、量子化懂得学習 (QAT)。コンピュータビジョンモデルの多くでは、PTQによるFloat16への変換で、推論速度が倍化する一方、精度の悪化は0.5%未満です。
XcodeはCore ML Model Profilerツールを提供し、シミュレータまたは実機でさまざまなデバイス上でのモデルパフォーマンスを測定できます。プロファイラーは、各レイヤーの実行時間、バックエンド負荷 (ANE/GPU/CPU)、ピークメモリ使用量、モデルのボトルネックを表示します。Apple Performance Optimization Guideによると、80%以上のモデルには、他のレイヤーよりも情報に遅く動作するレイヤーが少なくとも1つ存在し、置き換えまたは融合で最適化できます。
Swiftを使ってiOSアプリにトレーニング済みCore MLモデルを統合する例を見てみましょう。.mlpackageファイルをXcodeプロジェクトに追加 (ドラッグまたはSwift Package Manager経由) すると、Xcodeがタイプ指定された入力と出力をもつSwiftモデルクラスを自動生成します。開発者は入力データを手動で解析する必要がありません — 生成されたクラスは、モデルのメタデータに応じてUIImage、MLMultiArray、Stringまたは他のタイプを受け付けます。
import CoreML
import Vision
guard let model = try? VNCoreMLModel(
for: MyImageClassifier().model
) else { return }
let request = VNCoreMLRequest(model: model) { request, error in
guard let results = request.results
as? [VNClassificationObservation]
else { return }
if let topResult = results.first {
print("Class: \(topResult.identifier)")
print("Confidence: \(topResult.confidence)")
}
}
let handler = VNImageRequestHandler(
cgImage: image.cgImage!,
options: [:]
)
try handler.perform([request])
Core MLを統合する際はエラー処理を実装する必要があります: デバイスの互換性がない (サポートされていない古いiOSバージョン)、メモリ不足、モデルファイルの破損などの理由でモデルがロードできない可能性があります。フォールバックロジックを実装することをお勧めします: 量子化されたInt8フォーマットでモデルがロードできない場合はFloat16バージョンをロードし、それも失敗した場合はFloat32をロードします。Apple Crash Analyticsによると、MLアプリのクラッシュの5%以上がモデル読み込みの失敗によるものです。
Core MLとCreate MLはApple MLエコシステムの4つの補完的なツールです。Core MLはデバイス上でのモデル実行 (推論) を担当し、Create MLはモデルのトレーニングを担当します。Create MLで作成されたモデルは、アプリへの統合のために特にCore MLフォーマット (.mlpackage) でエクスポートされます。ウェブ開発の比喡で言えば、Core MLはブラウザ(実行)、Create MLはコードを書くためのIDE(トレーニング)です。
| パラメータ | Core ML | Create ML |
|---|---|---|
| 目的 | モデル実行 (推論) | モデルトレーニング |
| プラットフォーム | iOS, iPadOS, macOS, watchOS, tvOS | macOS (のみ) |
| フォーマット | .mlpackage (消費) | .mlpackage (生成) |
| コード | Swift / Objective-C API | Xcode UI または Swift API |
| ユーザー | アプリ開発者 | 開発者 / データサイエンティスト |
よくある質問
Core MLはiOS, iPadOS, macOS, watchOS, tvOSデバイス上で予めトレーニングされたMLモデルを実行するためのAppleの機械学習フレームワークです。ニューラルネットワーク、ディシジョンツリー、回帰をサポートし、最適なコンピューティングバックエンド (Neural Engine, GPU, CPU) を自動選択します。
TensorFlowはサーバーおよびモバイルデバイス上でモデルをトレーニングおよび実行するための万能フレームワークです。Core MLは、ハードウェア固有の最適化 (ANE, GPU, Metal) により最大のパフォーマンスを得るために、Appleデバイスでのみモデルを実行 (トレーニングではない) するための専門エンジンです。TensorFlow MobileはiOSではもうサポートされていません — Appleは自社のプラットフォームでのすべてのMLタスクにCore MLを推奨しています。
変換はPythonのcoremltoolsライブラリを使って実行します: PyTorchモデルをTorchScript (torch.jit.trace) にエクスポートし、ct.converters.pytorch.convert() を使って.mlpackageを作成します。coremltoolsはPyTorchレイヤーをサポートされたCore MLレイヤーに自動マッピングし、ANE向けにグラフを最適化します。
Core MLはiOS 11以降のすべてのiPhoneで動作します。ただし、パフォーマンスはハードウェアに依存します: iPhone 5s/6 — CPUのみ(遅い推論)、iPhone 8/X — GPU (Metal)、iPhone Xs以降 — Neural Engine (A17 Proで最大15.8 TOPS)。最もよいパフォーマンスを得るには、最低iOSバージョンを12+ に設定することをお勧めします。
現代のフォーマットは.mlpackageです (モデル、メタデータ、入力/出力説明を含むディレクトリ)。レガシーフォーマットは.mlmodel (単一の二進ファイル)です。Xcodeはビルド中に.mlmodelを.mlpackageに自動変換しますが、新しいプロジェクトでは.mlpackageを直接使用することをお勧めします。
まとめ
ターンキー方式のモバイルアプリケーションを開発します
IT Sectrは2017年からスタートアップや企業向けにiOS・Androidアプリケーションを開発しています。私たちがご相談に乗り、最適なソリューションをご提案します。