ハイライト
Core ML は効率的な tensor 計算用 MLTensor 型を追加。State API で stateful モデルの推論効率を最適化。multi-function model で 1 つの MLPackage に複数機能を搭載可能。
主要内容
端末で ML モデルを実行する際、開発者が直面する現実的な問題——モデル推論自体はワークフローの一部に過ぎない。大規模言語モデルでは、テキスト生成にデコーダーが語彙スコアから次 token をサンプリング——この「接着剤コード」(確率分布計算、temperature 調整、Top-K サンプリング)は以前、手書き実装か低レベル API 呼び出しが必要で、コード量が多くエラーが起きやすい。
Core ML の新 MLTensor がこの問題を解決。多次元配列型で NumPy/PyTorch 風の数学演算と変換操作を提供。Apple silicon の CPU、GPU、Neural Engine で加速。セッションデモでは、同じデコードロジックを MLTensor で実装すると低レベル API 手書き版よりコード量が大幅に少ない。
もう 1 つの痛点は KV Cache 管理の stateful 推論。以前は手動キャッシュ管理で、各反復時にキャッシュを入力として渡し、出力から更新値を読み取る——メモリと計算ユニット間でデータが往復。Core ML の新 State API は状態管理をフレームワーク内部で処理し、データ移動オーバーヘッドを削減。セッション実測では M3 Max MacBook Pro 上の Mistral 7B が State 使用で約 5 秒、未使用で約 8 秒——約 1.6 倍高速化(12:11)。
複数の関連モデルをデプロイする際の冗長性——例えば 1 つの拡散モデルに異なるスタイル adapter を組み合わせる場合、以前は複数の独立モデルをデプロイする必要があった。multi-function model では 1 つの MLPackage に複数の function エントリポイントを含め、base 重みを共有——デプロイサイズとメモリ使用量を削減。
さらに iOS 18 の推論スタックは低レベル最適化を実施——多くのモデルが再コンパイルやコード変更なしで性能向上(02:27)。
詳細
MLTensor:端末上 tensor 計算
MLTensor は Core ML の新多次元配列型。shape と scalar type で定義。MLShapedArray またはネストされたスカラー集合から作成可能(04:03):
// MLShapedArray から作成
let tensor1 = MLTensor(shapedArray: shapedArray)
// ネストされたスカラーコレクションから作成
let tensor2 = MLTensor([[1.0, 2.0], [3.0, 4.0]])
キーポイント:
MLTensorはMLShapedArrayまたはネストリテラルから構築MLShapedArrayと同様、shapeとscalar typeで記述- ネストリテラルの深さが次元数を決定
tensor は要素ごとの数学演算、自動ブロードキャスト、比較、マスク操作をサポート(04:33):
// 逐元素加法与乘法,字面量自动广播
let result = (tensor1 + 10) * tensor2
// 计算均值
let mean = result.mean()
// 比较运算创建布尔掩码
let mask = result .> mean
// 掩码相乘实现过滤
let filtered = mask * result
キーポイント:
- リテラルと tensor 演算時、互換形状へ自動ブロードキャスト
.mean()は全要素の平均を計算.>比較は boolean tensor マスクを返す- boolean マスクと tensor の乗算で false 位置をゼロ化
インデックスと形状変換(04:57):
// 切片:取矩阵第一行
let firstRow = matrix[0]
// 重塑形状
let reshaped = firstRow.reshape([1, -1])
キーポイント:
- インデックス構文で次元ごとにスライス。Python 数値ライブラリと類似
.reshape()はデータを変えず形状のみ変更
全 tensor 操作は非同期実行——データアクセスには明示的 materialize が必要(05:12):
let shapedArray = try await result.materialize()
キーポイント:
- 非同期実行で上流操作完了後にデータが利用可能
materializeでMLTensorをMLShapedArrayに戻す
MLTensor による LLM デコード簡素化
セッションは HuggingFace Swift Transformer + Mistral 7B でデコーダー比較(06:33)。言語モデルは語彙全語のスコア(logits)を出力。デコーダーが次 token を選択——戦略には greedy デコード(最高スコア)と Top-K サンプリング(上位 K 語からランダム)があり、temperature で確率分布の平坦度を調整(06:57)。
比較結果:MLTensor 実装は同機能を低レベル API 手書き版よりはるかに少ないコード量。MLTensor は一般的 ML 演算に適するが、細かい制御が必要な場合は低レベル API に価値あり(07:57)。
State API:stateful 推論の最適化
従来の手動 KV Cache 管理(11:04):
// 手动预分配缓存
var keyValueCache = createEmptyCache()
for token in inputTokens {
// 缓存作为输入传入
let prediction = try model.prediction(from: input, using: keyValueCache)
// 从输出中取出更新后的缓存
keyValueCache = prediction.cache
}
State API 使用後(11:26):
// 模型实例创建并预分配状态
let state = model.makeState()
for token in inputTokens {
// 传入状态,更新原位完成
try model.prediction(from: input, state: state)
}
キーポイント:
model.makeState()は Core ML が状態バッファを事前割り当て、状態ハンドルを返す- ハンドル経由でバッファアクセスと状態ライフサイクル制御
- 状態更新はインプレース——出力から読み取って再代入不要
- モデルは準備段階(coremltools 変換時)で State サポートを明示的に有効化
Xcode モデルプレビューの Predictions タブで State の有無を確認可能(10:48)。
Multi-function model
セッションは Stable Diffusion XL + 2 つのスタイル adapter(sticker と storybook)を例示(14:25)。2 adapter は同一 UNet base model を共有。1 MLPackage に統合後、各 adapter が 1 function として公開:
// 加载时指定函数名
let model = try MLModel(
contentsOf: url,
configuration: MLModelConfiguration(functionName: "sticker")
)
キーポイント:
MLModelConfiguration(functionName:)でロードする function を指定- 未指定時はデフォルト function
- function ごとに異なる入出力シグネチャ可能
- Xcode プレビューで全利用可能 function を確認
sticker と storybook の入出力シグネチャが同一のため、同一パイプラインを 2 function で再利用可能。パイプライン内の複数モデルは MLTensor でシームレスに接続(14:35)。
性能ツール強化
Core ML 性能レポートに 2 項目追加(16:05):
- 操作レベル時間推定:estimated time = 中央値予測時間 × 操作の推定相対コスト。ソートでボトルネック特定
- 非サポート理由ヒント:非サポート操作にホバーで理由表示(データ型非サポートなど)。準備段階への遡及に便利
レポートはエクスポートとバージョン間比較をサポート——コード不要でモデル変更効果を評価(16:56)。
新 MLComputePlan API でプログラム的アクセス:モデル構造、各操作のサポート/優先計算デバイス、State サポート、推定相対コスト(17:13)。
重要ポイント
-
手書きデコードロジックを MLTensor で置き換え:端末 LLM の token デコード(確率計算、サンプリング、temperature 調整)が最典型の適用場面。まず MLTensor で確率計算とフィルタリング部分を書き換え、機能一致を検証後、デコーダー全体を段階的に置き換え。コード量削減と非同期実行による不要な同期待機回避。
-
State API で KV Cache オーバーヘッド削減:モデルが多反復推論を含む場合、coremltools で再エクスポートして State を有効化。Mistral 7B 実測 1.6 倍高速化——モデルとキャッシュが大きいほど効果大。Xcode プレビューで State 可用性を確認後、
makeState()で手動キャッシュ管理を置き換え。 -
multi-function model で共有重みモデルを統合:複数スタイル adapter やタスク変体をデプロイする際、1 MLPackage に統合し各変体を 1 function に。インストールサイズと実行時メモリ削減。ロード時に
functionName指定で機能切り替え。
関連セッション
- Bring your machine learning and AI models to Apple silicon — モデル変換、最適化、multi-function model エクスポートの完全ワークフロー
- Train machine learning and AI models on Apple GPUs — Apple チップ上での効率的な訓練とファインチューニング
- Explore machine learning training frameworks and metrics — 訓練フレームワークと評価指標の詳細紹介
コメント
GitHub Issues · utterances