2from typing
import Dict, List, Optional
3from typeguard
import typechecked
16 @brief Configuration for calibration during quantization.
18 @details Defines calibration and quantization parameterization used to derive activation/weight scales and related
19 statistics during quantized compilation.
23 method_list = [
"WChALayer",
"WChAMulti",
"WChALayerZeropoint",
"WChAMultiZeropoint"]
24 output_list = [
"Layer",
"Ch",
"Sigmoid"]
25 mode_list = [
"max",
"maxPercentile",
"histogram"]
26 search_type_list = [
"percentile",
"mse",
"kl"]
29 "quantization_method": 1,
30 "quantization_output": 0,
31 "quantization_mode": 1,
38 "hist_percentile": 0.9999,
40 "hist_num_bins": 2048,
41 "hist_num_samples": 1024,
42 "hist_buffer_size": 1024,
43 "hist_min_bin_width": 0.0001,
44 "hist_search_percentile_min": 0.9999,
45 "hist_search_percentile_max": 0.999999,
46 "hist_num_search": 1024,
47 "hist_search_type": 0,
49 "act_scale_min": 0.0005,
50 "weight_scale_min": 1e-6,
52 "layer_overrides": {
"actScaleMin": {
"0.0005": []}},
56 "quantization_method":
"method",
57 "quantization_output":
"output",
58 "quantization_mode":
"mode",
60 "percentile":
"percentile",
61 "topk_ratio":
"topKRatio",
62 "max_each":
"maxEach",
63 "max_total":
"maxTotal",
65 "hist_percentile":
"percentile",
66 "hist_use_gpu":
"useGPU",
67 "hist_num_bins":
"numBins",
68 "hist_num_samples":
"numSamples",
69 "hist_buffer_size":
"bufferSize",
70 "hist_min_bin_width":
"minBinWidth",
71 "hist_search_percentile_min":
"searchPercentileMin",
72 "hist_search_percentile_max":
"searchPercentileMax",
73 "hist_num_search":
"numSearch",
74 "hist_search_type":
"searchType",
76 "act_scale_min":
"actScaleMin",
77 "weight_scale_min":
"weightScaleMin",
78 "min_clip_ratio":
"minclipRatio",
82 "quantization_method": [0, 3],
83 "quantization_output": [0, 2],
84 "quantization_mode": [0, 2],
88 "max_each": [0,
None],
89 "max_total": [0,
None],
91 "hist_percentile": [0, 1],
92 "hist_num_bins": [1,
None],
93 "hist_num_samples": [1,
None],
94 "hist_buffer_size": [1,
None],
95 "hist_min_bin_width": [0,
None],
96 "hist_search_percentile_min": [0, 1],
97 "hist_search_percentile_max": [0, 1],
98 "hist_num_search": [1,
None],
99 "hist_search_type": [0, 2],
101 "act_scale_min": [0, 1],
102 "weight_scale_min": [0, 1],
103 "min_clip_ratio": [-1, 1],
108 quantization_method: int,
109 quantization_output: int,
110 quantization_mode: int,
112 percentile: numbers.Number,
113 topk_ratio: numbers.Number,
117 hist_percentile: numbers.Number,
120 hist_num_samples: int,
121 hist_buffer_size: int,
122 hist_min_bin_width: numbers.Number,
123 hist_search_percentile_min: numbers.Number,
124 hist_search_percentile_max: numbers.Number,
125 hist_num_search: int,
126 hist_search_type: int,
128 act_scale_min: numbers.Number,
129 weight_scale_min: numbers.Number,
130 min_clip_ratio: numbers.Number,
131 layer_overrides: Dict,
132 optional: bool = optional,
135 @brief Initialize the CalibrationConfig.
137 @param quantization_method int. Calibration method index:<br>
138 0: WChALayer - Weight per-channel, Activation per-layer.<br>
139 1: WChAMulti - Weight per-channel, Activation multi-layer.<br>
140 2: WChALayerZeropoint - Weight per-channel, Activation per-layer with zeropoint.<br>
141 3: WChAMultiZeropoint - Weight per-channel, Activation multi-layer with zeropoint.<br>
142 @param quantization_output int. Output quantization type index:<br>
143 0: Layer - Per-layer quantization.<br>
144 1: Ch - Per-channel quantization.<br>
145 2: Sigmoid - Sigmoid-based quantization.<br>
146 @param quantization_mode int. Quantization mode index:<br>
148 1: maxPercentile.<br>
150 @param percentile float. Percentile value for maxPercentile mode.
151 @param topk_ratio float. Top-k ratio used in maxPercentile mode.
152 @param max_each int. Maximum number of samples processed per iteration (maxPercentile).
153 @param max_total int. Total maximum number of samples (maxPercentile).
154 @param hist_percentile float. Percentile for histogram mode (when searchType is percentile).
155 @param hist_use_gpu bool. Whether to use GPU for histogram computation.
156 @param hist_num_bins int. Number of histogram bins.
157 @param hist_num_samples int. Number of representative samples for metric computation.
158 @param hist_buffer_size int. Buffer size for batch histogram computation.
159 @param hist_min_bin_width float. Minimum bin width for histogram.
160 @param hist_search_percentile_min float. Minimum search percentile for MSE/KL search.
161 @param hist_search_percentile_max float. Maximum search percentile for MSE/KL search.
162 @param hist_num_search int. Number of search iterations for MSE/KL search.
163 @param hist_search_type int. Search type: 0=percentile, 1=mse, 2=kl.
164 @param act_scale_min float. Minimum allowed activation scale (lower bound clamp).
165 @param weight_scale_min float. Minimum allowed weight scale (lower bound clamp).
166 @param min_clip_ratio float. Minimum clip ratio constraint applied during calibration.
167 @param layer_overrides Dict. Layer-specific override settings.
168 @param optional bool. Indicates whether this config is optional.
195 self.check_valid(except_list=[
"optional",
"layer_overrides"])
198 def default_config(cls):
202 def from_kwargs(cls, **kwargs):
204 updated_kwargs = dict()
207 updated_kwargs[key] = kwargs[key]
208 params[key] = kwargs[key]
211 return cls(**params, optional=cls.
optional)
214 f
"Please review the configuration kwargs passed to {cls.__name__}. These kwargs were updated and will be used: {updated_kwargs}"
219 """Create CalibrationConfig from dictionary (JSON structure)"""
223 if "method" in config_dict:
224 params[
"quantization_method"] = config_dict[
"method"]
225 if "output" in config_dict:
226 params[
"quantization_output"] = config_dict[
"output"]
227 if "mode" in config_dict:
228 params[
"quantization_mode"] = config_dict[
"mode"]
231 if "maxPercentile" in config_dict:
232 mp = config_dict[
"maxPercentile"]
233 if "percentile" in mp:
234 params[
"percentile"] = mp[
"percentile"]
235 if "topKRatio" in mp:
236 params[
"topk_ratio"] = mp[
"topKRatio"]
238 params[
"max_each"] = mp[
"maxEach"]
240 params[
"max_total"] = mp[
"maxTotal"]
243 if "histogram" in config_dict:
244 h = config_dict[
"histogram"]
245 if "percentile" in h:
246 params[
"hist_percentile"] = h[
"percentile"]
248 params[
"hist_use_gpu"] = h[
"useGPU"]
250 params[
"hist_num_bins"] = h[
"numBins"]
251 if "numSamples" in h:
252 params[
"hist_num_samples"] = h[
"numSamples"]
253 if "bufferSize" in h:
254 params[
"hist_buffer_size"] = h[
"bufferSize"]
255 if "minBinWidth" in h:
256 params[
"hist_min_bin_width"] = h[
"minBinWidth"]
257 if "searchPercentileMin" in h:
258 params[
"hist_search_percentile_min"] = h[
"searchPercentileMin"]
259 if "searchPercentileMax" in h:
260 params[
"hist_search_percentile_max"] = h[
"searchPercentileMax"]
262 params[
"hist_num_search"] = h[
"numSearch"]
263 if "searchType" in h:
266 if isinstance(st, str):
269 params[
"hist_search_type"] = st
272 if "actScaleMin" in config_dict:
273 params[
"act_scale_min"] = config_dict[
"actScaleMin"]
274 if "weightScaleMin" in config_dict:
275 params[
"weight_scale_min"] = config_dict[
"weightScaleMin"]
276 if "minclipRatio" in config_dict:
277 params[
"min_clip_ratio"] = config_dict[
"minclipRatio"]
278 if "layerOverrides" in config_dict:
279 params[
"layer_overrides"] = config_dict[
"layerOverrides"]
318 @brief Configuration for bit precision.
319 @details Defines bit-width parameterization for activations and weights used in mixed-precision quantization (e.g., attention and FFN components).
328 "output_act_bits": 16,
331 "query_weight_bits": 8,
332 "key_weight_bits": 8,
333 "value_weight_bits": 8,
334 "output_weight_bits": 8,
335 "ffn_weight_bits": 8,
336 "head_weight_bits": 8,
337 "mixed_precision_apply":
False,
340 "activation_16bits": [],
345 "query_act_bits":
"queryActBits",
346 "key_act_bits":
"keyActBits",
347 "value_act_bits":
"valueActBits",
348 "output_act_bits":
"outputActBits",
349 "ffn_act_bits":
"ffnActBits",
350 "head_act_bits":
"headActBits",
351 "query_weight_bits":
"queryWeightBits",
352 "key_weight_bits":
"keyWeightBits",
353 "value_weight_bits":
"valueWeightBits",
354 "output_weight_bits":
"outputWeightBits",
355 "ffn_weight_bits":
"ffnWeightBits",
356 "head_weight_bits":
"headWeightBits",
357 "mixed_precision_apply":
"mixedPrecisionApply",
358 "save_path":
"savePath",
359 "load_path":
"loadPath",
364 "query_act_bits": [1,
None],
365 "key_act_bits": [1,
None],
366 "value_act_bits": [1,
None],
367 "output_act_bits": [1,
None],
368 "ffn_act_bits": [1,
None],
369 "head_act_bits": [1,
None],
370 "query_weight_bits": [1,
None],
371 "key_weight_bits": [1,
None],
372 "value_weight_bits": [1,
None],
373 "output_weight_bits": [1,
None],
374 "ffn_weight_bits": [1,
None],
375 "head_weight_bits": [1,
None],
383 output_act_bits: int,
386 query_weight_bits: int,
387 key_weight_bits: int,
388 value_weight_bits: int,
389 output_weight_bits: int,
390 ffn_weight_bits: int,
391 head_weight_bits: int,
392 mixed_precision_apply: bool,
395 activation_16bits: List[str],
396 weight_16bits: List[str],
397 optional: bool = optional,
400 @brief Initialize the BitConfig.
402 @param query_act_bits int. Query activation bit-width.
403 @param key_act_bits int. Key activation bit-width.
404 @param value_act_bits int. Value activation bit-width.
405 @param output_act_bits int. Output activation bit-width.
406 @param ffn_act_bits int. FFN activation bit-width.
407 @param head_act_bits int. Head activation bit-width.
408 @param query_weight_bits int. Query weight bit-width.
409 @param key_weight_bits int. Key weight bit-width.
410 @param value_weight_bits int. Value weight bit-width.
411 @param output_weight_bits int. Output weight bit-width.
412 @param ffn_weight_bits int. FFN weight bit-width.
413 @param head_weight_bits int. Head weight bit-width.
414 @param mixed_precision_apply bool. If true, apply mixed-precision according to the specified bit-widths.
415 @param save_path str. (optional) Path to save the bit allocation. If empty, the allocation is not saved.
416 @param load_path str. (optional) Path to load the bit allocation. If empty, allocation is not loaded.
417 @param activation_16bits List[str]. (optional) Layer names to force 16-bit activations.
418 @param weight_16bits List[str]. (optional) Layer names to force 16-bit weights.
438 self.check_valid(except_list=[
"optional",
"activation_16bits",
"weight_16bits"])
441 def default_config(cls):
445 def from_kwargs(cls, **kwargs):
447 updated_kwargs = dict()
450 updated_kwargs[key] = kwargs[key]
451 params[key] = kwargs[key]
454 return cls(**params, optional=cls.
optional)
457 f
"Please review the configuration kwargs passed to {cls.__name__}. These kwargs were updated and will be used: {updated_kwargs}"
462 """Create BitConfig from dictionary (JSON structure)"""
466 if "transformer" in config_dict:
467 transformer = config_dict[
"transformer"]
470 if "activation" in transformer:
471 activation = transformer[
"activation"]
472 if "query" in activation:
473 params[
"query_act_bits"] = activation[
"query"]
474 if "key" in activation:
475 params[
"key_act_bits"] = activation[
"key"]
476 if "value" in activation:
477 params[
"value_act_bits"] = activation[
"value"]
478 if "output" in activation:
479 params[
"output_act_bits"] = activation[
"output"]
480 if "ffn" in activation:
481 params[
"ffn_act_bits"] = activation[
"ffn"]
482 if "head" in activation:
483 params[
"head_act_bits"] = activation[
"head"]
486 if "weight" in transformer:
487 weight = transformer[
"weight"]
488 if "query" in weight:
489 params[
"query_weight_bits"] = weight[
"query"]
491 params[
"key_weight_bits"] = weight[
"key"]
492 if "value" in weight:
493 params[
"value_weight_bits"] = weight[
"value"]
494 if "output" in weight:
495 params[
"output_weight_bits"] = weight[
"output"]
497 params[
"ffn_weight_bits"] = weight[
"ffn"]
499 params[
"head_weight_bits"] = weight[
"head"]
502 if "mixedPrecision" in transformer:
503 mixed_precision = transformer[
"mixedPrecision"]
504 if "apply" in mixed_precision:
505 params[
"mixed_precision_apply"] = mixed_precision[
"apply"]
508 if "saveInfo" in config_dict:
509 save_info = config_dict[
"saveInfo"]
510 if "savePath" in save_info:
511 params[
"save_path"] = save_info[
"savePath"]
512 if "loadPath" in save_info:
513 params[
"load_path"] = save_info[
"loadPath"]
516 if "layerOverrides" in config_dict:
517 layer_overrides = config_dict[
"layerOverrides"]
518 if "activation16Bits" in layer_overrides:
519 params[
"activation_16bits"] = layer_overrides[
"activation16Bits"]
520 if "weight16Bits" in layer_overrides:
521 params[
"weight_16bits"] = layer_overrides[
"weight16Bits"]
551 "importanceThreshold_low": -1,
552 "importanceThreshold_high": -1,
568 @brief Unified quantization configuration.
570 @details Groups calibration and bit-precision configurations into a single configuration.
575 "calibration":
"calibration",
585 calibration: Optional[CalibrationConfig] =
None,
586 bit: Optional[BitConfig] =
None,
589 @brief Initialize the QuantizationConfig.
590 @param calibration CalibrationConfig. Calibration configuration.
591 @param bit BitConfig. Bit precision configuration.
594 self.
calibration = calibration
or CalibrationConfig.default_config()
595 self.
bit = bit
or BitConfig.default_config()
598 def default_config(cls):
600 calibration=CalibrationConfig.default_config(),
601 bit=BitConfig.default_config(),
606 def from_kwargs(cls, **kwargs):
608 calibration=CalibrationConfig.from_kwargs(**kwargs),
609 bit=BitConfig.from_kwargs(**kwargs),
614 def from_dict(cls, config_dict: dict):
615 calibration_dict = config_dict.get(
"calibration", {})
616 bit_dict = config_dict.get(
"bit", {})
619 calibration=CalibrationConfig.from_dict(calibration_dict),
620 bit=BitConfig.from_dict(bit_dict),
628 "bit": self.
bit.to_dict(),
635 @brief Create CalibrationConfig with partial parameters merged with defaults.
637 params = CalibrationConfig.DEFAULTS.copy()
638 params.update(kwargs)
644 @brief Create BitConfig with partial parameters merged with defaults.
646 params = BitConfig.DEFAULTS.copy()
647 params.update(kwargs)
648 return BitConfig(**params, optional=BitConfig.optional)
652 calibration: Optional[CalibrationConfig] =
None,
653 bit: Optional[BitConfig] =
None,
654) -> QuantizationConfig:
656 @brief Create QuantizationConfig with partial parameters merged with defaults.
659 calibration=calibration, bit=bit, optional=QuantizationConfig.optional
Configuration for bit precision.
Configuration for calibration during quantization.
Unified quantization configuration.
__init__(self, int query_act_bits, int key_act_bits, int value_act_bits, int output_act_bits, int ffn_act_bits, int head_act_bits, int query_weight_bits, int key_weight_bits, int value_weight_bits, int output_weight_bits, int ffn_weight_bits, int head_weight_bits, bool mixed_precision_apply, str save_path, str load_path, List[str] activation_16bits, List[str] weight_16bits, bool optional=optional)
Initialize the BitConfig.
CalibrationConfig get_calibration_config(**kwargs)
Create CalibrationConfig with partial parameters merged with defaults.
BitConfig get_bit_config(**kwargs)
Create BitConfig with partial parameters merged with defaults.
QuantizationConfig get_quantization_config(Optional[CalibrationConfig] calibration=None, Optional[BitConfig] bit=None)
Create QuantizationConfig with partial parameters merged with defaults.
hist_search_percentile_min
__init__(self, bool optional, Optional[CalibrationConfig] calibration=None, Optional[BitConfig] bit=None)
Initialize the QuantizationConfig.
from_dict(cls, dict config_dict)
Create CalibrationConfig from dictionary (JSON structure)
from_dict(cls, dict config_dict)
Create BitConfig from dictionary (JSON structure)
hist_search_percentile_max
__init__(self, int quantization_method, int quantization_output, int quantization_mode, numbers.Number percentile, numbers.Number topk_ratio, int max_each, int max_total, numbers.Number hist_percentile, bool hist_use_gpu, int hist_num_bins, int hist_num_samples, int hist_buffer_size, numbers.Number hist_min_bin_width, numbers.Number hist_search_percentile_min, numbers.Number hist_search_percentile_max, int hist_num_search, int hist_search_type, numbers.Number act_scale_min, numbers.Number weight_scale_min, numbers.Number min_clip_ratio, Dict layer_overrides, bool optional=optional)
Initialize the CalibrationConfig.