浮動小数点スケールを使用した量子化 - 2.5 日本語

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

Document ID
UG1414
Release Date
2022-06-15
Version
2.5 日本語
DPU 用の量子化は、2 のべき乗スケール、対称量子化、テンソルごとのクオンタイザーを使用し、DPU の動作をシミュレーションするための特殊な処理を必要とします。浮動小数点スケールをサポートする、DPU 以外のデバイスには、異なる量子化ストラテジが必要です。このため、このリリースでは、浮動小数点スケールを使用した量子化を導入しています。
fs 量子化ストラテジ
Conv2DDepthwiseConv2DConv2DTranspose および Dense レイヤーの入力および重みの量子化を実行します。デフォルトでは、Conv-BN の折りたたみは実行しません。
fsx 量子化ストラテジ
fs 量子化ストラテジより多くのレイヤー タイプ (AddMaxPooling2D および AveragePooling2D など) の量子化を実行します。また、Conv2DDepthwiseConv2DConv2DTranspose および Dense レイヤーのバイアスおよびアクティベーションの量子化も実行します。デフォルトでは、Conv-BN の折りたたみを実行します。
注記: fs および fsx ストラテジは、浮動小数点をサポートするターゲット デバイス向けに設計されています。DPU は現在、浮動小数点をサポートしていないため、これらの量子化ストラテジで量子化されたモデルは DPU で運用できません。
VitisQuantizer の construct 関数内で quantize_strategyfs または 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_datasettrain_dataset、またはその他データセットのすべてあるいは一部を使用できます。
calib_steps
calib_steps は、キャリブレーションの全ステップ数です。デフォルト値は None です。calib_datasettf.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 の使用法 を参照してください。