快捷方式

QATConfig

class torchao.quantization.qat.QATConfig(base_config: Optional[AOBaseConfig] = None, activation_config: Optional[FakeQuantizeConfigBase] = None, weight_config: Optional[FakeQuantizeConfigBase] = None, *, step: QATStep = 'prepare')[源码]

用于将量化感知训练 (QAT) 应用于 torch.nn.Module 的配置,与 quantize_() 一起使用。

此配置有两个步骤:“prepare”(准备)和“convert”(转换)。prepare 步骤将“伪”量化应用到模型,应在训练前应用,而 convert 步骤将模型转换为实际的量化模型。这里的伪量化是指使用高精度算术(例如 bf16)来模拟量化数值(例如 int4),目的是减少量化带来的最终退化。

有两种使用此配置的方法。第一种方法是传递一个基础的训练后量化 (PTQ) 配置,我们将使用它来自动推断在 prepare 阶段使用的相应伪量化方案。在 convert 阶段,我们将把基础 PTQ 配置应用到模型。这将是最常见的用例。

使用示例

from torchao.quantization import (
    quantize_,
    Int8DynamicActivationInt4WeightConfig,
)
from torchao.quantization.qat import QATConfig

base_config = Int8DynamicActivationInt4WeightConfig(group_size=32)
quantize_(model, QATConfig(base_config, step="prepare"))
train_loop(model)
quantize_(model, QATConfig(base_config, step="convert"))

目前仅支持以下作为基础配置

第二种使用此配置的方法是通过直接指定伪量化方案。用户将为权重和/或激活传递 FakeQuantizeConfigBase,而不是基础 PTQ 配置。此用例主要用于实验,例如,当相应的 PTQ 配置尚不存在时。

使用示例

from torchao.quantization import quantize_
from torchao.quantization.qat import IntxFakeQuantizeConfig

activation_config = IntxFakeQuantizeConfig(
    torch.int8, "per_token", is_symmetric=False,
)
weight_config = IntxFakeQuantizeConfig(
    torch.int4, group_size=32, is_symmetric=True,
)
qat_config = QATConfig(
    # must specify one of `base_config` or `weight_config`
    activation_config=act_config,
    weight_config=weight_config,
    step="prepare",
)
quantize_(model, qat_config)
参数:
  • base_config (Optional[AOBaseConfig]) – 基础 PTQ 配置,用于在 prepare 阶段推断伪量化配置,并在 convert 阶段直接应用。

  • activation_config (Optional[FakeQuantizeConfigBase]) – 输入激活的自定义伪量化配置,始终是可选的。如果使用了 base_config,则必须为 None。

  • weight_config (Optional[FakeQuantizeConfigBase]) – 权重的自定义伪量化配置。如果使用了 base_config,则必须为 None。

关键字参数:

step (str) – “prepare”或“convert”之一,决定 QAT 阶段

抛出:
  • ValueError – 如果同时指定了 base_configactivation_config

  • ValueError – 如果同时指定了 base_configweight_config

  • ValueError – 如果没有指定 base_configactivation_configweight_config 中的任何一个

  • ValueError – 如果指定了 activation_configweight_config 中的任何一个,并且 step 是“convert”

  • ValueError – 如果 step 不是“prepare”或“convert”之一

  • ValueError – 如果配置应用于的模块不是 torch.nn.Lineartorch.nn.Embedding,或者应用于 torch.nn.Embedding 并带激活配置

文档

访问全面的 PyTorch 开发者文档

查看文档

教程

为初学者和高级开发者提供深入的教程

查看教程

资源

查找开发资源并让您的问题得到解答

查看资源