TensorFlow Lite と TensorFlow 演算子の互換性

モデルで使用する機械学習(ML)演算子は、TensorFlow モデルを TensorFlow Lite 形式に変換するプロセスに影響を与える可能性があります。TensorFlow Lite コンバータは、一般的な推論モデルで使用される一部の TensorFlow 演算のみをサポートしています。つまり、すべてのモデルを直接変換できるわけではありません。変換ツールを使用すると、演算子を追加できますが、この方法でモデルを変換するには、モデルの実行に使用する TensorFlow Lite ランタイム環境を変更する必要があります。これにより、Google Play 開発者サービスなどの標準のランタイム デプロイ オプションの使用が制限される場合があります。

TensorFlow Lite コンバータは、モデル構造を分析し、最適化を適用して、直接サポートされている演算子と互換性を持たせるように設計されています。たとえば、モデルの ML 演算子によっては、コンバータがこれらの演算子を省略または融合して、対応する TensorFlow Lite 演算子にマッピングできます。

サポートされているオペレーションであっても、パフォーマンス上の理由から、特定の使用パターンが予想されることがあります。TensorFlow Lite で使用できる TensorFlow モデルの構築方法を理解する最善の方法は、オペレーションを変換して最適化する方法と、このプロセスによって課される制限を慎重に検討することです。

サポートされている演算子

TensorFlow Lite の組み込み演算子は、TensorFlow コアライブラリの一部である演算子のサブセットです。TensorFlow モデルには、複合演算子や、ユーザーが定義した新しい演算子の形式でカスタム演算子を含めることもできます。次の図は、これらの演算子間の関係を示しています。

TensorFlow の演算子

この範囲の ML モデル演算子から、変換プロセスでサポートされている次の 3 種類のモデルがあります。

  1. TensorFlow Lite 組み込み演算子のみを使用したモデル。(推奨
  2. 組み込み演算子を使用してモデルを作成し、TensorFlow コア演算子を選択します。
  3. 組み込み演算子、TensorFlow コア演算子、カスタム演算子を含むモデル。

モデルに TensorFlow Lite でネイティブにサポートされているオペレーションのみが含まれている場合、変換のための追加のフラグは必要ありません。このタイプのモデルはスムーズに変換され、デフォルトの TensorFlow Lite ランタイムを使用して最適化と実行を行うのが簡単なため、この方法をおすすめします。また、Google Play 開発者サービスなど、モデルのデプロイ オプションは他にも用意されています。TensorFlow Lite コンバータ ガイドから開始できます。組み込み演算子のリストについては、TensorFlow Lite Ops ページをご覧ください。

コアライブラリから特定の TensorFlow オペレーションを含める必要がある場合は、変換時にそのオペレーションを指定し、ランタイムにそれらのオペレーションが含まれるようにする必要があります。詳細な手順については、TensorFlow 演算子を選択するをご覧ください。

変換されたモデルにカスタム演算子を含める最後のオプションは可能な限り避けてください。カスタム演算子は、複数のプリミティブ TensorFlow コア演算子を組み合わせて作成された演算子か、まったく新しい演算子を定義して作成された演算子です。カスタム演算子を変換すると、組み込みの TensorFlow Lite ライブラリ外の依存関係が発生するため、モデル全体のサイズが大きくなる可能性があります。カスタム オペレーションは、モバイル デプロイまたはデバイス デプロイ用に特別に作成されていない場合、リソースの制約があるデバイスにデプロイした場合、サーバー環境と比較してパフォーマンスが低下する可能性があります。最後に、一部の TensorFlow コア オペレータを含める場合と同様に、カスタム オペレータではモデルのランタイム環境を変更する必要があります。これにより、Google Play 開発者サービスなどの標準のランタイム サービスを利用できなくなります。

サポートされている型

ほとんどの TensorFlow Lite 演算は、浮動小数点(float32)推論と量子化(uint8int8)推論の両方をターゲットにしていますが、tf.float16 や文字列などの他の型に対する演算はまだ多くありません。

浮動小数点モデルと量子化モデルでは、異なるバージョンの演算を使用すること以外の違いは変換方法です。量子化変換にはテンソルのダイナミック レンジ情報が必要です。これには、モデルのトレーニング中の「疑似量子化」、調整データセットを介した範囲情報の取得、または「オンザフライ」範囲推定の実行が必要です。詳しくは、量子化をご覧ください。

単刀直入な変換、不変の折り畳み、融合

複数の TensorFlow オペレーションは、直接的な同等のものがなくても、TensorFlow Lite で処理できます。これは、グラフから単純に削除されるオペレーション(tf.identity)、テンソルで置き換えられるオペレーション(tf.placeholder)、またはより複雑なオペレーションへの融合(tf.nn.bias_add)が可能なオペレーションの場合です。サポートされているオペレーションでも、これらのプロセスのいずれかによって削除される場合があります。

以下に、通常はグラフから削除される TensorFlow オペレーションの一部を示します(すべての例を網羅するものではありません)。

  • tf.add
  • tf.debugging.check_numerics
  • tf.constant
  • tf.div
  • tf.divide
  • tf.fake_quant_with_min_max_args
  • tf.fake_quant_with_min_max_vars
  • tf.identity
  • tf.maximum
  • tf.minimum
  • tf.multiply
  • tf.no_op
  • tf.placeholder
  • tf.placeholder_with_default
  • tf.realdiv
  • tf.reduce_max
  • tf.reduce_min
  • tf.reduce_sum
  • tf.rsqrt
  • tf.shape
  • tf.sqrt
  • tf.square
  • tf.subtract
  • tf.tile
  • tf.nn.batch_norm_with_global_normalization
  • tf.nn.bias_add
  • tf.nn.fused_batch_norm
  • tf.nn.relu
  • tf.nn.relu6

試験運用中の運用

次の TensorFlow Lite オペレーションは存在しますが、カスタムモデルの準備ができていません。

  • CALL
  • CONCAT_EMBEDDINGS
  • CUSTOM
  • EMBEDDING_LOOKUP_SPARSE
  • HASHTABLE_LOOKUP
  • LSH_PROJECTION
  • SKIP_GRAM
  • SVDF