Vengineerの妄想

人生を妄想しています。

TensorFlow Liteでは、MLIRが使われている

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

TensorFlow Lite の converter の中で、MLIRが使われています。

github.com

このビデオのこの部分(14分ぐらい)でも Converter を MLIR ベースにすると言っていますね

www.youtube.com

converter の引数の --experimental_new_converter です。 

# Enable MLIR-TFLite converter.
parser.add_argument(
"--experimental_new_converter",
action="store_true",
help=("Experimental flag, subject to change. Enables MLIR-based "
"conversion instead of TOCO conversion."))
return parser

 この引数が指定されると、下記のように、converterのexperimental_new_converterにTrueが設定されます。

if flags.experimental_new_converter:
converter.experimental_new_converter = True

Converter内の experimental_new_converter を True にしてもまだ MLIR を使いません。

experimental_new_converter: Experimental flag, subject to change.
Enables MLIR-based conversion instead of TOCO conversion.

 

もう一つは、Converter内で定義されている、

experimental_new_quantizer: Experimental flag, subject to change.
Enables MLIR-based post-training quantization.

 この experimental_new_quantizer が Trureになると、ここで enable_mlir_quantizer が True になり、mlir::lite::QuantizeModel メソッドが呼ばれます。Falseの場合は、tflite::optimize::QuantizeModel メソッドが呼ばれます。

if (enable_mlir_quantizer) {
status = mlir::lite::QuantizeModel(
*tflite_model, TfLiteTypeToSchemaType(input_type),
TfLiteTypeToSchemaType(output_type), {}, allow_float, &builder,
error_reporter_.get());
} else {
status = tflite::optimize::QuantizeModel(
&builder, tflite_model.get(), TfLiteTypeToSchemaType(input_type),
TfLiteTypeToSchemaType(output_type), allow_float,
error_reporter_.get());
}