量化 API 参考¶
torch.ao.quantization¶
此模块包含 Eager 模式量化 API。
顶级 API¶
使用训练后静态量化量化输入浮点模型。 |
|
将浮点模型转换为动态(即。 |
|
进行量化感知训练并输出量化模型 |
|
为量化校准或量化感知训练准备模型的副本。 |
|
为量化校准或量化感知训练准备模型的副本,并将其转换为量化版本。 |
|
根据 mapping 将输入模块中的子模块转换为不同的模块,方法是在目标模块类上调用 from_float 方法。 |
准备量化模型¶
将一组模块融合成单个模块。 |
|
量化存根模块,在校准之前,这与观察器相同,它将在 convert 中被交换为 nnq.Quantize。 |
|
反量化存根模块,在校准之前,这与身份相同,它将在 convert 中被交换为 nnq.DeQuantize。 |
|
一个包装器类,它包装输入模块,添加 QuantStub 和 DeQuantStub,并在对模块的调用周围使用对量化和反量化模块的调用。 |
|
如果叶子子模块具有有效的 qconfig,则将其包装在 QuantWrapper 中。请注意,此函数将就地修改模块的子项,并且它也可以返回一个新的模块,该模块也包装输入模块。 |
实用函数¶
如果模块具有量化的对应模块并且附加了 observer,则交换该模块。 |
|
通过模块层次结构传播 qconfig,并在每个叶子模块上分配 qconfig 属性 |
|
定义默认的评估函数。 |
torch.ao.quantization.quantize_fx¶
此模块包含 FX 图模式量化 API(原型)。
为训练后量化准备模型 |
|
为量化感知训练准备模型 |
|
将经过校准或训练的模型转换为量化模型 |
|
融合模块,如 conv+bn、conv+bn+relu 等,模型必须处于评估模式。 |
torch.ao.quantization.qconfig_mapping¶
此模块包含用于配置 FX 图模式量化的 QConfigMapping。
从模型操作到 |
|
返回训练后量化的默认 QConfigMapping。 |
|
返回量化感知训练的默认 QConfigMapping。 |
torch.ao.quantization.backend_config¶
此模块包含 BackendConfig,一个配置对象,它定义了如何在后端支持量化。目前仅由 FX 图模式量化使用,但我们也可能会扩展 Eager 模式量化以支持它。
配置,它定义了可以在给定后端上量化的模式集,以及如何从这些模式生成参考量化模型。 |
|
配置对象,它指定给定操作符模式的量化行为。 |
|
配置对象,它指定作为参数传递给参考模型规范中量化操作的支持数据类型,用于输入和输出激活、权重和偏差。 |
|
配置,用于指定给定数据类型的额外约束,例如量化值范围、比例值范围和固定量化参数,将在 |
|
一个枚举,它表示操作符/操作符模式应如何观察的不同方式 |
torch.ao.quantization.fx.custom_config¶
此模块包含一些在 Eager 模式和 FX 图模式量化中使用的 CustomConfig 类
用于 |
|
用于 |
|
用于 |
|
torch.ao.quantization.quantizer¶
torch.ao.quantization.pt2e (pytorch 2.0 版本导出中的量化实现)¶
torch.ao.quantization.pt2e.export_utils¶
如果 torch.nn.Module 已导出则返回 True,否则返回 False(例如, |
torch.ao.quantization.observer¶
此模块包含观察器,用于收集校准(PTQ)或训练(QAT)期间观察到的值的统计信息。
基本观察器模块。 |
|
用于基于运行的最小值和最大值计算量化参数的观察器模块。 |
|
用于基于最小值和最大值的移动平均值计算量化参数的观察器模块。 |
|
用于基于运行的逐通道最小值和最大值计算量化参数的观察器模块。 |
|
用于基于运行的逐通道最小值和最大值计算量化参数的观察器模块。 |
|
该模块记录张量值的运行直方图,以及最小值/最大值。 |
|
不执行任何操作的观察器,只需将配置传递给量化模块的 |
|
该模块主要用于调试,并在运行时记录张量值。 |
|
不执行任何操作的观察器,只需将配置传递给量化模块的 |
|
返回与观察器统计信息相对应的状态字典。 |
|
给定输入模型和包含模型观察器统计信息的状态字典,将统计信息加载回模型。 |
|
静态量化的默认观察器,通常用于调试。 |
|
默认占位符观察器,通常用于量化为 torch.float16。 |
|
默认仅用于调试的观察器。 |
|
默认权重观察器。 |
|
默认直方图观察器,通常用于 PTQ。 |
|
默认逐通道权重观察器,通常在支持逐通道权重量化的后端使用,例如 fbgemm。 |
|
动态量化的默认观察器。 |
|
浮点零点的默认观察器。 |
torch.ao.quantization.fake_quantize¶
此模块实现用于在 QAT 期间执行伪量化的模块。
基本伪量化模块。 |
|
在训练时间模拟量化和反量化操作。 |
|
在训练时间模拟量化和反量化。 |
|
定义一个融合模块来观察张量。 |
|
激活的默认伪量化器。 |
|
权重的默认伪量化器。 |
|
逐通道权重的默认伪量化器。 |
|
使用直方图的激活的伪量化器。 |
|
default_fake_quant 的融合版本,性能更高。 |
|
default_weight_fake_quant 的融合版本,性能更高。 |
|
default_per_channel_weight_fake_quant 的融合版本,性能更高。 |
|
禁用模块的伪量化。 |
|
启用模块的伪量化。 |
|
禁用此模块的观察。 |
|
启用此模块的观察。 |
torch.ao.quantization.qconfig¶
此模块定义 QConfig 对象,用于配置各个操作的量化设置。
通过分别提供激活和权重的设置(观察器类)来描述如何量化层或网络的一部分。 |
|
默认 qconfig 配置。 |
|
调试的默认 qconfig 配置。 |
|
逐通道权重量化的默认 qconfig 配置。 |
|
默认动态 qconfig。 |
|
权重量化为 torch.float16 的动态 qconfig。 |
|
激活和权重都量化为 torch.float16 的动态 qconfig。 |
|
权重逐通道量化的动态 qconfig。 |
|
使用浮点零点量化权重的动态 qconfig。 |
|
QAT 的默认 qconfig。 |
|
仅量化权重的默认 qconfig。 |
|
仅量化激活的默认 qconfig。 |
|
default_qat_config 的融合版本,具有性能优势。 |
torch.ao.nn.intrinsic¶
此模块实现可以量化的组合(融合)模块 conv + relu。
这是一个顺序容器,它调用 Conv1d 和 ReLU 模块。 |
|
这是一个顺序容器,它调用 Conv2d 和 ReLU 模块。 |
|
这是一个顺序容器,它调用 Conv3d 和 ReLU 模块。 |
|
这是一个顺序容器,它调用 Linear 和 ReLU 模块。 |
|
这是一个顺序容器,它调用 Conv 1d 和 Batch Norm 1d 模块。 |
|
这是一个顺序容器,它调用 Conv 2d 和 Batch Norm 2d 模块。 |
|
这是一个顺序容器,它调用 Conv 3d 和 Batch Norm 3d 模块。 |
|
这是一个顺序容器,它调用 Conv 1d、Batch Norm 1d 和 ReLU 模块。 |
|
这是一个顺序容器,它调用 Conv 2d、Batch Norm 2d 和 ReLU 模块。 |
|
这是一个顺序容器,它调用 Conv 3d、Batch Norm 3d 和 ReLU 模块。 |
|
这是一个顺序容器,它调用 BatchNorm 2d 和 ReLU 模块。 |
|
这是一个顺序容器,它调用 BatchNorm 3d 和 ReLU 模块。 |
torch.ao.nn.intrinsic.qat¶
此模块实现了用于量化感知训练的那些融合操作的版本。
一个从 Linear 和 ReLU 模块融合而成的 LinearReLU 模块,附加了用于权重的 FakeQuantize 模块,用于量化感知训练。 |
|
ConvBn1d 模块是一个从 Conv1d 和 BatchNorm1d 融合而成的模块,附加了用于权重的 FakeQuantize 模块,用于量化感知训练。 |
|
ConvBnReLU1d 模块是一个从 Conv1d、BatchNorm1d 和 ReLU 融合而成的模块,附加了用于权重的 FakeQuantize 模块,用于量化感知训练。 |
|
ConvBn2d 模块是一个从 Conv2d 和 BatchNorm2d 融合而成的模块,附加了用于权重的 FakeQuantize 模块,用于量化感知训练。 |
|
ConvBnReLU2d 模块是一个从 Conv2d、BatchNorm2d 和 ReLU 融合而成的模块,附加了用于权重的 FakeQuantize 模块,用于量化感知训练。 |
|
ConvReLU2d 模块是 Conv2d 和 ReLU 的融合模块,附加了用于权重的 FakeQuantize 模块,用于量化感知训练。 |
|
ConvBn3d 模块是一个从 Conv3d 和 BatchNorm3d 融合而成的模块,附加了用于权重的 FakeQuantize 模块,用于量化感知训练。 |
|
ConvBnReLU3d 模块是一个从 Conv3d、BatchNorm3d 和 ReLU 融合而成的模块,附加了用于权重的 FakeQuantize 模块,用于量化感知训练。 |
|
ConvReLU3d 模块是 Conv3d 和 ReLU 的融合模块,附加了用于权重的 FakeQuantize 模块,用于量化感知训练。 |
|
torch.ao.nn.intrinsic.quantized¶
此模块实现了融合操作(如 conv + relu)的量化实现。没有 BatchNorm 变体,因为它通常在推理中折叠到卷积中。
BNReLU2d 模块是 BatchNorm2d 和 ReLU 的融合模块 |
|
BNReLU3d 模块是 BatchNorm3d 和 ReLU 的融合模块 |
|
ConvReLU1d 模块是 Conv1d 和 ReLU 的融合模块 |
|
ConvReLU2d 模块是 Conv2d 和 ReLU 的融合模块 |
|
ConvReLU3d 模块是 Conv3d 和 ReLU 的融合模块 |
|
一个从 Linear 和 ReLU 模块融合而成的 LinearReLU 模块 |
torch.ao.nn.intrinsic.quantized.dynamic¶
此模块实现了融合操作(如 linear + relu)的量化动态实现。
一个从 Linear 和 ReLU 模块融合而成的 LinearReLU 模块,可用于动态量化。 |
torch.ao.nn.qat¶
此模块实现了关键 nn 模块 **Conv2d()** 和 **Linear()** 的版本,这些版本在 FP32 中运行,但应用了舍入来模拟 INT8 量化的效果。
一个附加了用于权重的 FakeQuantize 模块的 Conv2d 模块,用于量化感知训练。 |
|
一个附加了用于权重的 FakeQuantize 模块的 Conv3d 模块,用于量化感知训练。 |
|
一个附加了用于权重的 FakeQuantize 模块的线性模块,用于量化感知训练。 |
torch.ao.nn.qat.dynamic¶
此模块实现了关键 nn 模块(如 **Linear()**)的版本,这些版本在 FP32 中运行,但应用了舍入来模拟 INT8 量化的效果,并且将在推理期间动态量化。
一个附加了用于权重的 FakeQuantize 模块的线性模块,用于动态量化感知训练。 |
torch.ao.nn.quantized¶
此模块实现了 nn 层的量化版本,例如 ~`torch.nn.Conv2d` 和 torch.nn.ReLU。
应用逐元素函数 |
|
这是 |
|
这是 |
|
这是 |
|
这是 |
|
这是 |
|
这是 |
|
对由多个量化输入平面组成的量化输入信号应用一维卷积。 |
|
对由多个量化输入平面组成的量化输入信号应用二维卷积。 |
|
对由多个量化输入平面组成的量化输入信号应用三维卷积。 |
|
对由多个输入平面组成的输入图像应用一维转置卷积运算符。 |
|
对由多个输入平面组成的输入图像应用二维转置卷积运算符。 |
|
对由多个输入平面组成的输入图像应用三维转置卷积运算符。 |
|
一个量化 Embedding 模块,以量化打包权重作为输入。 |
|
一个量化 EmbeddingBag 模块,以量化打包权重作为输入。 |
|
浮点操作的状态收集器类。 |
|
在 FX 图模式量化之前替换 FloatFunctional 模块的模块,因为 activation_post_process 将直接插入到顶层模块中 |
|
量化操作的包装类。 |
|
一个量化线性模块,以量化张量作为输入和输出。 |
|
这是 |
|
这是 |
|
这是 |
|
这是 |
|
这是 |
torch.ao.nn.quantized.functional¶
函数式接口(量化)。
此模块实现了函数式层的量化版本,例如 ~`torch.nn.functional.conv2d` 和 torch.nn.functional.relu。注意:relu()
支持量化输入。
在 区域应用二维平均池化操作,步长为 步。 |
|
在 区域应用三维平均池化操作,步长为 步。 |
|
对由多个量化输入平面组成的量化输入信号应用二维自适应平均池化。 |
|
对由多个量化输入平面组成的量化输入信号应用三维自适应平均池化。 |
|
对由多个输入平面组成的量化一维输入应用一维卷积。 |
|
对由多个输入平面组成的量化二维输入应用二维卷积。 |
|
对由多个输入平面组成的量化 3D 输入进行 3D 卷积。 |
|
将输入向下/向上采样到给定的 |
|
对传入的量化数据应用线性变换: . |
|
对由多个量化输入平面组成的量化输入信号进行 1D 最大池化。 |
|
对由多个量化输入平面组成的量化输入信号进行 2D 最大池化。 |
|
逐元素应用量化 CELU 函数。 |
|
量化版本。 |
|
这是 |
|
这是 |
|
逐元素应用量化版本的阈值函数。 |
|
这是 |
|
这是 |
|
float(input, min_, max_) -> Tensor |
|
将输入向上采样到给定的 |
|
使用双线性上采样对输入进行上采样。 |
|
使用最近邻像素值对输入进行上采样。 |
torch.ao.nn.quantizable¶
此模块实现了某些 nn 层的可量化版本。这些模块可与自定义模块机制一起使用,方法是向 prepare 和 convert 都提供 custom_module_config
参数。
一个可量化的长短期记忆 (LSTM)。 |
|
torch.ao.nn.quantized.dynamic¶
动态量化 Linear
、LSTM
、LSTMCell
、GRUCell
和 RNNCell
.
具有浮点张量作为输入和输出的动态量化线性模块。 |
|
具有浮点张量作为输入和输出的动态量化 LSTM 模块。 |
|
对输入序列应用多层门控循环单元 (GRU) RNN。 |
|
具有 tanh 或 ReLU 非线性的 Elman RNN 单元。 |
|
一个长短期记忆 (LSTM) 单元。 |
|
一个门控循环单元 (GRU) 单元 |
量化数据类型和量化方案¶
请注意,运算符实现当前仅支持对 **conv** 和 **linear** 运算符的权重的按通道量化。此外,输入数据将线性映射到量化数据,反之亦然,如下所示
其中 与 clamp()
相同,而比例因子 和零点 则按 MinMaxObserver
中所述进行计算,具体来说
否则 否则: s = ( x max − x min ) / ( Q max − Q min ) z = Q min − round ( x min / 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}
其中 表示输入数据的范围,而 和 分别是量化数据类型 的最小值和最大值。
请注意,选择 和 意味着只要零在输入数据的范围内或使用对称量化,零就用没有量化误差的方式表示。
可以通过 自定义操作机制 来实现其他数据类型和量化方案。
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 下的相应文件中,同时在此处添加导入语句。