FakeQuantizeConfig¶
- class torchao.quantization.qat.FakeQuantizeConfig(dtype: Union[dtype, TorchAODType], granularity: Optional[Union[Granularity, str]] = None, mapping_type: Optional[MappingType] = None, scale_precision: dtype = torch.float32, zero_point_precision: dtype = torch.int32, zero_point_domain: ZeroPointDomain = ZeroPointDomain.INT, is_dynamic: bool = True, range_learning: bool = False, eps: Optional[float] = None, *, group_size: Optional[int] = None, is_symmetric: Optional[bool] = None)[源代码]¶
用于伪量化权重或激活的配置。
- 参数:
dtype – 伪量化期间模拟的 dtype,例如 torch.int8。对于 PyTorch 版本早于 2.6 的版本,您可以使用 TorchAODType 来表示 torch.int1 到 torch.int7,例如 TorchAODType.INT4。
granularity –
缩放因子和零点的粒度,例如 PerGroup(32)。我们也支持以下字符串
’per_token’: 等同于 PerToken()
’per_channel’: 等同于 PerAxis(0)
- ’per_group’: 等同于 PerGroup(group_size),必须与单独的 group_size 关键字参数组合使用
或者,只需设置 group_size 关键字参数,并将此字段留空。
mapping_type – 是否使用对称(默认)或非对称量化。或者,设置 is_symmetric(布尔值)并将此字段留空。
scale_precision – 缩放因子 dtype(默认 torch.fp32)
zero_point_precision – 零点 dtype(默认 torch.int32)
zero_point_domain – 零点是在整数(默认)还是浮点域中
is_dynamic – 是否使用动态(默认)或静态缩放因子和零点
range_learning (prototype) – 在训练期间是否学习缩放因子和零点(默认 false),与 is_dynamic 不兼容。
- kwargs (可选)
- group_size: 每组伪量化中的组大小,
可以代替 granularity 设置
- is_symmetric: 是否使用对称或非对称量化,
可以代替 mapping_type 设置
使用示例
# Per token asymmetric quantization FakeQuantizeConfig(torch.int8, "per_token", is_symmetric=False) FakeQuantizeConfig(torch.int8, PerToken(), MappingType.ASYMMETRIC) # Per channel symmetric quantization FakeQuantizeConfig(torch.int4, "per_channel") FakeQuantizeConfig(torch.int4, "per_channel", is_symmetric=True) FakeQuantizeConfig(torch.int4, PerAxis(0), MappingType.SYMMETRIC) # Per group symmetric quantization FakeQuantizeConfig(torch.int4, group_size=32) FakeQuantizeConfig(torch.int4, group_size=32, is_symmetric=True) FakeQuantizeConfig(torch.int4, "per_group", group_size=32, is_symmetric=True) FakeQuantizeConfig(torch.int4, PerGroup(32), MappingType.SYMMETRIC)