vitis_quantize.VitisQuantizer.quantize_model - 3.5 日本語

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

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

この関数は、浮動小数点モデルのトレーニング後の量子化 (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.Datasetkeras.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 という名前です。
スタンドアロンの BatchNormalization レイヤーを DepthwiseConv2D レイヤーに変換するかどうかを指定する bool オブジェクト。
convert_sigmoid_to_hard_sigmoid
Vitis AI 2.0 およびそれ以前のバージョンでは replace_sigmoid という名前です。
Activation(activation='sigmoid') レイヤーと Sigmoid レイヤーを hard-sigmoid レイヤーに置き換えて量子化を実行するかどうかを指定する bool オブジェクト。FALSE の場合、sigmoid レイヤーは量子化されず、CPU にスケジューリングされます。
convert_relu_to_relu6
Vitis AI 2.0 およびそれ以前のバージョンでは replace_relu6 という名前です。
ReLU6 レイヤーを ReLU レイヤーに置き換えるかどうかを指定する bool オブジェクト。
include_cle
量子化の前にクロス レイヤー イコライゼーションを実装するかどうかを指定する bool オブジェクト。
cle_steps
クロス レイヤー イコライゼーションの反復回数を指定する int オブジェクト。
cle_to_relu6
Vitis AI 2.0 およびそれ以前のバージョンでは forced_cle という名前です。
ReLU6 レイヤーに対してクロス レイヤー イコライゼーションを強制的に実行するかどうかを指定する bool オブジェクト。
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 です。