DPU 用の量子化は、2 のべき乗スケール、対称量子化、テンソルごとのクオンタイザーを使用し、DPU の動作をシミュレーションするための特殊な処理を必要とします。浮動小数点スケールをサポートする、DPU 以外のデバイスには、異なる量子化ストラテジが必要です。このため、このリリースでは、浮動小数点スケールを使用した量子化を導入しています。
-
fs
量子化ストラテジ -
Conv2D
、DepthwiseConv2D
、Conv2DTranspose
およびDense
レイヤーの入力および重みの量子化を実行します。デフォルトでは、Conv-BN の折りたたみは実行しません。 -
fsx
量子化ストラテジ -
fs
量子化ストラテジより多くのレイヤー タイプ (Add
、MaxPooling2D
およびAveragePooling2D
など) の量子化を実行します。また、Conv2D
、DepthwiseConv2D
、Conv2DTranspose
およびDense
レイヤーのバイアスおよびアクティベーションの量子化も実行します。デフォルトでは、Conv-BN の折りたたみを実行します。
注記:
fs
および fsx
ストラテジは、浮動小数点をサポートするターゲット デバイス向けに設計されています。DPU は現在、浮動小数点をサポートしていないため、これらの量子化ストラテジで量子化されたモデルは DPU で運用できません。VitisQuantizer
の construct 関数内で quantize_strategy
を fs
または fsx
に設定することにより、浮動小数点スケールによる量子化の使用に切り替えることができます。次にサンプル コードを示します。model = tf.keras.models.load_model(‘float_model.h5’)
from tensorflow_model_optimization.quantization.keras import vitis_quantize
quantizer = vitis_quantize.VitisQuantizer(model, quantize_strategy='fs')
quantized_model = quantizer.quantize_model(calib_dataset=calib_dataset,
calib_step=100,
calib_batch_size=10,
**kwargs)
- calib_dataset
- ここでは、キャリブレーション用の代表的なキャリブレーション データセットとして
calib_dataset
を使用しています。eval_dataset
、train_dataset
、またはその他データセットのすべてあるいは一部を使用できます。 - calib_steps
-
calib_steps
は、キャリブレーションの全ステップ数です。デフォルト値は None です。calib_dataset
がtf.data dataset
、ジェネレーター、またはkeras.utils.Sequence
インスタンスのいずれかで、ステップ数が None の場合、データセットがなくなるまでキャリブレーションが実行されます。この引数は、配列入力ではサポートされません。 - calib_batch_size
- calib_batch_size は、キャリブレーションのバッチあたりのサンプル数です。「calib_dataset」の形式がデータセット、ジェネレーター、または
keras.utils.Sequence
インスタンスの場合、バッチ サイズはデータセット自体で制御します。calib_dataset
の形式がnumpy.array
オブジェクトの場合、デフォルトのバッチ サイズは 32 です。 - **kwargs
-
量子化ストラテジのユーザー定義の設定を指定する dict。デフォルトのビルトイン量子化ストラテジを上書きします。たとえば、
bias_bit=16
に設定すると、量子化ツールは 16 ビット クオンタイザーを使用してすべてのバイアスを量子化します。ユーザー定義の設定の詳細は、vai_q_tensorflow2 の使用法 を参照してください。