トレーニング時のモデルの圧縮

はじめに

トレーニング時のモデル圧縮は、トレーニング中に最適化 (量子化など) を適用することでモデルのパフォーマンスを向上させます。トレーニング・プロセスでは、低精度の最適化による損失が最小限に抑えられるため、モデルの精度を維持しながら、レイテンシーとメモリー使用量を削減できます。一般に、トレーニング時のモデルの最適化は、トレーニング後の最適化よりもモデルのパフォーマンスと精度が向上しますが、設定に多くの労力が必要になる傾向があります。

OpenVINO は、モデルに圧縮アルゴリズムを実装してパフォーマンスを向上させるため、ニューラル・ネットワーク圧縮フレームワーク (NNCF) ツールを提供します。NNCF は、PyTorch および TensorFlow トレーニング・パイプラインに統合して、トレーニング時の圧縮メソッドをパイプラインに追加する Python ライブラリーです。NNCF でトレーニング時の圧縮メソッドを適用するには、以下が必要です。

  • PyTorch または TensorFlow フレームワークの浮動小数点モデル

  • PyTorch または TensorFlow フレームワークでセットアップされたトレーニング・パイプライン

  • トレーニングと検証のデータセット

トレーニング・パイプラインに圧縮を追加するには、数行のコードのみが必要です。圧縮技術は、調整中に使用するアルゴリズムを指定する単一の構成ファイルによって定義されます。

NNCF クイックスタートの例

NNCF を使用して PyTorch または Tensorflow トレーニング・パイプラインにモデル圧縮を追加する段階的な例については、次の Jupyter ノートブックを参照してください。

インストール

NNCF は GitHub でオープンソース化されており、OpenVINO とは別のパッケージとして配布されています。PyPI でも利用できます。NNCF は、PyTorch または TensorFlow がインストールされている Python 環境にインストールします。

PyPI からインストール

pip マネージャーで最新リリースバージョンをインストールするには、次のコマンドを実行します。

pip install nncf

特定のフレームワークを使用してインストールするには、pip install nncf[extras] コマンドを使用します。extras は、torchtfonnx などの使用可能なエクストラのリストです。

最新の NNCF バージョンをソースからインストールするには、GitHub の手順に従ってください。

NNCF のインストールには、OpenVINO は必要ありません。最適化されたモデルをデプロイするには、OpenVINO を別途インストールする必要があります。

NNCF との連携

以下の図は、NNCF を使用してトレーニング時に圧縮を行う一般的なワークフローを示しています。NNCF の最適化は TensorFlow または PyTorch トレーニング・スクリプトに追加され、モデルが微調整されます。最適化されたモデルは、OpenVINO IR 形式にエクスポートして、OpenVINO ランタイムでパフォーマンスを加速できます。

../../_images/nncf_workflow.svg

トレーニング時の圧縮方法

NNCF は、トレーニング時の圧縮によってモデルのパフォーマンスを向上させるいくつかの方法を提供します。

量子化

量子化は、ニューラル・ネットワーク内の重みとアクティベーション値を高精度形式 (32 ビット浮動小数点など) から低精度形式 (8 ビット整数など) に変換するプロセスです。これは、モデルのメモリー使用量とレイテンシーを削減するのに役立ちます。NNCF は、量子化対応トレーニングを使用してモデルを量子化します。

量子化対応トレーニングでは、トレーニング中に、低精度の影響をシミュレートするノードがニューラル・ネットワークに挿入されます。これにより、トレーニング・アルゴリズムは、トレーニング中に最小限にできるトレーニング全体の損失の一部として、量子化エラーを考慮できるようになります。これにより、ネットワークは量子化されたときに精度を向上できます。

NNCF で正式にサポートされている量子化方法は、均一 8 ビット量子化です。これは、ニューラル・ネットワーク内のすべての重みとアクティベーション関数が 8 ビット値に変換されることを意味します。詳細については、量子化対応トレーニング・ガイドを参照してください。

フィルターのプルーニング

フィルターのプルーニング・アルゴリズムは、特定のフィルターの重要度基準に基づいて畳み込みレイヤーの出力フィルターをゼロにすることによってモデルを圧縮します。微調整中に、重要度基準を使用して、ネットワークの出力に大きく影響しない冗長なフィルターを検索し、それらをゼロにします。微調整後、ゼロ設定されたフィルターはネットワークから削除されます。詳細については、フィルターのプルーニングを参照してください。

実験方法

NNCF は、開発の実験段階にあり、専門の開発者にのみ推奨される最先端の圧縮技術も提供しています。これには以下のものがあります。

  • 混合精度量子化

  • スパース性

  • 二値化

これらの詳細については、GitHub の NNCF リポジトリーにアクセスしてください。