QAT は浮動小数点モデルのトレーニング/微調整と似ていますが、トレーニングを開始する前に vai_q_tensorflow2 が浮動小数点グラフを書き換え、量子化モデルに変換する点が異なります。一般的なワークフローは、次のとおりです。完全なサンプルは、ここにあります。
-
浮動小数点モデル、データセット、およびトレーニング スクリプトを準備する。
QAT の前に、次のファイルを準備してください。
表 1. vai_q_tensorflow2 QAT 用の入力ファイル No. 名称 説明 1 浮動小数点モデル 出発点となる浮動小数点モデル ファイル。ゼロからトレーニングする場合は省略できます。 2 データセット ラベル付きのトレーニング データセット。 3 トレーニング スクリプト モデルの浮動小数点トレーニング/微調整を実行する Python スクリプト。 -
(オプション) 浮動小数点モデルを評価する。
QAT の前に浮動小数点モデルを評価し、スクリプトとデータセットに問題がないことを確認します。浮動小数点チェックポイントの精度とロス値は、QAT のベースラインとしても使用できます。
-
トレーニング スクリプトを変更して、QAT を実行する。
vai_q_tensorflow2 API の
VitisQuantizer.get_qat_model
を使用してモデルを量子化済みモデルに変換した後、トレーニング/微調整に進みます。次に例を示します。model = tf.keras.models.load_model(‘float_model.h5’) # *Call Vai_q_tensorflow2 api to create the quantize training model from tensorflow_model_optimization.quantization.keras import vitis_quantize quantizer = vitis_quantize.VitisQuantizer(model, quantize_strategy='8bit_tqt') qat_model = quantizer.get_qat_model( init_quant=True, # Do init PTQ quantization will help us to get a better initial state for the quantizers, especially for `pof2s_tqt` strategy. Must be used together with calib_dataset calib_dataset=calib_dataset) # Then run the training process with this qat_model to get the quantize finetuned model. # Compile the model model.compile( optimizer= RMSprop(learning_rate=lr_schedule), loss=tf.keras.losses.SparseCategoricalCrossentropy(), metrics=keras.metrics.SparseTopKCategoricalAccuracy()) # Start the training/finetuning model.fit(train_dataset)
注記: Vitis AI 2.0 は pof2s_tqt をサポートしています。この場合、クオンタイザーは Trained-Threshold を使用し、QAT の結果が改善することがあります。デフォルトでは、Straight-Through-Estimator が使用されます。最大限の性能を得るには、QAT で'init_quant=True'
の場合のみ 8bit_tqt ストラテジを使用するようにします。PTQ 量子化を使用して初期化を実行すると、クオンタイザーのパラメーターの初期状態が改善します (特に pof2s_tqt を使用した場合)。それ以外の場合、トレーニングが収束しないことがあります。 -
モデルを保存する。
model.save()
を呼び出してトレーニング済みモデルを保存するか、またはmodel.fit()
内のコールバックを使用してモデルを定期的に保存します。例:# save model manually model.save(‘trained_model.h5’) # save the model periodically during fit using callbacks model.fit( train_dataset, callbacks = [ keras.callbacks.ModelCheckpoint( filepath=’./quantize_train/’ save_best_only=True, monitor="sparse_categorical_accuracy", verbose=1, )])
-
運用可能な量子化モデルに変換する。
トレーニング/微調整後のモデルを、コンパイラ要件に合わせて変更します。たとえば、train_with_bn = TRUE に設定している場合、トレーニング時に BatchNormalization レイヤーの折りたたみが実行されないため、運用前に折りたたむ必要があります。トレーニング中に一部の量子化パラメーターが変化し、コンパイラの制限範囲を超えることがあります。これらは運用前に修正する必要があります。
次の例に示すように、
get_deploy_model()
関数を使用すると、これらの変換を実行して運用可能なモデルを生成できます。quantized_model = vitis_quantizer.get_deploy_model(model) quantized_model.save('quantized_model.h5')
-
(オプション) 量子化されたモデルを評価する。
eval_dataset
上でmodel.evaluate()
を呼び出し、浮動小数点モデルの評価と同じように、量子化されたモデルを評価します。from tensorflow_model_optimization.quantization.keras import vitis_quantize quantized_model = tf.keras.models.load_model('quantized_model.h5') quantized_model.compile(loss=tf.keras.losses.SparseCategoricalCrossentropy(), metrics= keras.metrics.SparseTopKCategoricalAccuracy()) quantized_model.evaluate(eval_dataset)
推奨: QAT に進む前に浮動小数点モデルのトレーニングと微調整を使用してください。