この関数は、浮動小数点モデルのトレーニング後の量子化 (PTQ) を実行します。これには、モデルの最適化、重みの量子化、およびアクティベーションのトレーニング後の量子化が含まれます。
vitis_quantize.VitisQuantizer.quantize_model(
calib_dataset=None,
calib_batch_size=None,
calib_steps=None,
verbose=0,
add_shape_info=False,
**kwargs)
引数
- calib_dataset
-
tf.data.Dataset
、keras.utils.Sequence
、またはnp.numpy
オブジェクト。キャリブレーション用の代表的データセットです。eval_dataset、train_dataset、またはその他のデータセットの全体または一部を calib_dataset として使用できます。 - calib_steps
-
Int。キャリブレーションの全ステップ数です。デフォルト値 (None) の場合は無視されます。「calib_dataset」が
tf.data
データセット、ジェネレーター、またはkeras.utils.Sequence
インスタンスのいずれかで、ステップ数が None の場合、データセットがなくなるまでキャリブレーションが実行されます。配列入力はこの引数をサポートしていません。 - calib_batch_size
-
Int。キャリブレーションのバッチあたりのサンプル数です。「calib_dataset」がデータセット、ジェネレーター、または
keras.utils.Sequence
インスタンスの場合、バッチ サイズはデータセット自体で制御します。「calib_dataset」の形式がnumpy.array
オブジェクトの場合、デフォルトのバッチ サイズは 32 に設定されます。 - verbose
- Int。ログの冗長性です。verbose の値が大きいほど、より詳細なログが生成されます。デフォルト値は 0 です。
- add_shape_info
- ブール型。カスタム レイヤーの形状推論情報を追加するかどうかを指定します。カスタム レイヤーを使用したモデルの場合、True に設定する必要があります。
- **kwargs
- dict。量子化ストラテジのユーザー定義の設定です。デフォルトのビルトイン量子化ストラテジを上書きします。次に詳細なユーザー定義の設定を示します。
**kwargs
内の引数
この API 内の **kwargs
は、量子化ストラテジのユーザー定義の設定を指定する dict です。デフォルトのビルトイン量子化ストラテジを上書きします。たとえば、「bias_bit=16」に設定すると、量子化ツールはすべてのバイアスを 16 ビット クオンタイザーで量子化します。ユーザー定義の設定の詳細を次に示します。
- separate_conv_act
-
Conv2D/DepthwiseConv2D/TransposeConv2D/Dense
レイヤーからアクティベーション関数を切り離すかどうかを指定するbool
オブジェクト。デフォルト値はTrue
です。 - fold_conv_bn
- バッチ正規化レイヤーを前の
Conv2D/DepthwiseConv2D/TransposeConv2D/Dense
レイヤーに折りたたむかどうかを指定するbool
オブジェクト。 - convert_bn_to_dwconv
-
Vitis AI 2.0 およびそれ以前のバージョンでは
fold_bn
という名前です。 - convert_sigmoid_to_hard_sigmoid
-
Vitis AI 2.0 およびそれ以前のバージョンでは
replace_sigmoid
という名前です。 - convert_relu_to_relu6
-
Vitis AI 2.0 およびそれ以前のバージョンでは
replace_relu6
という名前です。 - include_cle
- 量子化の前にクロス レイヤー イコライゼーションを実装するかどうかを指定する
bool
オブジェクト。 - cle_steps
- クロス レイヤー イコライゼーションの反復回数を指定する
int
オブジェクト。 - cle_to_relu6
-
Vitis AI 2.0 およびそれ以前のバージョンでは
forced_cle
という名前です。 - include_fast_ft
- 高速微調整を実行するかどうかを決定する
bool
オブジェクト。高速微調整は、キャリブレーション データセットを使用して重みをレイヤーごとに調整します。これにより、モデルによっては精度が向上することがあります。高速微調整は、デフォルトでは無効です。通常の PTQ よりも時間がかかりますが、calib_dataset はトレーニング データセットよりもはるかに小さいため、QAT と比べるとはるかに短時間で完了します。精度に問題がある場合は、オンにすることで性能が改善します。 - fast_ft_epochs
- 各レイヤーに対する高速微調整の反復エポック数を指定する
int
オブジェクト。 - output_format
- 量子化されたモデルをどの形式で保存するかを指定する文字列オブジェクト。指定可能な値は、'': 保存をスキップ、'h5': .h5 ファイルを保存、'tf': saved_model ファイルを保存、'onnx': .onnx ファイルを保存。デフォルト値は「''」です。
- onnx_opset_version
- ONNX opset バージョンを指定する int オブジェクト。output_format が 'onnx' の場合のみ有効です。デフォルト値は 11 です。
- output_dir
- 量子化されたモデルを保存するディレクトリを指定する文字列オブジェクト。デフォルト値は「./quantize_results」です。
- convert_datatype
- 浮動小数点モデルのターゲット データ型を示す文字列オブジェクト。指定可能な値は、'float16'、'bfloat16'、'float32'、および 'float64' です。デフォルト値は 'float16' です。
- input_layers
- 量子化を開始するレイヤーの名前を指定する
list(string)
オブジェクト。モデル内でこれらのレイヤーより前にあるレイヤーは、最適化も量子化もされません。たとえば、この引数によって、いくつかのプリプロセッシング レイヤーをスキップすることや、最初のレイヤーの量子化を停止することが可能です。デフォルト値は[]
です。 - output_layers
- 最後に量子化されるレイヤーの名前を指定する
list(string)
オブジェクト。モデル内でこれらのレイヤーより後にあるレイヤーは、最適化も量子化もされません。たとえば、この引数によって、いくつかのポストプロセッシング レイヤーをスキップすることや、最後のレイヤーの量子化を停止することが可能です。デフォルト値は[]
です。 - ignore_layers
- 量子化中に無視されるレイヤーの名前を指定する
List(string)
オブジェクト。たとえば、この引数を使用して、敏感なレイヤーの量子化をスキップして精度を向上させることが可能です。デフォルト値は[]
です。 - input_bit
- すべての入力のビット幅を指定する
int
オブジェクト。デフォルト値は 8 です。 - input_method
- すべての入力の量子化におけるスケール係数の計算方法を指定する
int
オブジェクト。オプションは、0 (Non_Overflow
)、1 (Min_MSE
)、2 (Min_KL
)、3 (Percentile
) です。デフォルト値は 0 です。 - input_symmetry
- すべての入力に対して対称量子化を実行するか非対称量子化を実行するかを指定する
bool
オブジェクト。デフォルト値はTrue
です。 - input_per_channel
- すべての入力に対してチャネルごとの量子化を実行するかテンソルごとの量子化を実行するかを指定する
bool
オブジェクト。デフォルト値はFalse
です。 - input_round_mode
- すべての入力の量子化に使用する丸めモードを指定する
int
オブジェクト。オプションは、0 (HALF_TO_EVEN
)、1 (HALF_UP
)、2 (HALF_AWAY_FROM_ZERO
) です。デフォルト値は 1 です。 - input_unsigned
- すべての入力に対して符号なし整数量子化を使用するかを指定する
bool
オブジェクト。これは通常、input_unsigned = TRUE の場合に非負値入力 (0 ~ 1 の範囲など) に使用されます。デフォルト値はFalse
です。 - weight_bit
- すべての重さのビット幅を指定する
int
オブジェクト。デフォルト値は 8 です。 - weight_method
- すべての重さの量子化におけるスケール係数の計算方法を指定する
int
オブジェクト。オプションは、0 (Non_Overflow
)、1 (Min_MSE
)、2 (Min_KL
)、3 (Percentile
) です。デフォルト値は 1 です。 - weight_symmetry
- すべての重みに対して対称量子化を実行するか非対称量子化を実行するかを指定する
bool
オブジェクト。デフォルト値はTrue
です。 - weight_per_channel
- すべての重さに対してチャネルごとの量子化を実行するかテンソルごとの量子化を実行するかを指定する
bool
オブジェクト。デフォルト値はFalse
です。 - weight_round_mode
- すべての重さの量子化に使用する丸めモードを指定する
int
オブジェクト。オプションは、0 (HALF_TO_EVEN
)、1 (HALF_UP
)、2 (HALF_AWAY_FROM_ZERO
) です。デフォルト値は 0 です。 - weight_unsigned
- すべての重みに対して符号なし整数量子化を使用するかを指定Aする
bool
オブジェクト。これは通常、weight_symmetry = FALSE の場合に使用されます。デフォルト値はFalse
です。 - bias_bit
- すべての重さのビット幅を指定する
int
オブジェクト。デフォルト値は 8 です。 - bias_method
- すべてのバイアスの量子化についてスケール係数の計算方法を指定する
int
オブジェクト。オプションは、0 (Non_Overflow
)、1 (Min_MSE
)、2 (Min_KL
)、3 (Percentile
) です。デフォルト値は 0 です。 - bias_symmetry
- すべてのバイアスに対して対称量子化を実行するか非対称量子化を実行するかを指定する
bool
オブジェクト。デフォルト値はTrue
です。 - bias_per_channel
- すべてのバイアスに対してチャネルごとの量子化を実行するかテンソルごとの量子化を実行するかを指定する
bool
オブジェクト。デフォルト値はFalse
です。 - bias_round_mode
- すべてのバイアスの量子化に使用する丸めモードを指定する
int
オブジェクト。オプションは、0 (HALF_TO_EVEN
)、1 (HALF_UP
)、2 (HALF_AWAY_FROM_ZERO
) です。デフォルト値は 0 です。 - bias_unsigned
- すべてのバイアスに対して符号なし整数量子化を使用するかを指定する
bool
オブジェクト。これは通常、bias_symmetry = FALSE の場合に使用されます。デフォルト値はFalse
です。 - activation_bit
- すべてのアクティベーションのビット幅を指定する
int
オブジェクト。デフォルト値は 8 です。 - activation_method
- すべてのアクティベーションの量子化におけるスケール係数の計算方法を指定する
int
オブジェクト。オプションは、0 (Non_Overflow
)、1 (Min_MSE
)、2 (Min_KL
)、3 (Percentile
) です。デフォルト値は 1 です。 - activation_symmetry
- すべてのアクティベーションに対して対称量子化を実行するか非対称量子化を実行するかを指定する
bool
オブジェクト。デフォルト値はTrue
です。 - activation_per_channel
- すべてのアクティベーションに対してチャネルごとの量子化を実行するかテンソルごとの量子化を実行するかを指定する
bool
オブジェクト。デフォルト値はFalse
です。 - activation_round_mode
- すべてのアクティベーションの量子化に使用する丸めモードを指定する
int
オブジェクト。オプションは、0 (HALF_TO_EVEN
)、1 (HALF_UP
)、2 (HALF_AWAY_FROM_ZERO
) です。デフォルト値は 1 です。 - activation_unsigned
- すべてのアクティベーションに対して符号なし整数量子化を使用するかを指定する
bool
オブジェクト。これは通常、activation_symmetry = TRUE の場合に非負値アクティベーション (ReLU や ReLU6 など) に使用されます。デフォルト値はFalse
です。