Shortcuts

量化 API 参考

torch.ao.quantization

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

顶级API

quantize

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

quantize_dynamic

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

quantize_qat

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

准备

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

prepare_qat

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

转换

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

准备量化模型

fuse_modules.fuse_modules

将模块列表合并为一个模块。

QuantStub

量化存根模块,在标定之前,这与观察者相同,它将在convert中被替换为nnq.Quantize

DeQuantStub

反量化存根模块,在标定之前,这与恒等映射相同,这将在convert中被替换为nnq.DeQuantize

QuantWrapper

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

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

获取默认的qconfig映射

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

get_default_qat_qconfig_mapping

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

torch.ao.quantization.backend_config

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

BackendConfig

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

BackendPatternConfig

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

DTypeConfig

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

DTypeWithConstraints

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

观察类型

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

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(例如)。

torch.ao.quantization.observer

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

ObserverBase

基础观察者模块。

MinMaxObserver

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

MovingAverageMinMaxObserver

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

PerChannelMinMaxObserver

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

MovingAveragePerChannelMinMaxObserver

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

直方图观察器

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

占位符观察者

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

RecordingObserver

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

NoopObserver

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

get_observer_state_dict

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

load_observer_state_dict

给定输入模型和一个包含模型观察者统计信息的state_dict,将统计信息加载回模型中。

默认观察器

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

default_placeholder_observer

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

默认调试观察器

默认仅调试时使用的观察器。

默认权重观察器

默认权重观察器。

default_histogram_observer

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

默认的逐通道权重观察器

默认的每通道权重观察器,通常用于支持每通道权重量化的后端,例如 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

动态qconfig,权重量化为torch.float16

float16_static_qconfig

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

per_channel_dynamic_qconfig

动态qconfig,按通道量化权重。

float_qparams_weight_only_qconfig

使用浮点数 zero_point 对权重进行量化的动态 qconfig。

default_qat_qconfig

QAT 的默认 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

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

一个由线性模块和ReLU模块融合而成的LinearReLU模块

torch.ao.nn.intrinsic.quantized.dynamic

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

LinearReLU

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

torch.ao.nn.qat

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

Conv2d

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

Conv3d

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

线性

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

torch.ao.nn.qat.dynamic

此模块实现了关键的 nn 模块版本,例如 Linear(),它们以 FP32 运行,但应用了舍入以模拟 INT8 量化的效果,并在推理期间进行动态量化。

线性

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

torch.ao.nn.quantized

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

ReLU6

对每个元素应用函数:

Hardswish

这是 Hardswish 的量化版本。

ELU

这是 ELU 的量化等效形式。

LeakyReLU

这是 LeakyReLU 的量化等效形式。

Sigmoid

这是 Sigmoid 的量化等效形式。

BatchNorm2d

这是 BatchNorm2d 的量化版本。

BatchNorm3d

这是 BatchNorm3d 的量化版本。

Conv1d

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

Conv2d

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

Conv3d

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

ConvTranspose1d

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

ConvTranspose2d

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

ConvTranspose3d

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

嵌入

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

EmbeddingBag

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

FloatFunctional

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

FXFloatFunctional

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

QFunctional

用于量化操作的包装类。

线性

一个使用量化张量作为输入和输出的量化线性模块。

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 区域中应用2D平均池化操作,步长为 sH×sWsH \times sW

avg_pool3d

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

adaptive_avg_pool2d

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

adaptive_avg_pool3d

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

conv1d

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

conv2d

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

conv3d

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

interpolate

对输入进行下采样或上采样,以达到给定的 size 或给定的 scale_factor

线性

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

max_pool1d

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

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_nearest

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

torch.ao.nn.quantizable

此模块实现了一些nn层量化版本。 这些模块可以与自定义模块机制一起使用, 通过提供custom_module_config参数给prepare和convert。

LSTM

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

MultiheadAttention

torch.ao.nn.quantized.dynamic

动态量化的 Linear, LSTM, LSTMCell, GRUCell, 和 RNNCell

线性

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

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位有符号整数

    • 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

量化模块。

Note::

正在弃用 torch.nn.quantized 命名空间。 请改用 torch.ao.nn.quantized

量化动态模块。

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

优云智算