概要 - 3.5 日本語

Vitis AI ユーザー ガイド (UG1414)

Document ID
UG1414
Release Date
2023-09-28
Version
3.5 日本語

推論プロセスでは膨大な演算が発生するため、エッジ アプリケーションの低レイテンシかつ高スループットという要件を満たすには、広いメモリ帯域幅が必要です。

量子化とチャネル プルーニング技術を利用すると、これらの課題に対応するだけでなく、精度の低下を最小限に抑えながら最適な性能と高いエネルギー効率を実現できます。量子化を実行すると、整数計算ユニットが利用できるようになり、重みやアクティベーションを精度を落として表現できるようになります。一方、プルーニングは全体で必要な演算数を減らします。AMD Vitis AI クオンタイザーには量子化ツールが含まれており、プルーニング ツールは Vitis AI オプティマイザーに統合されています。

図 1. プルーニングと量子化フロー

一般に、ニューラル ネットワークの学習では 32 ビット浮動小数点の重みとアクティベーションを使用します。Vitis AI クオンタイザーは、32 ビット浮動小数点の重みと活性化値を 8 ビット整数 (INT8) 形式に変換することで、予測精度を損なうことなく、演算の複雑さを軽減できます。固定小数点ネットワーク モデルの運用の方が、浮動小数点モデルよりも必要なメモリ帯域幅が狭く、速度と電力効率が浮動小数点モデルの場合より向上します。Vitis AI クオンタイザーは、たたみ込み、プーリング、完全接続、バッチ正規化など、ニューラル ネットワークの一般的なレイヤーをサポートします。

Vitis AI クオンタイザーは、TensorFlow (1.x および 2.x) と PyTorch をサポートしています。クオンタイザーの名前は、それぞれ vai_q_tensorflow と vai_q_pytorch です。Vitis AI 2.5 およびそれ以前のバージョンでは、TensorFlow 1.x 用の Vitis AI クオンタイザーは TensorFlow 1.15 に基づいており、TensorFlow 1.15 パッケージの一部としてリリースされていました。一方、Vitis AI 3.0 以降では、Vitis AI クオンタイザーは TensorFlow 1.x および TensorFlow 2.x の両方に対応する複数の量子化 API を備えたスタンドアロンの Python パッケージとして提供されています。このパッケージをインポートすると、Vitis AI クオンタイザーを TensorFlow のプラグインとして動作させることができます。

表 1. Vitis AI クオンタイザーでサポートされるフレームワークおよび機能
モデル バージョン 機能
トレーニング後の量子化 (PTQ) 量子化認識トレーニング (QAT) 高速微調整 (高度なキャリブレーション) インスペクター
TensorFlow 1.x 1.15 をサポート あり あり あり なし
TensorFlow 2.x 2.3 ~ 2.12 をサポート あり あり あり あり
PyTorch 1.2 ~ 1.13、2.0 をサポート あり あり あり あり

トレーニング後の量子化 (PTQ) では、アクティベーション分布を分析するために必要なのはラベル付けされていない小規模な画像セットのみです。トレーニング後の量子化の実行時間は、ニューラル ネットワークのサイズによって数秒から数分とさまざまです。一般的に、量子化後には、許容できる程度の精度低下が発生します。ただし、MobileNet などの一部のネットワークでは、許容できない程大きな精度低下が生じる場合があります。このような場合、量子化認識トレーニング (QAT) を実行して量子化モデルの精度をさらに向上させることができます。QAT を実行するためには、元のトレーニング データセットが必要です。このプロセスには数エポックの微調整が必要で、微調整にかかる時間は数分から数時間に渡ります。QAT を実行する際は、学習レートを低く抑えることを推奨します。

注記: Vitis AI 1.4 より、「量子化キャリブレーション」の用語が「トレーニング後の量子化」に変更され、「量子化の微調整」「量子化認識トレーニング」に変更されました。
注記: Vitis AI は、符号付き量子化のみを実行します。入力ピクセル値をスケーリングして平均値を 0 にし、分散を 1 にする標準化を適用することを強く推奨します。これにより、DPU で見た値が [-1.0, +1.0] の範囲になります。生の入力を 255.0 で割って [0.0, 1.0] の範囲を得ることによって実現されたスケーリング済みの符号なし入力を使用すると、入力範囲の 1/2 しか使用されないため、ダイナミック範囲が減少します。TensorFlow 2.x および PyTorch のクオンタイザーは、実験用に符号なしの量子化を行うための設定を提供しています。得られた結果は現時点では DPU で運用できません。
注記: Netron などのツールでモデルを表示すると、レイヤーによってはそのレイヤーに使用した量子化パラメーターを示す fix_point パラメーターが存在することがあります。fix_point パラメーターは、使用した小数部ビットの数を示します。たとえば、8 ビット符号付き量子化で fix_point= 7 の場合、Q フォーマットでは Q0.7 となります (符号 1 ビット、整数部 0 ビット、小数部 7 ビット)。Q フォーマットの整数値を浮動小数点に変換するには、整数値に 2^-fixed_point を掛けます。

トレーニング後の量子化については、クロス レイヤー イコライゼーション 1 アルゴリズムが実装されています。クロス レイヤー イコライゼーションにより、特に depthwise たたみ込みを含むネットワークで、キャリブレーション性能が向上します。

AdaQuant アルゴリズム 2 は、ラベルなしのデータの小さな集合を使用して、アクティベーションを調整するだけでなく、重みを微調整調整します。AdaQuant は、トレーニング後の量子化と同じようにラベルなしデータの小さな集合を使用しますが、微調整のような動作でモデルを変更します。Vitis AI クオンタイザーが実装するこのアルゴリズムは、「高速微調整」または「高度なキャリブレーション」と呼ばれます。高速微調整では、トレーニング後の量子化より精度が向上しますが、多少低速になります。
注記: 高速微調整の場合、各実行で異なる結果が得られます。これは微調整の場合と同じです。

参考資料

  1. Markus Nagel et al., Data-Free Quantization through Weight Equalization and Bias Correction, arXiv:1906.04721, 2019.
  2. Itay Hubara et al.., Improving Post Training Neural Quantization: Layer-wise Calibration and Integer Programming, arXiv:2006.10518, 2020.