トレーニング時のモデルの圧縮#
はじめに
トレーニング時のモデル圧縮は、トレーニング中に最適化 (量子化など) を適用することでモデルのパフォーマンスを向上させます。トレーニング・プロセスでは、低精度の最適化による損失が最小限に抑えられるため、モデルの精度を維持しながら、レイテンシーとメモリー使用量を削減できます。一般に、トレーニング時のモデルの最適化は、トレーニング後の最適化よりもモデルのパフォーマンスと精度が向上しますが、設定に多くの労力が必要になる傾向があります。
OpenVINO は、モデルに圧縮アルゴリズムを実装してパフォーマンスを向上させるため、ニューラル・ネットワーク圧縮フレームワーク (NNCF) ツールを提供します。NNCF は、PyTorch および TensorFlow トレーニング・パイプラインに統合して、トレーニング時の圧縮メソッドをパイプラインに追加する Python ライブラリーです。NNCF でトレーニング時の圧縮メソッドを適用するには、以下が必要です:
PyTorch または TensorFlow フレームワークの浮動小数点モデル。
PyTorch または TensorFlow フレームワークでセットアップされたトレーニング・パイプライン。
トレーニングと検証のデータセット。
トレーニング・パイプラインに圧縮を追加するには、数行のコードのみが必要です。圧縮技術は、調整中に使用するアルゴリズムを指定する単一の構成ファイルによって定義されます。
NNCF クイックスタートの例#
NNCF を使用して PyTorch または Tensorflow トレーニング・パイプラインにモデル圧縮を追加する段階的な例については、次の Jupyter* Notebook を参照してください:
インストール#
NNCF は GitHub でオープンソース化されており、OpenVINO とは別のパッケージとして配布されています。PyPI でも利用できます。NNCF は、PyTorch または TensorFlow がインストールされている Python 環境にインストールします。
PyPI からインストール#
pip マネージャーで最新リリースバージョンをインストールするには、次のコマンドを実行します:
pip install nncf
最新の NNCF バージョンをソースからインストールするには、GitHub の手順に従ってください。
注
NNCF のインストールには、OpenVINO は必要ありません。最適化されたモデルをデプロイするには、OpenVINO を別途インストールする必要があります。
NNCF の動作#
以下の図は、NNCF を使用してトレーニング時に圧縮を行う一般的なワークフローを示しています。NNCF の最適化は TensorFlow または PyTorch トレーニング・スクリプトに追加され、モデルは微調整されます。最適化されたモデルは、OpenVINO IR 形式にエクスポートして、OpenVINO ランタイムでパフォーマンスを加速できます。
トレーニング時の圧縮方法#
NNCF は、トレーニング時の圧縮によってモデルのパフォーマンスを向上させるいくつかの方法を提供します。
量子化#
量子化は、ニューラル・ネットワーク内の重みと活性化値を高精度形式 (32 ビット浮動小数点など) から低精度形式 (8 ビット整数など) に変換するプロセスです。これは、モデルのメモリー使用量とレイテンシーを削減するのに役立ちます。NNCF は、量子化対応トレーニングを使用してモデルを量子化します。
量子化対応トレーニングでは、トレーニング中に、低精度の影響をシミュレートするノードがニューラル・ネットワークに挿入されます。これにより、トレーニング・アルゴリズムは、トレーニング中に最小限にできるトレーニング全体の損失の一部として、量子化エラーを考慮できるようになります。これにより、ネットワークは量子化されたときに精度を向上できます。
NNCF で正式にサポートされている量子化方法は、均一 8 ビット量子化です。これは、ニューラル・ネットワーク内のすべての重みと活性化関数が 8 ビット値に変換されることを意味します。詳細については、量子化対応トレーニング・ガイドを参照してください。
フィルターのプルーニング#
フィルターのプルーニング・アルゴリズムは、特定のフィルターの重要度基準に基づいて畳み込みレイヤーの出力フィルターをゼロにすることによってモデルを圧縮します。微調整中に、重要度基準を使用して、ネットワークの出力に大きく影響しない冗長なフィルターを検索し、それらをゼロにします。微調整後、ゼロ設定されたフィルターはネットワークから削除されます。詳細については、フィルターのプルーニングを参照してください。
実験方法#
NNCF は、開発の実験段階にあり、専門の開発者にのみ推奨される最先端の圧縮技術も提供しています。これには以下のものがあります:
混合精度量子化
スパース性
二値化
これらの詳細については、GitHub の NNCF リポジトリーにアクセスしてください。
推奨されるワーク#
圧縮対応トレーニングを使用するには、トレーニング・パイプライン、アノテーション付きデータセット、および計算リソース (CPU や GPU など) が必要です。これらを利用できない場合は、トレーニング後の量子化を開始して、量子化された結果を確認するほうが簡単です。モデルの精度が十分でない場合、圧縮を意識したトレーニングを使用できます。NNCF を使用してモデルを圧縮するには、次のワークフローを推奨します:
モデルに対してトレーニング後の量子化を実行し、パフォーマンスを元のモデルと比較します。
精度の低下が影響する場合は、量子化対応トレーニングを使用して、推論時間を短縮しながら精度を向上させます。
量子化されたモデルが遅すぎる場合は、フィルターのプルーニング を使用してモデルの推論速度を向上させます。