Simplified Quantization Configuration File

To automatically control the quantization process, for example, to control which layers are quantized and which quantization algorithm is used, you can use the .cfg configuration file.

Configuration File Parameters

The following tables describe the messages supported by the configuration file and the corresponding parameters.

  • AMCTConfig: simplified PTQ configuration of AMCT.

    Required

    Type

    Field

    Description

    Optional

    bool

    activation_offset

    Whether to quantize activations with offset. It is a global configuration parameter.

    • With offset (default): Activations are asymmetrically quantized.
    • Without offset: Activations are symmetrically quantized.

    Optional

    bool

    joint_quant

    Eltwise joint quantization switch. Defaults to false, indicating that joint quantization is disabled.

    If true, the network performance may improve but the precision may be compromised.

    Repeated

    string

    skip_layers

    Layers to skip quantization.

    Repeated

    string

    skip_layer_types

    Types of layers to skip quantization.

    Optional

    int32

    version

    Version of the simplified configuration file.

    Optional

    CalibrationConfig

    common_config

    Common quantization configuration, which is a global parameter. Use this configuration if a layer is not overridden by override_layer_types or override_layer_configs.

    Parameter priority: override_layer_configs > override_layer_types > common_config

    Repeated

    OverrideLayerType

    override_layer_types

    Certain types of layers to override the quantization configurations. It is used to determine which layers are to be differentiatedly quantized.

    By using this parameter, you can perform differentiated quantization on some layers to change the quantization factor search step from 0.01 to 0.02.

    Parameter priority: override_layer_configs > override_layer_types > common_config

    Repeated

    OverrideLayer

    override_layer_configs

    Layer to override the quantization configurations. It is used to determine which layers are to be differentiatedly quantized.

    By using this parameter, you can perform differentiated quantization on some layers to change the quantization factor search step from 0.01 to 0.02.

    Parameter priority: override_layer_configs > override_layer_types > common_config

    Optional

    bool

    do_fusion

    BN fusion switch. Defaults to true, indicating BN fusion enabled.

    Repeated

    string

    skip_fusion_layers

    Layers to skip BN fusion.

    Repeated

    TensorQuantize

    tensor_quantize

    Whether to perform PTQ on the input tensors of the specified node in the network model to improve data movement efficiency in inference.

    Currently, tensor quantization can be performed only on the MaxPool/Add/Eltwise operator.

  • OverrideLayerType: quantizable layer type.

    Required

    Type

    Field

    Description

    Required

    string

    layer_type

    Quantizable layer type.

    Required

    CalibrationConfig

    calibration_config

    Quantization configuration to apply.

  • OverrideLayer: quantization configuration overriding by layer.

    Required

    Type

    Field

    Description

    Required

    string

    layer_name

    Layer to override.

    Required

    CalibrationConfig

    calibration_config

    Quantization configuration to apply.

  • CalibrationConfig: Calibration-based quantization configuration.

    Required

    Type

    Field

    Description

    -

    ARQuantize

    arq_quantize

    Weight quantization algorithm.

    arq_quantize: ARQ algorithm configuration.

    -

    FMRQuantize

    ifmr_quantize

    Activation quantization algorithm.

    ifmr_quantize: IFMR algorithm configuration.

    Optional

    bool

    weight_compress_only

    Weight quantization only. The data type must be float32 or float16.

    • true: weight quantization only.
    • false: weight and activation quantization. Default value: false
  • ARQuantize: ARQ algorithm for weight quantization.

    Required

    Type

    Field

    Description

    Optional

    bool

    channel_wise

    Whether to use different quantization factors for each channel.

    • true: Channels are separately quantized using different quantization factors.
    • false: All channels are quantized altogether using the same quantization factors.

    Optional

    bool

    asymmetric

    Asymmetric weight quantization. It is used to select the layer-wise quantization algorithm.

    This parameter is valid only when weight_compress_only is set to true. If weight_compress_only is set to false, asymmetric can only be set to false.

    • true: Asymmetric weight quantization is used (offset is not 0).
    • false: Symmetric weight quantization is used (offset is 0). The default value is false.

    If this parameter is set for override_layer_configs, override_layer_types, and common_config, the priority is as follows:

    override_layer_configs > override_layer_types > common_config

    Optional

    uint32

    quant_bits

    Weight quantization bit width. The value can be INT6, INT7, or INT8. INT8 quantization is used by default.

    This field can be set to INT6 or INT7 only for Conv2d operators.

    If quant_bits is set to INT6 or INT7 in common_config, the setting takes effect only for Conv2d operators. For other operators, the default value INT8 is used.

    For the ONNX network model, if quant_bits of the Conv operator is set to INT6 or INT7 in override_layer_types, the setting takes effect only when weight dim is 4.

  • FMRQuantize: FMR algorithm for activation quantization.

    Required

    Type

    Field

    Description

    Optional

    float

    search_range_start

    Quantization factor search start.

    Optional

    float

    search_range_end

    Quantization factor search end.

    Optional

    float

    search_step

    Quantization factor search step.

    Optional

    float

    max_percentile

    Upper bound for searching for the largest.

    Optional

    float

    min_percentile

    Lower bound for searching for the smallest.

    Optional

    bool

    asymmetric

    Asymmetric activation quantization. It is used to select the layer-wise quantization algorithm.

    • true: asymmetric quantization
    • false: symmetric quantization

    If this parameter is set for override_layer_configs, override_layer_types, and common_config, or

    if the activation_offset parameter is set, the priority is as follows:

    override_layer_configs > override_layer_types > common_config > activation_offset

    Optional

    CalibrationDataType

    dst_type

    Quantization bit width for activation quantization, either INT8 (default) or INT16 quantization.

    Currently, only INT8 quantization is supported.

  • TensorQuantize: configuration for input tensors to be post-training quantized.

    Required

    Type

    Field

    Description

    Required

    string

    layer_name

    Name of the node where input tensors need to be post-training quantized. Currently, only the MaxPool operator is supported.

    Required

    uint32

    input_index

    Input index of the node where input tensors need to be post-training quantized.

    -

    FMRQuantize

    ifmr_quantize

    Activation quantization algorithm.

    ifmr_quantize: IFMR algorithm configuration. The IFMR quantization algorithm is used by default.

Configuration Example

  • The following is an example of the simplified configuration file (quant.cfg) for uniform quantization. Set Optype to an Ascend IR–defined operator type. For details about the mapping, see Layers That Support Quantization and Restrictions.
    # global quantize parameter
    activation_offset : true
    joint_quant : false
    enable_auto_nuq : false
    version : 1
    skip_layers : "Optype"
    skip_layer_types: "Optype"
    do_fusion: true
    skip_fusion_layers : "Optype"
    common_config : {
        arq_quantize : {
            channel_wise : true
            quant_bits : 7
    
        }
        ifmr_quantize : {
            search_range_start : 0.7
            search_range_end : 1.3
            search_step : 0.01
            max_percentile : 0.999999
            min_percentile : 0.999999
            asymmetric : true
        }
    }
     
    override_layer_types : {
        layer_type : "Optype"
        calibration_config : {
            arq_quantize : {
                channel_wise : false
            }
            ifmr_quantize : {
                search_range_start : 0.8
                search_range_end : 1.2
                search_step : 0.02
                max_percentile : 0.999999
                min_percentile : 0.999999
                asymmetric : false
            }
        }
    }
     
    override_layer_configs : {
        layer_name : "Opname"
        calibration_config : {
            arq_quantize : {
                channel_wise : true
            }
            ifmr_quantize : {
                search_range_start : 0.8
                search_range_end : 1.2
                search_step : 0.02
                max_percentile : 0.999999
                min_percentile : 0.999999
                asymmetric : false
            }
        }
    }
    tensor_quantize {
        layer_name: "Opname"
        input_index: 0
        ifmr_quantize: {
            search_range_start : 0.7
            search_range_end : 1.3
            search_step : 0.01
            min_percentile : 0.999999
            asymmetric : false
           }
    }
    tensor_quantize {
        layer_name: "Opname"
        input_index: 0
    }
  • The following is an example of the simplified configuration file (quant.cfg) for weight-only quantization:
    activation_offset : true
    joint_quant : false
    version : 1
    do_fusion: true
    common_config : {
       weight_compress_only : true
        arq_quantize : {
            channel_wise : true
            asymmetric : false
                
        }
    }
     
    override_layer_types : {
        layer_type : "Optype"
        calibration_config : {
            weight_compress_only : true
            arq_quantize : {
                channel_wise : true
                asymmetric : true
                quant_bits : 6
            }
        }
    }
     
    override_layer_configs : {
        layer_name : "Opname"
        calibration_config : {
            weight_compress_only : true
            arq_quantize : {
                channel_wise : true
                asymmetric : true
            }
        }
    }