vai_q_pytorch 高速微調整 - 2.5 日本語

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

Document ID
UG1414
Release Date
2022-06-15
Version
2.5 日本語

一般的に量子化後の精度ロスはわずかですが、MobileNet などの一部のネットワークでは、大きくなる可能性があります。このような状況では、まず最初に高速微調整を試します。高速微調整を実行しても満足のいく結果が得られない場合は、QAT を使用して、量子化モデルの精度をさらに向上させることができます。

AdaQuant アルゴリズム 1 は、ラベルなしのデータの小さな集合を使用します。アクティベーションをキャリブレーションするだけでなく、重みも微調整します。Vitis AI クオンタイザーはこのアルゴリズムをエイリアス「fast finetuning」として実装しています。高速微調整は、量子化キャリブレーションより多少低速ですが、より優れた性能を達成できます。高速微調整は QAT と類似していますが、実行するたびに異なる結果が生成されることがあります。

高速微調整ではモデルのトレーニングは実行されないため、必要な反復回数は少なく済みます。Imagenet データセットの分類モデルの場合、5120 個の画像で十分に実験できます。高速微調整フローでは、データ アノテーション情報は必要ありません。このため、アノテーションのないデータを入力しても正しく動作します。高速微調整には、モデル評価スクリプトに基づいた若干の変更が必要ですが、トレーニングのためにオプティマイザーを設定する必要はありません。高速微調整を使用するには、モデル転送を繰り返すための関数が必要であり、これは高速微調整を実行中に呼び出されます。元の推論コードを使用して再キャリブレーションすることを推奨します。

サンプル全体は オープンソース サンプル にあります。

# fast finetune model or load finetuned parameter before test 
  if fast_finetune == True:
      ft_loader, _ = load_data(
          subset_len=5120,
          train=False,
          batch_size=batch_size,
          sample_method='random',
          data_dir=args.data_dir,
          model_name=model_name)
      if quant_mode == 'calib':
          quantizer.fast_finetune(evaluate, (quant_model, ft_loader, loss_fn))
      elif quant_mode == 'test':
          quantizer.load_ft_param()
パラメーターの微調整と、この ResNet18 サンプルの再キャリブレーションを実行するには、次のコマンドを実行します。
python resnet18_quant.py --quant_mode calib --fast_finetune
微調整された量子化済みモデルの精度をテストするには、次のコマンドを実行します。
python resnet18_quant.py --quant_mode test --fast_finetune
微調整された量子化済みモデルを運用するには、次のコマンドを実行します。
python resnet18_quant.py --quant_mode test --fast_finetune --subset_len 1 --batch_size 1 --deploy
注記:
  1. Itay Hubara et.al., Improving Post Training Neural Quantization: Layer-wise Calibration and Integer Programming, arXiv:2006.10518, 2020.