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 に設定する必要があります。