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倍(詳細は以下を参照)も向上しています。
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で観測された待ち時間とスピードアップ
8. Inception V3で観測されたレイテンシとスピードアップ
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とも呼ばれます)のサポートもロードマップにあります。
この記事が気に入ったらサポートをしてみませんか?