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) 张量的元组