推論プロセスでは膨大な演算が発生するため、エッジ アプリケーションの低レイテンシかつ高スループットという要件を満たすには、広いメモリ帯域幅が必要です。
量子化とチャネル プルーニング技術を利用すると、これらの課題に対応するだけでなく、精度の低下を最小限に抑えながら最適な性能と高いエネルギー効率を実現できます。量子化を実行すると、整数計算ユニットが利用できるようになり、重みやアクティベーションを精度を落として表現できるようになります。一方、プルーニングは全体で必要な演算数を減らします。AMD Vitis AI クオンタイザーには量子化ツールが含まれており、プルーニング ツールは Vitis AI オプティマイザーに統合されています。
一般に、ニューラル ネットワークの学習では 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 のプラグインとして動作させることができます。
モデル | バージョン | 機能 | |||
---|---|---|---|---|---|
トレーニング後の量子化 (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 を実行する際は、学習レートを低く抑えることを推奨します。
トレーニング後の量子化については、クロス レイヤー イコライゼーション 1 アルゴリズムが実装されています。クロス レイヤー イコライゼーションにより、特に depthwise たたみ込みを含むネットワークで、キャリブレーション性能が向上します。
参考資料
- Markus Nagel et al., Data-Free Quantization through Weight Equalization and Bias Correction, arXiv:1906.04721, 2019.
- Itay Hubara et al.., Improving Post Training Neural Quantization: Layer-wise Calibration and Integer Programming, arXiv:2006.10518, 2020.