Vengineerの戯言

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

TensorFlowで学習済みモデル(32ビット)の16ビット量子化をサポート

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

medium.com

にて、TensorFlowの学習済み32ビットモデルを16ビットに量子化できるようになったようですね。TensorFlow Liteのロードマップには、16ビット量子化については書いてないのですがね。

モデルサイズが半分になるのは当たり前だけど、精度劣化も MobileNet V1/V2、MobileNet SSDでは、0.03 %以下だと。このレベルじゃ、誤差範囲じゃないんでしょうか?

16ビット量子化しても残念ながら、Google Edge TPUでは使えません。何故なら、Google Edge TPUは8ビットのみサポートしているので。

16ビット量子化をサポートしているのは、GPU。そう、GPUです。

TensorFlow Liteでは、GPU DeleGate をサポートしたので、その GPU DeleGate で動作するようです。

TensorFlow Lite の GPU DeleGate については、このブログでは下記のように4回書いています。

2019年1月21日のブログ、

vengineer.hatenablog.com

2019年4月2日のブログ、

vengineer.hatenablog.com

2019年4月8日のブログ、

vengineer.hatenablog.com

2019年7月9日のブログ、

vengineer.hatenablog.com

 

TensorFlowのモデルを TensorFlow Lite に変換するとき、

import tensorflow as tf
converter = tf.lite.TFLiteConverter.from_saved_model(saved_model_dir)
converter.optimizations = [tf.lite.Optimize.DEFAULT]
converter.target_spec.supported_types = [tf.lite.constants.FLOAT16]
Tflite_quanit_model = converter.convert()

のようにして、

GPU DeleGate を使うときに、

const TfLiteGpuDelegateOptions options = {
.metadata = NULL,
.compile_options = {
.precision_loss_allowed = 1, // FP16
.preferred_gl_object_type = TFLITE_GL_OBJECT_TYPE_FASTEST,
.dynamic_batch_enabled = 0, // Not fully functional yet
},
};

にオプションを設定すればいいのね。

 

TensorFlow Lite にどんどん機能追加されていきますね。