Vengineerの戯言

人生は短いけど、長いです。人生を楽しみましょう!

TensorFlow の MLIR を利用した TAC (Target aware convertion for TFLite model)

@Vengineerの戯言 : Twitter SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

はじめに

TensorFlow Lite for Micro controller は、TensorFlow の repo から独立して、tflite-micro になりました。 とはいえ、TensorFlow との関係は継続しているようです。

それから、TensorFlow Lite に関して、TACというのを見つけました。

TAC (Target aware convertion for TFLite model)

TAC

compiler/mlir/lite/experimental/tac になっているので、まだ、実験的な感じ。commit には、「OSS target aware conversion」とあるので、Googleの中ではいろいろとやっているんですね。

モデル内の各Opのコストモデルを使って、どのHardwareで実行するとより速くなるかをやってくれるようです。

ただし、Op間でHardwareをSwitchしたときのコストはどうなるのだろうか?と思いましたが、各Hardwareモデル内のGetHardwareSwitchingCostというメソッドがあるので、Switching Cost も考慮できそうですね。各Opに対しては、GetOpCostというメソッドがあります

tac_translate と

tac_translate というプログラムで、TensorFlow Liteのモデルを変換できるようです。 また、Pythonでは、tac.py の中の run_tac 関数でモデルの変換ができるようです。

対応しているモデル

です。

独自Hardware に対しては、SimpleHardwareクラスを継承してモデルを作ればできるようです。ここに簡単な説明があります。TagetHardwareクラス(SimpleHardwareクラスの親クラス)を使うことの説明もあります。

おわりに

Google Edge TPU がモデルとして追加される日はいつでしょうかね。