系列長32・64・128では、読み込み待ちの15.0msが一定でした。
系列長256を境に、今度は計算待ちへ切り替わります。
短い系列長では、重みの読み込みが速さを決めます。計算を増やしても、読み込みを超えるまでは変わりません。
Apple Silicon推論では、系列長が短いうちは速さが頭打ちになります。公式はメモリからの読み込みが、こうした場合の全体の遅さを支配すると述べています。
頭打ちがどこまで続くのか、実際に計算して数えました。
重み 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を境に、計算時間が読み込み時間を追い越します。ここから先は系列長を増やすほど素直に遅くなります。
境目の位置は、重みのサイズと帯域幅で決まります。重みが大きいモデルほど、頭打ちの範囲は広くなります。
だから短い系列長の用途では、計算を削る工夫より先に、読み込みそのものを減らせないか確認したほうが効きます。
系列長が短いうちは、読み込み待ちの一定時間が速さを決める。
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バイトに整列していなければならないと述べています。
整列が崩れるとどれだけコピーが増えるのか実際に計算して数えました。
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の記事で扱ったタイルサイズの調整とも近く、どちらもメモリの動かし方そのものを設計対象にしています。
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
Core MLはCPU・GPU・ANEを自動で使い分けます。ただし対応・非対応が入り乱れると、切り替えの手間が積み上がります。
Apple Silicon推論は、複数のエンジンを組み合わせて動きます。公式はCore MLはCPU・GPU・ANE(利用可能なら)を継ぎ目なく組み合わせ、その端末で使えるすべてのエンジンを活かした最も効果的な実行計画を作ると述べています。
組み合わせが増えるとどれだけ手間がかかるのか実際に計算して数えました。
演算 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向けの演算が交互に並ぶと不利になることを示しています。対応する演算をひとまとまりにできれば、切り替え回数そのものを減らせます。
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
同じ課題を持つ会社にとって、動いている設定は「作る時間」を買えるということです。ServiceDockは自作のワークフローやテンプレートを出品できるマーケットプレイスです。手数料や出品の流れは出品者向けページにまとまっています。
出品の仕組みを見る