モデルの最適化

エッジデバイスでは、メモリや計算能力が限られていることがよくあります。各種 モデルに最適化を適用して実行できるように、 必要があります。さらに、一部の最適化では、特殊なアルゴリズムを使用して、 推論を高速化できます。

LiteRT と TensorFlow モデル最適化 ツールキットには、 推論を最適化する複雑さが最小限に抑えられます。

適用時には、モデルの最適化を検討することをおすすめします。 開発プロセスに集中できます。このドキュメントでは、キャンペーンの最適化と エッジ ハードウェアにデプロイするための TensorFlow モデル。

モデルの最適化が必要な理由

モデルの最適化がアプリケーション開発に役立つ主な方法は複数ある 必要があります。

サイズ削減

モデルのサイズを小さくするために、最適化のいくつかの形式を使用できます。小 次のような利点があります。

  • ストレージ サイズが小さい: モデルが小さいほど占有する保存容量が少なくなる ユーザーできます。たとえば、より小さなモデルを使用する Android アプリは、 ユーザーのモバイル デバイスの保存容量を減らす。
  • ダウンロード サイズの削減: モデルが小さいほど、必要な時間と帯域幅も少ない ダウンロードします。できます。
  • メモリ使用量が少ない: モデルが小さいほど RAM の使用量が少なくなります。このため、 メモリを解放してアプリケーションの他の部分に使用できるようにします。 パフォーマンスと安定性が向上します

これらすべてのケースで、量子化によってモデルのサイズを縮小できます。 ある程度の精度は犠牲になります。プルーニングとクラスタリングによって、 圧縮してダウンロードすることもできます。

レイテンシの短縮

レイテンシは、特定のデータセットで単一の推論を実行するのにかかる時間です。 モデルです。最適化の方法によっては、必要な計算量を減らすことができる モデルを使用して推論を実行できるため、レイテンシが短縮されます。レイテンシは 消費電力に影響します

現在、量子化を使用してレイテンシを短縮するには、 コンピューティング リソースに負荷がかかり、場合によっては 向上します

アクセラレータの互換性

Edge などの一部のハードウェア アクセラレータ TPU など、新しい TPU を使用することで、極めて高速に推論を実行できます。 適切に最適化されているモデルの数が示されます。

一般に、この種のデバイスでは特定の入力規則で量子化され、 できます。詳細については、各ハードウェア アクセラレータのドキュメントをご覧ください。 提供します。

トレードオフ

最適化によりモデルの精度が変わる可能性があるため、 考慮すべき点がいくつかあります。

精度の変化は、最適化する個々のモデルによって異なり、 事前に予測するのは困難です一般的に 最適化されたモデルは 精度が若干低下します。ご利用の ユーザーに影響が及ぶ場合もあれば、影響しない場合もあります。体験できますまれに、 モデルによっては、最適化プロセスの結果として、ある程度の精度が得られる場合があります。

最適化の種類

LiteRT は現在、量子化、プルーニング、 説明します。

これらは TensorFlow Model Optimization の Toolkit を使用して、 TensorFlow と互換性のあるモデル最適化手法のリソース 。

量子化

量子化 モデルのパフォーマンスを表現するために使用される数値の精度を パラメータ: デフォルトは 32 ビット浮動小数点数です。その結果 モデルサイズが小さくなり 計算速度が上がります

LiteRT では、次の種類の量子化を使用できます。

技術 データ要件 サイズ削減 精度 サポートされているハードウェア
トレーニング後の float16 量子化 データなし 最大 50% 精度の大幅な低下 CPU、GPU
トレーニング後のダイナミック レンジ量子化 データなし 最大 75% 最小の精度の低下 CPU、GPU(Android)
トレーニング後の整数量子化 ラベルのない代表サンプル 最大 75% 精度の低下が小さい CPU、GPU(Android)、EdgeTPU
量子化認識トレーニング ラベル付きトレーニング データ 最大 75% 最小の精度の低下 CPU、GPU(Android)、EdgeTPU

次のディシジョン ツリーは、使用する量子化スキームの選択に モデルのサイズとモデルのタイプに基づいて、 向上します

量子化決定ツリー

以下は、トレーニング後の量子化とトレーニングにおけるレイテンシと精度の結果です。 量子化認識トレーニングが いくつかのモデルで行われていますすべてのレイテンシの数値は 単一の大きなコア CPU を搭載した Pixel 2 デバイス。ツールキットの改善に伴って ここに数字があります。

モデル 精度トップ 1(オリジナル) トップ 1 の精度(トレーニング後の量子化) トップ 1 の精度(量子化認識トレーニング) レイテンシ(オリジナル)(ミリ秒) レイテンシ(トレーニング後の量子化)(ミリ秒) レイテンシ(量子化認識トレーニング)(ミリ秒) サイズ(オリジナル)(MB) サイズ(最適化)(MB)
Mobilenet-v1-1-2240.7090.6570.70 124112641,6904.3
Mobilenet-v2-1-2240.7190.6370.709 899854143.6
Inception_v30.780.7720.775 113084554395.723.9
Resnet_v2_1010.7700.768なし 39732868なし178.344.9
<ph type="x-smartling-placeholder">
</ph> 表 1 一部の CNN モデルにおけるモデル量子化のメリット
をご覧ください。

int16 アクティベーションと int8 の重みによる完全な整数量子化

int16 アクティベーションによる量子化 活性化関数を int16、重みを int8。このモードでは、2 次元のモデルと比較した場合の int8 にアクティベーションと重みの両方を含む完全整数量子化スキーム モデルサイズを維持しますアクティベーションが機密性の高い場合は、 渡します。

注: 現時点では、最適化されていないリファレンス カーネル実装のみが、 TFLite で使用できるため、デフォルトで int8 カーネルに比べると遅くなります。このモードのメリットをフル活用すると、 専用のハードウェアやカスタム ソフトウェアを介してアクセスされます。

以下は、このモードの恩恵を受ける一部のモデルの精度の結果です。

モデル 精度の指標タイプ 精度(float32 アクティベーション) 精度(int8 アクティベーション) 精度(int16 アクティベーション)
Wav2letterWER6.7%7.7% 7.2%
DeepSpeech 0.5.1(アンロール)CER6.13%43.67% 6.52%
YoloV3mAP(IOU=0.5)0.5770.563 0.574
MobileNetV1トップ 1 の精度0.70620.694 0.6936
MobileNetV2トップ 1 の精度0.7180.7126 0.7137
MobileBertF1(完全一致)88.81(81.23)2.08(0) 88.73(81.15)
<ph type="x-smartling-placeholder">
</ph> 表 2 int16 アクティベーションによるモデル量子化の利点
をご覧ください。

プルーニング

プルーニングの仕組み モデル内のパラメータにほとんど影響しないものを 説明します。プルーニングされたモデルはディスク上の同じサイズで、実行時間も同じ より効果的に圧縮できますそのため、プルーニングは モデルのダウンロード サイズを削減する手法です。

将来的には、LiteRT でプルーニングされたモデルのレイテンシが短縮される予定です。

クラスタリング

クラスタリング モデル内の各レイヤの重みを事前定義された数値にグループ化することで機能する 各クラスタに属する重みのセントロイド値を共有し、 選択できます。これにより、モデル内の一意の重み値の数を減らし、 複雑さが軽減されます

その結果、クラスタ化モデルはより効果的に圧縮され、 デプロイの利点はプルーニングと類似しています。

開発ワークフロー

まず、Google Cloud でホストされている モデルがアプリケーションに適していることを確認します。そうでない場合は、 トレーニング後の量子化から始めることを ツールを使用します。これは広く適用でき、 トレーニングデータは不要です

精度とレイテンシの目標が満たされていない場合、またはハードウェア アクセラレータのサポートが重要で、量子化を認識 トレーニング おすすめしますその他の最適化手法については、 TensorFlow モデルの最適化 ツールキット

モデルサイズをさらに小さくする場合は、プルーニングを試してみてください。 モデルを量子化する前にクラスタリングを行います。