IntxFakeQuantizeConfig¶
- class torchao.quantization.qat.IntxFakeQuantizeConfig(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)[原始碼]¶
用於偽量化權重或啟用的配置,目標是高達 torch.int8 的整數資料型別。
- 引數:
dtype – 偽量化期間模擬的資料型別,例如 torch.int8。對於早於 2.6 的 PyTorch 版本,您可以使用 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 關鍵字引數結合使用,或者,只需設定 group_size 關鍵字引數,並將此欄位留空。
mapping_type – 是否使用對稱(預設)或非對稱量化。或者,設定 is_symmetric (bool) 並將此欄位留空。
scale_precision – 比例資料型別(預設為 torch.fp32)
zero_point_precision – 零點資料型別(預設為 torch.int32)
zero_point_domain – 零點是整數(預設)還是浮點域
is_dynamic – 是否使用動態(預設)或靜態比例和零點
range_learning (prototype) – 是否在訓練期間學習比例和零點(預設 false),與 is_dynamic 不相容。
- 關鍵字引數:
group_size – 每個組在每組偽量化中的大小,可以代替 granularity 設定
is_symmetric – 是否使用對稱或非對稱量化,可以代替 mapping_type 設定
使用示例
# Per token asymmetric quantization IntxFakeQuantizeConfig(torch.int8, "per_token", is_symmetric=False) IntxFakeQuantizeConfig(torch.int8, PerToken(), MappingType.ASYMMETRIC) # Per channel symmetric quantization IntxFakeQuantizeConfig(torch.int4, "per_channel") IntxFakeQuantizeConfig(torch.int4, "per_channel", is_symmetric=True) IntxFakeQuantizeConfig(torch.int4, PerAxis(0), MappingType.SYMMETRIC) # Per group symmetric quantization IntxFakeQuantizeConfig(torch.int4, group_size=32) IntxFakeQuantizeConfig(torch.int4, group_size=32, is_symmetric=True) IntxFakeQuantizeConfig(torch.int4, "per_group", group_size=32, is_symmetric=True) IntxFakeQuantizeConfig(torch.int4, PerGroup(32), MappingType.SYMMETRIC)