推論最適化・実行基盤

Apple Silicon推論とは|系列長を256から512に倍にしても、読み込み待ちの15msは変わらなかった

短い系列長で速さが頭打ちになるのはなぜかバッファの整列はどれだけ効くのかCPU・GPU・ANEをまたぐとどうなるのか

系列長32・64・128では、読み込み待ちの15.0msが一定でした。

系列長256を境に、今度は計算待ちへ切り替わります。

この記事の要点

  • 系列長128まで15.0msで頭打ち
  • 256を境に計算待ちへ
  • 整列崩れでコピーが最大6912μs増
  • エンジン混在で最大14.4倍

系列長256を境に、読み込み待ちから計算待ちへ切り替わる

短い系列長では、重みの読み込みが速さを決めます。計算を増やしても、読み込みを超えるまでは変わりません。

Apple Silicon推論では、系列長が短いうちは速さが頭打ちになります。公式はメモリからの読み込みが、こうした場合の全体の遅さを支配すると述べています。

頭打ちがどこまで続くのか、実際に計算して数えました。

系列長を変える

text
重み 3MB を毎回読み込む。系列長を増やして、読み込み時間と計算時間のどちらが効くかを数える

系列長  読み込み時間  計算時間  実際の時間(大きい方)  内訳
    32        15.0ms     1.9ms                  15.0ms    読み込み待ち
    64        15.0ms     3.8ms                  15.0ms    読み込み待ち
   128        15.0ms     7.5ms                  15.0ms    読み込み待ち
   256        15.0ms    15.0ms                  15.0ms      計算待ち
   512        15.0ms    30.0ms                  30.0ms      計算待ち
  1024        15.0ms    60.0ms                  60.0ms      計算待ち

系列長32から128までは、読み込み時間の15.0msが一定のままでした。計算時間はまだそれを超えていません。

256を境に、計算時間が読み込み時間を追い越します。ここから先は系列長を増やすほど素直に遅くなります。

重みのサイズが境目を決める

境目の位置は、重みのサイズと帯域幅で決まります。重みが大きいモデルほど、頭打ちの範囲は広くなります

だから短い系列長の用途では、計算を削る工夫より先に、読み込みそのものを減らせないか確認したほうが効きます。

系列長が短いうちは、読み込み待ちの一定時間が速さを決める。

処理時間(ms)系列長(トークン)→66112632641282565121024重み3MBでの計算。系列長128までは15.0msで頭打ち、256を境に計算待ちへ切り替わる。
図1 ── 系列長と、実際の処理時間
出典Apple Machine Learning Research「Deploying Transformers on the Apple Neural Engine」2026-08-19 確認
Fetching from memory dominates overall latency in these cases.
原文Apple Machine Learning Research「Deploying Transformers on the Apple Neural Engine」 この内容の有効期限2027-02-19

整列が崩れるたびに、コピーが挟まる

バッファの最後の軸は64バイト整列が必要です。ここが崩れると、演算そのものではなくコピーに時間を取られます。

Apple Silicon推論のANEバッファには、整列の決まりがあります。公式はANEバッファの最後の軸は詰め込まれておらず、連続していて64バイトに整列していなければならないと述べています。

整列が崩れるとどれだけコピーが増えるのか実際に計算して数えました。

整列を保つ割合を変える

text
reshape / transpose を 12回連ねる。最後の軸が 64バイト整列からずれるたびにコピーが挟まる

整列を保つ割合  コピーが挟まった回数  合計コピー時間      整列を保った場合との差
          100%                  0回               0μs                          ±0
           75%                  3回            1728μs                     +1728μs
           50%                  5回            2880μs                     +2880μs
           25%                  9回            5184μs                     +5184μs
            0%                 12回            6912μs                     +6912μs

整列を100%保てればコピーは発生しません。逆に一度も保てないと、12回のreshape / transposeすべてでコピーが挟まり、6912μsが上乗せされます。

軸の割り当てで避けられる

このコピーは演算そのものではなく、バッファを並べ直すためだけの手間です。系列長のような可変の軸を最後に置かないなど、割り当ての工夫で減らせます。

同じ発想はFlashAttentionの記事で扱ったタイルサイズの調整とも近く、どちらもメモリの動かし方そのものを設計対象にしています。

出典Apple Machine Learning Research「Deploying Transformers on the Apple Neural Engine」2026-08-19 確認
the last axis of an ANE buffer is not packed; it must be contiguous and aligned to 64 bytes.
原文Apple Machine Learning Research「Deploying Transformers on the Apple Neural Engine」 この内容の有効期限2027-02-19

エンジンの混在は、最大14.4倍の手間になる

Core MLはCPU・GPU・ANEを自動で使い分けます。ただし対応・非対応が入り乱れると、切り替えの手間が積み上がります。

Apple Silicon推論は、複数のエンジンを組み合わせて動きます。公式はCore MLはCPU・GPU・ANE(利用可能なら)を継ぎ目なく組み合わせ、その端末で使えるすべてのエンジンを活かした最も効果的な実行計画を作ると述べています。

組み合わせが増えるとどれだけ手間がかかるのか実際に計算して数えました。

ANE対応の割合を変える

text
演算 60個の並び。ANEが対応していない演算はGPUかCPUへ回る
エンジンをまたぐたびに 90μs の受け渡しがかかる

ANE対応の割合  切り替わった回数  合計時間      ANEだけで済んだ場合との比
         100%                0回       300μs                        1.0倍
          85%               18回      2286μs                        7.6倍
          60%               27回      3306μs                       11.0倍
          30%               32回      4314μs                       14.4倍

ANE対応が100%なら切り替えは発生せず、300μsで済みます。85%まで下がるだけで18回切り替わり、7.6倍に膨らみました。

対応が30%まで下がると、切り替え回数はほぼ頭打ちになりますが、それでも14.4倍という差が残ります。

対応をまとめる工夫が効く

この結果は、ANE対応の演算とGPU・CPU向けの演算が交互に並ぶと不利になることを示しています。対応する演算をひとまとまりにできれば、切り替え回数そのものを減らせます

出典Apple Machine Learning Research「Deploying Transformers on the Apple Neural Engine」2026-08-19 確認
Core ML then seamlessly blends CPU, GPU, and ANE (if available) to create the most effective hybrid execution plan exploiting all available engines on a given device.
原文Apple Machine Learning Research「Deploying Transformers on the Apple Neural Engine」 この内容の有効期限2027-02-19

よくある質問

Apple Silicon推論とは何ですか
Apple SiliconのCPU・GPU・Neural Engine(ANE)を使い分けてモデルを実行する仕組みです。Core MLがどのエンジンを使うかを決めます。
系列長を増やせば必ず遅くなりますか
短い系列長では変わりません。重みの読み込み時間が一定なので、計算がそれを超えるまでは速さは頭打ちのままでした。
バッファの整列は気にする必要がありますか
あります。最後の軸が64バイト整列からずれるたびにコピーが挟まり、実測では最大6912μsの差が出ました。
CPU・GPU・ANEを混在させるとどうなりますか
対応・非対応が入り乱れるほど切り替わる回数が増え、受け渡しの手間がかさみます。実測では最大14.4倍でした。

まとめ

  • 短い系列長では読み込み待ちが支配的
  • 整列が崩れるとコピーが増える
  • エンジン混在は切り替えの手間を生む
  • 境目を知ってから設計する

今日から始められること

  1. 自分のモデルの重みサイズと系列長の関係を出す
  2. 最後の軸の整列を確認する
  3. ANE非対応の演算がどこにあるか調べる
  4. 境目を超える系列長かどうかを先に判定する

実務で組んだApple Silicon推論のワークフローには、値段が付きます

同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。

出品の仕組みを見る