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

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

Document ID
UG1414
Release Date
2023-09-28
Version
3.5 日本語
DPU 用の量子化は、2 のべき乗スケール、対称量子化、テンソルごとのクオンタイザーを使用し、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
**kwargs は、量子化ストラテジのユーザー定義の設定を指定する dict です。デフォルトのビルトイン量子化ストラテジを上書きします。たとえば、「bias_bit=16」に設定すると、量子化ツールはすべてのバイアスを 16 ビット クオンタイザーで量子化します。ユーザー定義の設定の詳細は、vai_q_tensorflow2 の使用法 を参照してください。