快捷方式

量化 API 参考

torch.ao.quantization

此模块包含 Eager 模式量化 API。

顶级 API

quantize

使用训练后静态量化量化输入浮点模型。

quantize_dynamic

将浮点模型转换为动态(即。

quantize_qat

进行量化感知训练并输出量化模型

prepare

为量化校准或量化感知训练准备模型的副本。

prepare_qat

为量化校准或量化感知训练准备模型的副本,并将其转换为量化版本。

convert

根据 mapping 将输入模块中的子模块转换为不同的模块,方法是在目标模块类上调用 from_float 方法。

准备量化模型

fuse_modules.fuse_modules

将一组模块融合成单个模块。

QuantStub

量化存根模块,在校准之前,这与观察器相同,它将在 convert 中被交换为 nnq.Quantize

DeQuantStub

反量化存根模块,在校准之前,这与身份相同,它将在 convert 中被交换为 nnq.DeQuantize

QuantWrapper

一个包装器类,它包装输入模块,添加 QuantStub 和 DeQuantStub,并在对模块的调用周围使用对量化和反量化模块的调用。

add_quant_dequant

如果叶子子模块具有有效的 qconfig,则将其包装在 QuantWrapper 中。请注意,此函数将就地修改模块的子项,并且它也可以返回一个新的模块,该模块也包装输入模块。

实用函数

swap_module

如果模块具有量化的对应模块并且附加了 observer,则交换该模块。

propagate_qconfig_

通过模块层次结构传播 qconfig,并在每个叶子模块上分配 qconfig 属性

default_eval_fn

定义默认的评估函数。

torch.ao.quantization.quantize_fx

此模块包含 FX 图模式量化 API(原型)。

prepare_fx

为训练后量化准备模型

prepare_qat_fx

为量化感知训练准备模型

convert_fx

将经过校准或训练的模型转换为量化模型

fuse_fx

融合模块,如 conv+bn、conv+bn+relu 等,模型必须处于评估模式。

torch.ao.quantization.qconfig_mapping

此模块包含用于配置 FX 图模式量化的 QConfigMapping。

QConfigMapping

从模型操作到 torch.ao.quantization.QConfig 的映射。

get_default_qconfig_mapping

返回训练后量化的默认 QConfigMapping。

get_default_qat_qconfig_mapping

返回量化感知训练的默认 QConfigMapping。

torch.ao.quantization.backend_config

此模块包含 BackendConfig,一个配置对象,它定义了如何在后端支持量化。目前仅由 FX 图模式量化使用,但我们也可能会扩展 Eager 模式量化以支持它。

BackendConfig

配置,它定义了可以在给定后端上量化的模式集,以及如何从这些模式生成参考量化模型。

BackendPatternConfig

配置对象,它指定给定操作符模式的量化行为。

DTypeConfig

配置对象,它指定作为参数传递给参考模型规范中量化操作的支持数据类型,用于输入和输出激活、权重和偏差。

DTypeWithConstraints

配置,用于指定给定数据类型的额外约束,例如量化值范围、比例值范围和固定量化参数,将在 DTypeConfig 中使用。

ObservationType

一个枚举,它表示操作符/操作符模式应如何观察的不同方式

torch.ao.quantization.fx.custom_config

此模块包含一些在 Eager 模式和 FX 图模式量化中使用的 CustomConfig 类

FuseCustomConfig

用于 fuse_fx() 的自定义配置。

PrepareCustomConfig

用于 prepare_fx()prepare_qat_fx() 的自定义配置。

ConvertCustomConfig

用于 convert_fx() 的自定义配置。

StandaloneModuleConfigEntry

torch.ao.quantization.quantizer

torch.ao.quantization.pt2e (pytorch 2.0 版本导出中的量化实现)

torch.ao.quantization.pt2e.export_utils

model_is_exported

如果 torch.nn.Module 已导出则返回 True,否则返回 False(例如,

torch.ao.quantization.observer

此模块包含观察器,用于收集校准(PTQ)或训练(QAT)期间观察到的值的统计信息。

ObserverBase

基本观察器模块。

MinMaxObserver

用于基于运行的最小值和最大值计算量化参数的观察器模块。

MovingAverageMinMaxObserver

用于基于最小值和最大值的移动平均值计算量化参数的观察器模块。

PerChannelMinMaxObserver

用于基于运行的逐通道最小值和最大值计算量化参数的观察器模块。

MovingAveragePerChannelMinMaxObserver

用于基于运行的逐通道最小值和最大值计算量化参数的观察器模块。

HistogramObserver

该模块记录张量值的运行直方图,以及最小值/最大值。

PlaceholderObserver

不执行任何操作的观察器,只需将配置传递给量化模块的 .from_float()

RecordingObserver

该模块主要用于调试,并在运行时记录张量值。

NoopObserver

不执行任何操作的观察器,只需将配置传递给量化模块的 .from_float()

get_observer_state_dict

返回与观察器统计信息相对应的状态字典。

load_observer_state_dict

给定输入模型和包含模型观察器统计信息的状态字典,将统计信息加载回模型。

default_observer

静态量化的默认观察器,通常用于调试。

default_placeholder_observer

默认占位符观察器,通常用于量化为 torch.float16。

default_debug_observer

默认仅用于调试的观察器。

default_weight_observer

默认权重观察器。

default_histogram_observer

默认直方图观察器,通常用于 PTQ。

default_per_channel_weight_observer

默认逐通道权重观察器,通常在支持逐通道权重量化的后端使用,例如 fbgemm

default_dynamic_quant_observer

动态量化的默认观察器。

default_float_qparams_observer

浮点零点的默认观察器。

torch.ao.quantization.fake_quantize

此模块实现用于在 QAT 期间执行伪量化的模块。

FakeQuantizeBase

基本伪量化模块。

FakeQuantize

在训练时间模拟量化和反量化操作。

FixedQParamsFakeQuantize

在训练时间模拟量化和反量化。

FusedMovingAvgObsFakeQuantize

定义一个融合模块来观察张量。

default_fake_quant

激活的默认伪量化器。

default_weight_fake_quant

权重的默认伪量化器。

default_per_channel_weight_fake_quant

逐通道权重的默认伪量化器。

default_histogram_fake_quant

使用直方图的激活的伪量化器。

default_fused_act_fake_quant

default_fake_quant 的融合版本,性能更高。

default_fused_wt_fake_quant

default_weight_fake_quant 的融合版本,性能更高。

default_fused_per_channel_wt_fake_quant

default_per_channel_weight_fake_quant 的融合版本,性能更高。

disable_fake_quant

禁用模块的伪量化。

enable_fake_quant

启用模块的伪量化。

disable_observer

禁用此模块的观察。

enable_observer

启用此模块的观察。

torch.ao.quantization.qconfig

此模块定义 QConfig 对象,用于配置各个操作的量化设置。

QConfig

通过分别提供激活和权重的设置(观察器类)来描述如何量化层或网络的一部分。

default_qconfig

默认 qconfig 配置。

default_debug_qconfig

调试的默认 qconfig 配置。

default_per_channel_qconfig

逐通道权重量化的默认 qconfig 配置。

default_dynamic_qconfig

默认动态 qconfig。

float16_dynamic_qconfig

权重量化为 torch.float16 的动态 qconfig。

float16_static_qconfig

激活和权重都量化为 torch.float16 的动态 qconfig。

per_channel_dynamic_qconfig

权重逐通道量化的动态 qconfig。

float_qparams_weight_only_qconfig

使用浮点零点量化权重的动态 qconfig。

default_qat_qconfig

QAT 的默认 qconfig。

default_weight_only_qconfig

仅量化权重的默认 qconfig。

default_activation_only_qconfig

仅量化激活的默认 qconfig。

default_qat_qconfig_v2

default_qat_config 的融合版本,具有性能优势。

torch.ao.nn.intrinsic

此模块实现可以量化的组合(融合)模块 conv + relu。

ConvReLU1d

这是一个顺序容器,它调用 Conv1d 和 ReLU 模块。

ConvReLU2d

这是一个顺序容器,它调用 Conv2d 和 ReLU 模块。

ConvReLU3d

这是一个顺序容器,它调用 Conv3d 和 ReLU 模块。

LinearReLU

这是一个顺序容器,它调用 Linear 和 ReLU 模块。

ConvBn1d

这是一个顺序容器,它调用 Conv 1d 和 Batch Norm 1d 模块。

ConvBn2d

这是一个顺序容器,它调用 Conv 2d 和 Batch Norm 2d 模块。

ConvBn3d

这是一个顺序容器,它调用 Conv 3d 和 Batch Norm 3d 模块。

ConvBnReLU1d

这是一个顺序容器,它调用 Conv 1d、Batch Norm 1d 和 ReLU 模块。

ConvBnReLU2d

这是一个顺序容器,它调用 Conv 2d、Batch Norm 2d 和 ReLU 模块。

ConvBnReLU3d

这是一个顺序容器,它调用 Conv 3d、Batch Norm 3d 和 ReLU 模块。

BNReLU2d

这是一个顺序容器,它调用 BatchNorm 2d 和 ReLU 模块。

BNReLU3d

这是一个顺序容器,它调用 BatchNorm 3d 和 ReLU 模块。

torch.ao.nn.intrinsic.qat

此模块实现了用于量化感知训练的那些融合操作的版本。

LinearReLU

一个从 Linear 和 ReLU 模块融合而成的 LinearReLU 模块,附加了用于权重的 FakeQuantize 模块,用于量化感知训练。

ConvBn1d

ConvBn1d 模块是一个从 Conv1d 和 BatchNorm1d 融合而成的模块,附加了用于权重的 FakeQuantize 模块,用于量化感知训练。

ConvBnReLU1d

ConvBnReLU1d 模块是一个从 Conv1d、BatchNorm1d 和 ReLU 融合而成的模块,附加了用于权重的 FakeQuantize 模块,用于量化感知训练。

ConvBn2d

ConvBn2d 模块是一个从 Conv2d 和 BatchNorm2d 融合而成的模块,附加了用于权重的 FakeQuantize 模块,用于量化感知训练。

ConvBnReLU2d

ConvBnReLU2d 模块是一个从 Conv2d、BatchNorm2d 和 ReLU 融合而成的模块,附加了用于权重的 FakeQuantize 模块,用于量化感知训练。

ConvReLU2d

ConvReLU2d 模块是 Conv2d 和 ReLU 的融合模块,附加了用于权重的 FakeQuantize 模块,用于量化感知训练。

ConvBn3d

ConvBn3d 模块是一个从 Conv3d 和 BatchNorm3d 融合而成的模块,附加了用于权重的 FakeQuantize 模块,用于量化感知训练。

ConvBnReLU3d

ConvBnReLU3d 模块是一个从 Conv3d、BatchNorm3d 和 ReLU 融合而成的模块,附加了用于权重的 FakeQuantize 模块,用于量化感知训练。

ConvReLU3d

ConvReLU3d 模块是 Conv3d 和 ReLU 的融合模块,附加了用于权重的 FakeQuantize 模块,用于量化感知训练。

update_bn_stats

freeze_bn_stats

torch.ao.nn.intrinsic.quantized

此模块实现了融合操作(如 conv + relu)的量化实现。没有 BatchNorm 变体,因为它通常在推理中折叠到卷积中。

BNReLU2d

BNReLU2d 模块是 BatchNorm2d 和 ReLU 的融合模块

BNReLU3d

BNReLU3d 模块是 BatchNorm3d 和 ReLU 的融合模块

ConvReLU1d

ConvReLU1d 模块是 Conv1d 和 ReLU 的融合模块

ConvReLU2d

ConvReLU2d 模块是 Conv2d 和 ReLU 的融合模块

ConvReLU3d

ConvReLU3d 模块是 Conv3d 和 ReLU 的融合模块

LinearReLU

一个从 Linear 和 ReLU 模块融合而成的 LinearReLU 模块

torch.ao.nn.intrinsic.quantized.dynamic

此模块实现了融合操作(如 linear + relu)的量化动态实现。

LinearReLU

一个从 Linear 和 ReLU 模块融合而成的 LinearReLU 模块,可用于动态量化。

torch.ao.nn.qat

此模块实现了关键 nn 模块 **Conv2d()** 和 **Linear()** 的版本,这些版本在 FP32 中运行,但应用了舍入来模拟 INT8 量化的效果。

Conv2d

一个附加了用于权重的 FakeQuantize 模块的 Conv2d 模块,用于量化感知训练。

Conv3d

一个附加了用于权重的 FakeQuantize 模块的 Conv3d 模块,用于量化感知训练。

Linear

一个附加了用于权重的 FakeQuantize 模块的线性模块,用于量化感知训练。

torch.ao.nn.qat.dynamic

此模块实现了关键 nn 模块(如 **Linear()**)的版本,这些版本在 FP32 中运行,但应用了舍入来模拟 INT8 量化的效果,并且将在推理期间动态量化。

Linear

一个附加了用于权重的 FakeQuantize 模块的线性模块,用于动态量化感知训练。

torch.ao.nn.quantized

此模块实现了 nn 层的量化版本,例如 ~`torch.nn.Conv2d` 和 torch.nn.ReLU

ReLU6

应用逐元素函数

Hardswish

这是 Hardswish 的量化版本。

ELU

这是 ELU 的量化等效项。

LeakyReLU

这是 LeakyReLU 的量化等效项。

Sigmoid

这是 Sigmoid 的量化等效项。

BatchNorm2d

这是 BatchNorm2d 的量化版本。

BatchNorm3d

这是 BatchNorm3d 的量化版本。

Conv1d

对由多个量化输入平面组成的量化输入信号应用一维卷积。

Conv2d

对由多个量化输入平面组成的量化输入信号应用二维卷积。

Conv3d

对由多个量化输入平面组成的量化输入信号应用三维卷积。

ConvTranspose1d

对由多个输入平面组成的输入图像应用一维转置卷积运算符。

ConvTranspose2d

对由多个输入平面组成的输入图像应用二维转置卷积运算符。

ConvTranspose3d

对由多个输入平面组成的输入图像应用三维转置卷积运算符。

Embedding

一个量化 Embedding 模块,以量化打包权重作为输入。

EmbeddingBag

一个量化 EmbeddingBag 模块,以量化打包权重作为输入。

FloatFunctional

浮点操作的状态收集器类。

FXFloatFunctional

在 FX 图模式量化之前替换 FloatFunctional 模块的模块,因为 activation_post_process 将直接插入到顶层模块中

QFunctional

量化操作的包装类。

Linear

一个量化线性模块,以量化张量作为输入和输出。

LayerNorm

这是 LayerNorm 的量化版本。

GroupNorm

这是 GroupNorm 的量化版本。

InstanceNorm1d

这是 InstanceNorm1d 的量化版本。

InstanceNorm2d

这是 InstanceNorm2d 的量化版本。

InstanceNorm3d

这是 InstanceNorm3d 的量化版本。

torch.ao.nn.quantized.functional

函数式接口(量化)。

此模块实现了函数式层的量化版本,例如 ~`torch.nn.functional.conv2d` 和 torch.nn.functional.relu。注意:relu() 支持量化输入。

avg_pool2d

kH×kWkH \times kW 区域应用二维平均池化操作,步长为 sH×sWsH \times sW 步。

avg_pool3d

kD timeskH×kWkD \ times kH \times kW 区域应用三维平均池化操作,步长为 sD×sH×sWsD \times sH \times sW 步。

adaptive_avg_pool2d

对由多个量化输入平面组成的量化输入信号应用二维自适应平均池化。

adaptive_avg_pool3d

对由多个量化输入平面组成的量化输入信号应用三维自适应平均池化。

conv1d

对由多个输入平面组成的量化一维输入应用一维卷积。

conv2d

对由多个输入平面组成的量化二维输入应用二维卷积。

conv3d

对由多个输入平面组成的量化 3D 输入进行 3D 卷积。

插值

将输入向下/向上采样到给定的 size 或给定的 scale_factor

线性

对传入的量化数据应用线性变换: y=xAT+by = xA^T + b.

max_pool1d

对由多个量化输入平面组成的量化输入信号进行 1D 最大池化。

max_pool2d

对由多个量化输入平面组成的量化输入信号进行 2D 最大池化。

celu

逐元素应用量化 CELU 函数。

leaky_relu

量化版本。

hardtanh

这是 hardtanh() 的量化版本。

hardswish

这是 hardswish() 的量化版本。

threshold

逐元素应用量化版本的阈值函数。

elu

这是 elu() 的量化版本。

hardsigmoid

这是 hardsigmoid() 的量化版本。

clamp

float(input, min_, max_) -> Tensor

upsample

将输入向上采样到给定的 size 或给定的 scale_factor

upsample_bilinear

使用双线性上采样对输入进行上采样。

upsample_nearest

使用最近邻像素值对输入进行上采样。

torch.ao.nn.quantizable

此模块实现了某些 nn 层的可量化版本。这些模块可与自定义模块机制一起使用,方法是向 prepare 和 convert 都提供 custom_module_config 参数。

LSTM

一个可量化的长短期记忆 (LSTM)。

MultiheadAttention

torch.ao.nn.quantized.dynamic

动态量化 LinearLSTMLSTMCellGRUCellRNNCell.

Linear

具有浮点张量作为输入和输出的动态量化线性模块。

LSTM

具有浮点张量作为输入和输出的动态量化 LSTM 模块。

GRU

对输入序列应用多层门控循环单元 (GRU) RNN。

RNNCell

具有 tanh 或 ReLU 非线性的 Elman RNN 单元。

LSTMCell

一个长短期记忆 (LSTM) 单元。

GRUCell

一个门控循环单元 (GRU) 单元

量化数据类型和量化方案

请注意,运算符实现当前仅支持对 **conv** 和 **linear** 运算符的权重的按通道量化。此外,输入数据将线性映射到量化数据,反之亦然,如下所示

Quantization:Qout=clamp(xinput/s+z,Qmin,Qmax)Dequantization:xout=(Qinputz)s\begin{aligned} \text{Quantization:}&\\ &Q_\text{out} = \text{clamp}(x_\text{input}/s+z, Q_\text{min}, Q_\text{max})\\ \text{Dequantization:}&\\ &x_\text{out} = (Q_\text{input}-z)*s \end{aligned}

其中 clamp(.)\text{clamp}(.)clamp() 相同,而比例因子 ss 和零点 zz 则按 MinMaxObserver 中所述进行计算,具体来说

如果对称:s=2max(xmin,xmax)/(QmaxQmin)z={0如果 dtype 是 qint8128否则否则:s=(xmaxxmin)/(QmaxQmin)z=Qminround(xmin/s)\begin{aligned} \text{如果对称:}&\\ &s = 2 \max(|x_\text{min}|, x_\text{max}) / \left( Q_\text{max} - Q_\text{min} \right) \\ &z = \begin{cases} 0 & \text{如果 dtype 是 qint8} \\ 128 & \text{否则} \end{cases}\\ \text{否则:}&\\ &s = \left( x_\text{max} - x_\text{min} \right ) / \left( Q_\text{max} - Q_\text{min} \right ) \\ &z = Q_\text{min} - \text{round}(x_\text{min} / s) \end{aligned}

其中 [xmin,xmax][x_\text{min}, x_\text{max}] 表示输入数据的范围,而 QminQ_\text{min}QmaxQ_\text{max} 分别是量化数据类型 的最小值和最大值。

请注意,选择 sszz 意味着只要零在输入数据的范围内或使用对称量化,零就用没有量化误差的方式表示。

可以通过 自定义操作机制 来实现其他数据类型和量化方案。

  • torch.qscheme - 用于描述张量量化方案的类型。支持的类型

    • torch.per_tensor_affine - 每张量,不对称

    • torch.per_channel_affine - 每通道,不对称

    • torch.per_tensor_symmetric - 每张量,对称

    • torch.per_channel_symmetric - 每通道,对称

  • torch.dtype - 用于描述数据的类型。支持的类型

    • torch.quint8 - 8 位无符号整数

    • torch.qint8 - 8 位有符号整数

    • torch.qint32 - 32 位有符号整数

QAT 模块。

此包正在被弃用。请使用 torch.ao.nn.qat.modules 代替。

QAT 动态模块。

此包正在被弃用。请使用 torch.ao.nn.qat.dynamic 代替。

此文件正在迁移到 torch/ao/quantization,并且为了兼容性而保留在此处,直到迁移过程完成。如果您要添加新的条目/功能,请将其添加到 torch/ao/quantization/fx/ 下的相应文件中,同时在此处添加导入语句。

QAT 动态模块。

此包正在被弃用。请使用 torch.ao.nn.qat.dynamic 代替。

量化模块。

注意:

torch.nn.quantized 命名空间正在被弃用。请使用 torch.ao.nn.quantized 代替。

量化动态模块。

此文件正在迁移到 torch/ao/nn/quantized/dynamic,并且为了兼容性而保留在此处,直到迁移过程完成。如果您要添加新的条目/功能,请将其添加到 torch/ao/nn/quantized/dynamic 下的相应文件中,同时在此处添加导入语句。

文档

访问 PyTorch 的全面开发者文档

查看文档

教程

获取面向初学者和高级开发者的深度教程

查看教程

资源

查找开发资源并获得问题的答案

查看资源