コンテンツにスキップ

QDQモデル形式

  • TOC

このドキュメントでは、QDQ(QuantizeLinear/DequantizeLinear)形式の量子化モデルを使用する方法について説明します。

量子化は、ONNX Runtimeの重要なパフォーマンス最適化です。浮動小数点数を整数に変換することで、待ち時間を短縮し、モデルサイズを縮小します。

ONNX Runtimeは、さまざまな量子化オプションをサポートしています。こちらの概要を参照してください。

ONNX Runtimeは、QOperatorとQDQの両方の量子化モデル形式をサポートしています。

QDQ形式は、QOperator形式よりも新しいです。QDQ形式の主な利点は、モデル内の量子化パラメータがテンソルではなく演算子として表現されることです。これにより、ONNX RuntimeのEP(実行プロバイダー)がモデルを解析してバックエンドに渡すのが容易になります。これは、TensorRTやNNAPIなどのEPを使用する場合に重要です。これらのEPは、独自の量子化アルゴリズムを持っており、ONNX Runtimeが提供する量子化パラメータを使用する代わりに、モデルを再量子化することを好む場合があります。

一般的に、QDQ形式はQOperator形式よりも推奨されます。

QDQ形式の量子化モデルを生成する方法

Section titled “QDQ形式の量子化モデルを生成する方法”

QDQ形式の量子化モデルを生成するには、ONNX Runtime量子化ツールを使用します。

量子化ツールは、浮動小数点モデルを量子化モデルに変換するPythonスクリプトです。

量子化ツールは、コマンドラインから、またはPythonスクリプトから直接使用できます。

Terminal window
python -m onnxruntime.quantization.quantize --input_model <モデルへのパス> --output_model <モデルへのパス> --quant_format QDQ
from onnxruntime.quantization import quantize, QuantType
quantize_dynamic(
model_input='<モデルへのパス>',
model_output='<モデルへのパス>',
quant_format='qdq',
activation_type=QuantType.QInt8,
weight_type=QuantType.QInt8)

QDQ形式の量子化モデルを実行する方法

Section titled “QDQ形式の量子化モデルを実行する方法”

QDQ形式の量子化モデルを実行することは、他のONNXモデルを実行することと同じです。特別な設定は必要ありません。

こちらのONNX Runtime APIドキュメントを参照してください。

QDQ形式の量子化モデルをデバッグする方法

Section titled “QDQ形式の量子化モデルをデバッグする方法”

QDQ形式の量子化モデルをデバッグするには、NetronなどのONNXモデルビューアを使用できます。

Netronでは、モデル内のQDQノードを表示できます。これは、量子化が期待どおりに適用されていることを確認するのに役立ちます。

Netronを使用して、量子化モデルと浮動小数点モデルの間の重みとバイアスの値を比較することもできます。これは、量子化プロセスで精度が失われていないことを確認するのに役立ちます。