この関数は、浮動小数点モデルに対してトレーニング後の量子化 (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
- カスタム レイヤーの形状推論情報を追加するかどうかを指定する
bool
オブジェクト。カスタム レイヤーを使用したモデルの場合、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
オブジェクト。 - 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 に設定されます。 - 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 に設定されます。 - 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 に設定されます。 - 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 に設定されます。