choose_qparams_affine¶
- torchao.quantization.choose_qparams_affine(input: Tensor, mapping_type: MappingType, block_size: Tuple[int, ...], target_dtype: dtype, quant_min: Optional[Union[int, float]] = None, quant_max: Optional[Union[int, float]] = None, eps: Optional[float] = None, scale_dtype: Optional[dtype] = None, zero_point_dtype: Optional[dtype] = None, preserve_zero: bool = True, zero_point_domain: ZeroPointDomain = ZeroPointDomain.INT) Tuple[Tensor, Tensor][source]¶
- 引數:
input (torch.Tensor) – fp32, bf16, fp16 輸入張量
mapping_type (MappingType) – 決定 qparams 的計算方式,對稱或非對稱
block_size – (Tuple[int, …]): 量化的粒度,表示共享相同 qparam 的張量元素大小,例如當大小與輸入張量維度相同時,我們使用的是逐張量量化
target_dtype (torch.dtype) – 目標量化張量的資料型別 (dtype)
quant_min (Optional[int]) – 目標量化張量的最小量化值
quant_max (Optioanl[int]) – 目標量化張量的最大量化值
eps (Optional[float]) – 最小比例因子 (scale),如果未提供,則預設為 input.dtype 的 eps 值
scale_dtype (torch.dtype) – 比例因子張量的資料型別 (dtype)
zero_point_dtype (torch.dtype) – 零點張量的資料型別 (dtype)
preserve_zero (bool) –
一個標誌,指示是否需要精確表示零點。這對於需要零填充的操作(如卷積)來說通常是必需的,而對於操作本身不帶零填充的操作(如線性層)則不太重要。
例如,給定浮點張量 [1.2, 0.1, 3.0, 4.0, 0.4, 0],如果 preserve_zero 為 True,我們將確保存在一個整數值對應於浮點數 0,例如 [-3, -8, 3, 7, -7, -8],0 將無損地對映到 -8。但如果 preserve_zero 不為 True,則無法保證這一點。
如果我們不需要精確表示零點,則不會對 zero_point 進行舍入和鉗位。
zero_point_domain (ZeroPointDomain) – zero_point 所屬的域,應為整數或浮點。如果 zero_point 在整數域中,量化時會將其加到量化整數值上;如果 zero_point 在浮點域中,量化時會從浮點數(未量化值)中減去它。預設值為 ZeroPointDomain.INT
- 輸出
按指定資料型別返回比例因子 (scale) 和零點 (zero_point) 張量的元組