見出し画像

TensorFlow Lite Core MLデリゲートによるiOSでの推論の高速化

以下の記事を参考に書いてます。

TensorFlow Lite Core ML delegate enables faster inference on iPhones and iPads

1. はじめに

TensorFlow Lite」は、モデル推論の一部または全体を、効率的な推論のために「GPU」「DSP」「NPU」などのアクセラレータに委任する機能を提供します。「Android」では、「NNAPI」「GPU」「Hexagon」など、いくつかのデリゲートから選択できます。それに対し、これまで「iOS」は「GPU」のみでした。

Appleが「Core ML」と「Neural Engine」(AppleのBionic SoCのNPU)をリリースしたことにより、「TensorFlow Lite」からAppleのハードウェアを活用できるようになりました。「NPU」は、機械学習アプリケーションを高速化するために設計された専用のハードウェアアクセラレータです。これらのチップは、モバイルまたはエッジデバイスでのモデル推論を高速化し、「CPU」「GPU」で推論を実行するよりも、消費電力が少ないように設計されています。

本日、Appleの「Core ML」を使用して、「Neural Engine」を搭載したiOSで浮動小数点モデルをより高速に実行する新しい「TensorFlow Lite」デリゲートを発表できることを嬉しく思います。「MobileNet」や「Inception V3」などのモデルでは、パフォーマンスが最大14倍(詳細は以下を参照)も向上しています。

画像1

2. サポートされているデバイス

このデリゲートは、「iOS」のバージョン12以降で実行できます。ただし、パフォーマンス上のメリットを得るには、「Apple A12 SoC」以降を搭載した端末(iPhone XSなど)で実行する必要があります。 

3. サポートされているモデル

この最初のリリースでは、32ビット浮動小数点モデルがサポートされています。サポートされているモデルの例には、画像分類、物体検出、セグメンテーション、ポーズ推定が含まれますが、これらに限定されません。一部の操作には特定の制約がありますが、デリゲートは、畳み込みなどの多くの計算負荷の高い操作をサポートします。これらの制約は、サポートされていない操作が自動的にCPUにフォールバックするように、ランタイムでの委任前にチェックされます。opsと対応する制限(ある場合)の完全なリストは、デリゲートのドキュメントにあります。

4. パフォーマンスへの影響

デリゲートは、「MobileNet V2」と「Inception V3」でテストしました。
ベンチマークは、「iPhone 8+」(A11 SoC)、「iPhone XS」(A12 SoC)、「iPhone 11 Pro」(A13 SoC)で実施され、「CPUのみ」(デリゲートなし)、「GPU」、「Core ML」の3つのデリゲートについてテストしました。前述のように、「A12 SoC」以降のモデルでは加速されたパフォーマンスを確認できますが、サードパーティが「Neural Engine」を利用できない「iPhone 8+」では、小さなモデルで「Core ML」デリゲートを使用してもパフォーマンスは向上しません。より大きなモデルの場合、パフォーマンスは「GPU」デリゲートに似ています。

モデル推論のレイテンシに加えて、起動レイテンシも測定しました。加速速度は起動の遅延とトレードオフになることに注意してください。「Core ML」デリゲートでは、モデルのサイズに応じて起動レイテンシが増加します。たとえば、「MobileNet」のような小さなモデルでは、200〜400ミリ秒の起動遅延が発生しました。一方、「Inception V3」などのより大きなモデルの場合、起動待ち時間は2〜4秒になる可能性があります。起動レイテンシの削減に取り組んでいます。デリゲートは、バイナリサイズにも影響を与えます。「Core ML」デリゲートを使用すると、バイナリサイズが最大1MB増える可能性があります。

5. モデル

・MobileNet V2 (1.0, 224, float) [download] : Image Classification
 ・Small model. Entire graph runs on Core ML.
・Inception V3 [download] : Image Classification
 ・Large model. Entire graph runs on Core ML.

6. デバイス

・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)

7. MobileNet V2で観測された待ち時間とスピードアップ

画像2

8. Inception V3で観測されたレイテンシとスピードアップ

画像3

9. 使用方法

新しいデリゲートのインスタンスを使用してTensorFlow Liteインタープリタを呼び出すだけです。 詳細な説明については、ドキュメント全体をお読みください。 「Swift API」(以下の例)または「C++ API」(ドキュメントに表示)のいずれかを使用して、推論中にTensorFlow Liteデリゲートを呼び出すことができます。

◎ Swiftの例
これは、このデリゲートを呼び出す場合の典型的なSwiftアプリケーションの外観です。 新しい「Core ML」デリゲートを作成し、それを元のインタープリター初期化コードに渡すだけです。

let coreMLDelegate = CoreMLDelegate()
let interpreter = try Interpreter(modelPath: modelPath, delegates: [coreMLDelegate])

10. 今後の作業

今後数ヶ月の間にデリゲートを改良し、より多くのopカバレッジと追加の最適化を行う予定です。「post-training float16 quantization」で訓練されたモデルのサポートはロードマップ上にあります。これにより、モデルサイズが約半分になり、精度の低下が少ないモデルの高速化が可能になります。

post-training weight quantization」(dynamic quantizationとも呼ばれます)のサポートもロードマップにあります。


この記事が気に入ったらサポートをしてみませんか?