この記事は The TensorFlow Blog の記事 "TensorFlow Lite Core ML delegate enables faster inference on iPhones and iPads" を元に翻訳・加筆したものです。詳しくは元記事をご覧ください。
投稿者: ソフトウェア エンジニア、Tei Jeong、Karim Nosseir
TensorFlow Lite では、モデルの推論の一部または全部を GPU、DSP、NPU などのアクセラレータに委譲し、モバイルでの推論を効率化することができます。Android で選択できるデリゲートには、NNAPIと GPU、そして最近追加された Hexagonがあります。しかしこれまで、Apple のモバイル端末である iPhone や iPad では、GPU デリゲートしか選択できませんでした。
Apple が自社の機械学習フレームワークである Core MLと Neural Engine(Apple の Bionic SoC のニューラル プロセッシング ユニット(NPU))をリリースしたとき、TensorFlow Lite から Apple のハードウェアを利用できるようになりました。
Google の Edge TPUや Apple の Neural Engine のようなニューラル プロセッシング ユニット(NPU)は、機械学習アプリケーションを高速化するために設計された専用のハードウェア アクセラレータです。このようなチップは、モバイル端末やエッジデバイスでのモデルの推論をスピードアップするために設計されており、消費電力も CPU や GPU で推論を行う場合より少なくなります。
本日は、新しい TensorFlow Lite のデリゲートについてお知らせします。このデリゲートは、Apple の Core ML API を活用し、Neural Engine が搭載された iPhone や iPad で浮動小数点モデルを高速に実行します。MobileNet や Inception V3 などのモデルでは、最大で 14 倍のパフォーマンスが向上することが確認できます(詳細下記)。
モデルの推論にかかる時間に加え、起動時間も測定しました。スピードアップは起動時間の増加とのトレードオフである点に注意してください。Core ML デリゲートでは、モデルのサイズに伴って起動時間が増加します。たとえば、MobileNet のような小さなモデルの起動時間は 200-400 ミリ秒でした。一方で、Inception V3 のような大きなモデルの起動時間は、2-4 秒になりました。現在、この起動時間を短縮するための作業を行っています。このデリゲートは、バイナリサイズにも影響を与えます。Core ML デリゲートを使うと、バイナリサイズが最大 1 MB 増加する可能性があります。
ロードマップでは、トレーニング後の重みの量子化(ダイナミック量子化とも呼ばれます)もサポートする予定です。
注: Core ML、Neural Engine、および Bionic SoCs(A12、A13)は Apple Inc のプロダクトです。
Reviewed by Khanh LeViet - Developer Relations Team
投稿者: ソフトウェア エンジニア、Tei Jeong、Karim Nosseir
TensorFlow Lite では、モデルの推論の一部または全部を GPU、DSP、NPU などのアクセラレータに委譲し、モバイルでの推論を効率化することができます。Android で選択できるデリゲートには、NNAPIと GPU、そして最近追加された Hexagonがあります。しかしこれまで、Apple のモバイル端末である iPhone や iPad では、GPU デリゲートしか選択できませんでした。
Apple が自社の機械学習フレームワークである Core MLと Neural Engine(Apple の Bionic SoC のニューラル プロセッシング ユニット(NPU))をリリースしたとき、TensorFlow Lite から Apple のハードウェアを利用できるようになりました。
Google の Edge TPUや Apple の Neural Engine のようなニューラル プロセッシング ユニット(NPU)は、機械学習アプリケーションを高速化するために設計された専用のハードウェア アクセラレータです。このようなチップは、モバイル端末やエッジデバイスでのモデルの推論をスピードアップするために設計されており、消費電力も CPU や GPU で推論を行う場合より少なくなります。
本日は、新しい TensorFlow Lite のデリゲートについてお知らせします。このデリゲートは、Apple の Core ML API を活用し、Neural Engine が搭載された iPhone や iPad で浮動小数点モデルを高速に実行します。MobileNet や Inception V3 などのモデルでは、最大で 14 倍のパフォーマンスが向上することが確認できます(詳細下記)。
![]() |
図 1: 実行時のデリゲートの仕組みを示した概念図。グラフのサポートされている部分はアクセラレータが実行するが、その他の命令は TensorFlow Lite カーネル経由で CPU が実行する。 |
サポートされる端末
このデリゲートは、iOS バージョン 12 以降(iPadOS を含む)の iOS 端末で動作します。ただし、真のパフォーマンスのメリットを得るには、Apple A12 SoC以降を搭載した端末(iPhone XS など)で実行する必要があります。それよりも古い iPhone でパフォーマンスを向上させたい場合は、TensorFlow Lite GPU デリゲートを利用してください。サポートされるモデル
この初回リリースでは、32 ビット浮動小数点モデルがサポートされます。サポートされるモデルには、画像分類、物体検知、オブジェクト セグメンテーション、姿勢推定モデルなどが含まれますが、それに限りません。このデリゲートは、畳み込み演算など、たくさんの重い計算命令をサポートしていますが、一定の制約がある命令もあります。実行時に委譲を行う前に制約がチェックされ、サポートされていない命令は自動的に CPU にフォールバックされます。すべての命令リストとそれぞれの制限(存在する場合)については、デリゲートのドキュメントをご覧ください。パフォーマンスへの影響
このデリゲートについて、2 つの一般的な浮動小数モデルである MobileNet V2 と Inception V3 でテストを行いました。ベンチマークを行ったのは iPhone 8+(A11 SoC)、iPhone XS(A12 SoC)、iPhone 11 Pro(A13 SoC)で、CPU のみ(デリゲートなし)、GPU、Core ML デリゲートという 3 つのデリゲート オプションをテストしました。前述のように、アクセラレーションによってパフォーマンスが向上するのは A12 SoC 以降のモデルです。しかし、iPhone 8+ ではサードパーティが Neural Engine を利用できないので、小さなモデルで Core ML デリゲートを使用してもパフォーマンスが向上することはありません。大きなモデルのパフォーマンスは、GPU デリゲートと同等です。モデルの推論にかかる時間に加え、起動時間も測定しました。スピードアップは起動時間の増加とのトレードオフである点に注意してください。Core ML デリゲートでは、モデルのサイズに伴って起動時間が増加します。たとえば、MobileNet のような小さなモデルの起動時間は 200-400 ミリ秒でした。一方で、Inception V3 のような大きなモデルの起動時間は、2-4 秒になりました。現在、この起動時間を短縮するための作業を行っています。このデリゲートは、バイナリサイズにも影響を与えます。Core ML デリゲートを使うと、バイナリサイズが最大 1 MB 増加する可能性があります。
モデル
- 小さなモデル。グラフ全体を Core ML で実行。
- 大きなモデル。グラフ全体を Core ML で実行。
端末
- iPhone 8+(Apple A11、iOS 13.2.3)
- iPhone XS(Apple A12、iOS 13.2.3)
- iPhone 11 Pro(Apple A13、iOS 13.2.3)
MobileNet V2 での処理時間とスピードアップの程度
![]() |
図 2: MobileNet V2 での処理時間とスピードアップの程度。すべてのバージョンで浮動小数点モデルを使用。CPU Baseline は 2 スレッド TensorFlow Lite カーネルを示す。 * GPU: Core ML は推論に CPU と GPU を使用。NPU: Core ML は推論に CPU と GPU、さらに NPU(Neural Engine)を使用。 |
Inception V3 での処理時間とスピードアップの程度
![]() |
図 3: Inception V3 での処理時間とスピードアップの程度。すべてのバージョンで浮動小数点モデルを使用。CPU Baseline は 2 スレッド TensorFlow Lite カーネルを示す。 * GPU: Core ML は推論に CPU と GPU を使用。NPU: Core ML は推論に CPU と GPU、さらに NPU(Neural Engine)を使用。 |
使ってみたい方へ
必要な処理は、新しいデリゲートのインスタンスを使って TensorFlow Lite のInterpreter
を呼び出すことだけです。詳しい説明は、完全版のドキュメントをご覧ください。推論の際には、Swift API(下の例)か C++ API(ドキュメントに記載)を使って TensorFlow Lite デリゲートを呼び出すことができます。 Swift の例
このデリゲートを一般的な Swift アプリケーションから呼び出す方法を示します。必要な処理は、新しい Core ML デリゲートを作成してオリジナルの interpreter の初期化コードに渡すことだけです。let coreMLDelegate = CoreMLDelegate()
let interpreter = try Interpreter(modelPath: modelPath,
delegates: [coreMLDelegate])
今後の作業
今後の数か月間で既存のデリゲートを改善し、対応する命令を増やしてさらなる最適化を行う予定です。ロードマップでは、トレーニング後に float16 量子化を行ったモデルのサポートを予定しています。これにより、わずかな精度と引き替えにサイズが約半分になるので、モデルを高速化できます。ロードマップでは、トレーニング後の重みの量子化(ダイナミック量子化とも呼ばれます)もサポートする予定です。
フィードバック
これは、デベロッパーの皆さんから寄せられた共通の機能リクエストでした。この機能をリリースすることができてうれしく思います。皆さんのご感想をお待ちしています。直接ユースケースを共有するか、Twitter でハッシュタグ #TFLite と #PoweredByTF を付けてお知らせください。バグや問題は、GitHubから送信できます。謝辞
Tei Jeong、Karim Nosseir、Sachin Joglekar、Jared Duke、Wei Wei、Khanh LeViet に感謝します。注: Core ML、Neural Engine、および Bionic SoCs(A12、A13)は Apple Inc のプロダクトです。
Reviewed by Khanh LeViet - Developer Relations Team