• 文档 >
  • 量化 >
  • 量化 API 参考
快捷键

量化 API 参考 ¶

torch.ao.quantization

此模块包含急切模式的量化 API。

顶级 API

quantize

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

quantize_dynamic

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

quantize_qat

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

prepare

准备模型副本以进行量化校准或量化感知训练。

prepare_qat

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

convert

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

准备模型进行量化

fuse_modules.fuse_modules

将一系列模块融合成一个单一模块。

QuantStub

对占位模块进行量化,在校准之前,这等同于观察者,将在转换时替换为 nnq.Quantize。

DeQuantStub

对占位模块进行去量化,在校准之前,这等同于恒等变换,这将在转换时替换为 nnq.DeQuantize。

QuantWrapper

一个包装类,用于包装输入模块,添加 QuantStub 和 DeQuantStub,并在调用模块时围绕调用量化模块和去量化模块。

add_quant_dequant

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

工具函数 §

swap_module

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

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 s。

get_default_qconfig_mapping

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

get_default_qat_qconfig_mapping

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

torch.ao.quantization.backend_config

此模块包含 BackendConfig,一个配置对象,用于定义后端如何支持量化。目前仅用于 FX Graph Mode 量化,但我们也可能将其扩展到 Eager Mode 量化以与之兼容。

BackendConfig

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

BackendPatternConfig

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

DTypeConfig

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

DTypeWithConstraints

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

ObservationType

表示操作/操作模式应如何观察的不同方式的枚举。

torch.ao.quantization.fx.custom_config

本模块包含一些用于急切模式和 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(例如

PT2 导出(pt2e)数值调试器 ¶

generate_numeric_debug_handle

为给定 ExportedProgram 的图模块中的所有节点附加 numeric_debug_handle_id,如 conv2d、squeeze、conv1d 等,除了占位符。

CUSTOM_KEY

str(object='') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str

NUMERIC_DEBUG_HANDLE_KEY

str(object='') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str

prepare_for_propagation_comparison

将输出日志记录器添加到具有数字调试句柄的节点

extract_results_from_loggers

对于给定的模型,提取每个调试句柄的张量统计信息和相关数据

compare_results

给定两个从 debug_handle_id(整数)到张量列表的字典映射,返回一个从 debug_handle_id 到包含比较信息(如 SQNR、MSE 等)的 NodeAccuracySummary 的映射

torch.ao.quantization.observer

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

ObserverBase

基础观察器模块。

MinMaxObserver

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

MovingAverageMinMaxObserver

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

PerChannelMinMaxObserver

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

MovingAveragePerChannelMinMaxObserver

基于运行时每个通道的最小和最大值计算量化参数的观察模块。

HistogramObserver

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

PlaceholderObserver

不做任何事情,只是将配置传递给量化模块的 .from_float() 的观察器。

RecordingObserver

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

NoopObserver

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

get_observer_state_dict

返回对应观察者状态的 state dict。

load_observer_state_dict

给定输入模型和包含模型观察者状态的 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

默认的浮点零点观察者。

AffineQuantizedObserverBase

线性量化观察者模块(https://github.com/pytorch/ao/tree/main/torchao/quantization#affine-quantization)

Granularity

基类,用于表示量化粒度。

MappingType

浮点数如何映射为整数

PerAxis

表示量化中每个轴的粒度。

PerBlock

表示量化中的每块粒度。

PerGroup

表示量化中的通道组粒度。

PerRow

表示量化中的行粒度。

PerTensor

表示量化中的张量粒度。

PerToken

表示量化中的标记粒度。

TorchAODType

PyTorch 核心中尚不存在的数据类型占位符。

ZeroPointDomain

指示 zero_point 是否在整数域或浮点域的枚举。

get_block_size

根据输入形状和粒度类型获取块大小。

torch.ao.quantization.fake_quantize

该模块实现了在 QAT 过程中执行伪量化的模块。

FakeQuantizeBase

基础伪量化模块。

FakeQuantize

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

FixedQParamsFakeQuantize

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

FusedMovingAvgObsFakeQuantize

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

default_fake_quant

默认的激活函数 fake_quant。

default_weight_fake_quant

默认的权重 fake_quant。

default_per_channel_weight_fake_quant

默认的按通道权重 fake_quant。

default_histogram_fake_quant

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

default_fused_act_fake_quant

默认_fake_quant 的融合版本,性能提升。

default_fused_wt_fake_quant

默认_weight_fake_quant 的融合版本,性能提升。

default_fused_per_channel_wt_fake_quant

默认_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

动态 qconfig,激活和权重均量化为 torch.float16。

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

默认_qat_config 的融合版本,具有性能优势。

torch.ao.nn.intrinsic

此模块实现了融合(融合)模块 conv + relu,然后可以进行量化。

ConvReLU1d

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

ConvReLU2d

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

ConvReLU3d

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

LinearReLU

这是一个调用线性模块和 ReLU 模块的顺序容器。

ConvBn1d

这是一个调用 1D 卷积模块和 1D 批量归一化模块的顺序容器。

ConvBn2d

这是一个调用 2D 卷积模块和 2D 批量归一化模块的顺序容器。

ConvBn3d

这是一个调用 3D 卷积模块和 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

由线性模块和 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

此模块实现了融合操作的量化实现,如卷积 + ReLU。由于在推理时通常会被折叠到卷积中,因此没有 BatchNorm 变体。

BNReLU2d

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

BNReLU3d

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

ConvReLU1d

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

ConvReLU2d

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

ConvReLU3d

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

LinearReLU

LinearReLU 模块是由 Linear 和 ReLU 模块融合而成的

torch.ao.nn.intrinsic.quantized.dynamic

此模块实现了融合操作的量化动态实现,如线性 + ReLU。

LinearReLU

由线性模块和 ReLU 模块融合而成的 LinearReLU 模块,可用于动态量化。

torch.ao.nn.qat

此模块实现了 FP32 版本的 Conv2d()和 Linear()关键 nn 模块,并通过四舍五入来模拟 INT8 量化的效果。

Conv2d

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

Conv3d

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

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

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

Conv2d

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

Conv3d

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

ConvTranspose1d

对由多个输入平面组成的输入图像应用 1D 转置卷积算子。

ConvTranspose2d

对由多个输入平面组成的输入图像应用 2D 转置卷积算子。

ConvTranspose3d

对由多个输入平面组成的输入图像应用 3D 转置卷积算子。

Embedding

使用量化打包权重作为输入的量化嵌入模块。

EmbeddingBag

带有量化打包权重的量化 EmbeddingBag 模块。

FloatFunctional

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

FXFloatFunctional

在 FX 图模式量化之前替换 FloatFunctional 模块的模块,因为激活后处理将直接插入顶层模块。

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 步应用 2D 平均池化操作。

avg_pool3d

kD timeskH×kWkD \ times kH \times kW 区域通过步长 sD×sH×sWsD \times sH \times sW 步应用 3D 平均池化操作。

adaptive_avg_pool2d

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

adaptive_avg_pool3d

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

conv1d

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

conv2d

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

conv3d

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

interpolate

对输入进行下/上采样,使其变为给定的 size 或给定的 scale_factor

linear

对输入的量化数据进行线性变换: 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_) -> 张量

upsample

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

upsample_bilinear

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

upsample_nearest

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

torch.ao.nn.quantizable

此模块实现了某些 nn 层的可量化版本。这些模块可以通过提供 custom_module_config 参数,在准备和转换时与自定义模块机制一起使用。

LSTM

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

MultiheadAttention

torch.ao.nn.quantized.dynamic

动态量化 LinearLSTMLSTMCellGRUCell ,和 RNNCell

Linear

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

LSTM

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

GRU

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

RNNCell

带有 tanh 或 ReLU 非线性函数的 Elman RNN 单元。

LSTMCell

长短期记忆(LSTM)单元。

GRUCell

门控循环单元(GRU)细胞

量化数据类型和量化方案

注意,当前操作符实现仅支持卷积和线性操作符的通道量化。此外,输入数据按线性方式映射到量化数据,反之亦然,如下所示:

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 所述,具体如下:

if Symmetric:s=2max(xmin,xmax)/(QmaxQmin)z={0if dtype is qint8128otherwiseOtherwise:s=(xmaxxmin)/(QmaxQmin)z=Qminround(xmin/s)\begin{aligned} \text{if Symmetric:}&\\ &s = 2 \max(|x_\text{min}|, x_\text{max}) / \left( Q_\text{max} - Q_\text{min} \right) \\ &z = \begin{cases} 0 & \text{if dtype is qint8} \\ 128 & \text{otherwise} \end{cases}\\ \text{Otherwise:}&\\ &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 位有符号整数

    • 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 贡献者。

使用 Sphinx 构建,主题由 Read the Docs 提供。

文档

PyTorch 开发者文档全面访问

查看文档

教程

获取初学者和高级开发者的深入教程

查看教程

资源

查找开发资源并获得您的疑问解答

查看资源