vai_q_onnx Usage - vai_q_onnx Usage - 3.5 日本語 - UG1414

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

Document ID
UG1414
Release Date
2023-09-28
Version
3.5 日本語

vai_q_onnx.quantize_static(
    model_input,
    model_output,
    calibration_data_reader,
    quant_format=vai_q_onnx.VitisQuantFormat.FixNeuron,
    calibrate_method=vai_q_onnx.PowerOfTwoMethod.MinMSE,
    input_nodes=[],
    output_nodes=[],
    op_types_to_quantize=None,
    per_channel=False,
    reduce_range=False,
    activation_type=QuantType.QInt8,
    weight_type=QuantType.QInt8,
    nodes_to_quantize=None,
    nodes_to_exclude=None,
    optimize_model=True,
    use_external_data_format=False,
    calibrate_method=CalibrationMethod.MinMax,
    extra_options=None)

引数

model_input
量子化するモデルのファイル パス。
model_output
量子化されたモデルのファイル パス。
calibration_data_reader
キャリブレーション データ リーダー。キャリブレーション データをエニュメレートして、オリジナル モデルの入力を生成する。クイック テスト用にランダムデータを使用する場合は、calibration_data_reader を None に設定可能。
quant_format
  • QOperator: 量子化された演算子でモデルを直接量子化する。
  • QDQ: テンソルに QuantizeLinear/DeQuantizeLinear を挿入してモデルを量子化する。8 ビット量子化のみをサポートする。
  • VitisQuantFormat.QDQ: テンソルに VAIQuantizeLinear/VAIDeQuantizeLinear を挿入してモデルを量子化する。より多くのビット幅とコンフィギュレーションをサポート。
  • VitisQuantFormat.FixNeuron: テンソルに FixNeuron (QuantizeLinear と DeQuantizeLinear の組み合わせ) を挿入してモデルを量子化する。
calibrate_method
DPU デバイスの場合、calibrate_method を vai_q_onx.PowerOfTwoMethod.NonOverflow または vai_q_onx.PowerOfTwoMethod.MinMSE に設定し、2 のべき乗スケールの量子化を適用します。現在、PowerOfTwoMethod には MinMSE と NonOverflow の 2 つの方法がサポートされています。デフォルトは MinMSE です。
input_nodes
リスト型 (文字列) オブジェクト。量子化対象となる開始ノードの名前を含みます。モデル内でこれらのノードより前にあるノードは、最適化も量子化もされません。たとえば、この引数によって、いくつかのプリプロセッシング ノードをスキップすることや、最初のノードの量子化を停止することが可能です。デフォルト値は「[]」です。
output_nodes
リスト型 (文字列) オブジェクト。量子化対象となる終点ノードの名前を含みます。モデル内でこれらのノードより後にあるノードは、最適化も量子化もされません。たとえば、この引数によって、いくつかのポストプロセッシング ノードをスキップしたり、最後のノードの量子化を停止することが可能です。デフォルト値は「[]」です。
op_types_to_quantize
量子化する演算子の種類を指定します (たとえば Conv のみを量子化する場足は ['Conv'] のように指定)。デフォルトでは、サポートされているすべての演算子を量子化します。
per_channel
重みをチャネルごとに量子化します。DPU では、チャネルごとの量子化をサポートしていないため、False に設定する必要があります。
reduce_range
重みを 7 ビットで量子化します。DPU では、reduce_range をサポートしていないため、False に設定する必要があります。
weight_type
重みの量子化に使用するデータ型。DPU の場合、QuantType.QInt8 に設定する必要があります。データ型の選択の詳細は、https://onnxruntime.ai/docs/performance/quantization.html を参照してください。
nodes_to_quantize
量子化するノード名のリスト。このリストに含まれるノードは、リストが None の場合のみ量子化されます。
nodes_to_exclude
除外するノード名のリスト。このリストが None の場合、リストに含まれるノードは量子化の対象から除外されます。
optimize_model
量子化前にモデルを最適化することは、まもなくサポート対象外となります。最適化によって計算グラフが変更され、量子化の損失をデバッグすることが難しくなるため推奨されません。
use_external_data_format
2GB 以上の大きなサイズのモデルに対して使用されるオプションです。デフォルト値は False です。
extra_options
異なるケースの多様なオプションに対応するためのキーと値のペア ディクショナリ。現在使用されているペア:
ActivationSymmetric
アクティベーション用のキャリブレーション データを対称化する (デフォルトは False)。PowerOfTwoMethodのcalibrate_method では、常に ActivationSymmetric を True に設定する必要がある。
WeightSymmetric
重み用のキャリブレーション データを対称化する (デフォルト値は TRUE)。PowerOfTwoMethod calibrate_method では、常に WeightSymmetric を True に設定する必要がある。
ForceQuantizeNoInputCheck
デフォルトでは、一部の演算子 (maxpool、transpose など) は、それらの入力が量子化されていない場合には、自動的に量子化を行いません。True に設定すると、これらの演算子は常に入力を量子化し、量子化された出力を生成します。また、nodes_to_exclude を使用して、特定のノードに対しては量子化を適用しないように設定できます。
MatMulConstBOnly
スタティック モードの場合、デフォルト値は False です。有効に設定すると、定数 B を持つ MatMul 演算のみが量子化されます。
AddQDQPairToWeight
デフォルト値は False です。浮動小数点の重みを量子化し、単独で挿入された DeQuantizeLinear ノードに供給します。True に設定すると、浮動小数点の重みはそのままとなり、QuantizeLinear/DeQuantizeLinear ノードが挿入されます。PowerOfTwoMethod の calibrate_method では、QDQ は常にペアで存在する必要があります。したがって、qdq のペアを追加する必要があり、AddQDQPairToWeight を常に True に設定する必要があります。