Quantization API Reference#
Created On: Jul 25, 2020 | Last Updated On: Dec 01, 2025
torch.ao.quantization#
此模块包含 Eager 模式下的量化 API。
Top level APIs#
使用训练后静态量化量化输入浮点模型。 |
|
将浮点模型转换为动态(即仅权重)量化模型。 |
|
进行量化感知训练并输出量化模型 |
|
为量化校准或量化感知训练准备模型副本。 |
|
为量化校准或量化感知训练准备模型副本,并将其转换为量化版本。 |
|
根据 mapping,通过调用目标模块类的 from_float 方法,将输入模块中的子模块转换为不同的模块。 |
Preparing model for quantization#
将模块列表融合成一个单独的模块。 |
|
量化存根模块,在校准之前,它与观察器相同,在 convert 中会被替换为 nnq.Quantize。 |
|
反量化存根模块,在校准之前,它与身份函数相同,在 convert 中会被替换为 nnq.DeQuantize。 |
|
一个包装类,用于包装输入模块,添加 QuantStub 和 DeQuantStub,并将模块的调用包裹在对 quant 和 dequant 模块的调用中。 |
|
如果叶子子模块有有效的 qconfig,则使用 QuantWrapper 包装叶子子模块。请注意,此函数将就地修改模块的子模块,并且它也可以返回一个包装输入模块的新模块。 |
Utility functions#
如果模块有量化对应项且已附加 observer,则交换该模块。 |
|
通过模块层级结构传播 qconfig,并在每个叶子模块上分配 qconfig 属性 |
|
定义默认的评估函数。 |
torch.ao.quantization.utils#
跨不同量化模式(eager/graph)共享的工具函数
给定一个 qconfig,决定激活是否需要动态量化,这包括动态量化到 quint8、qint8 和 float16 |
|
给定一个 qconfig,决定激活是否需要量化到 int32 |
|
给定一个 qconfig,决定激活是否需要量化到 int8,这包括量化到 quint8、qint8 |
|
给定一个 qconfig,决定激活是否需要量化,这包括量化到 quint8、qint8 和 qint32 以及 float16 |
|
计算量化参数,给定最小值和最大值张量。 |
|
检查给定的最小值和最大值是否有效,即它们是否存在且最小值小于最大值。 |
|
根据量化范围、观察器数据类型以及范围是否已缩减,计算实际的 qmin 和 qmax。 |
|
验证用户指定的量化范围是否已正确初始化并且在观察器数据类型支持的给定范围内。 |
torch.ao.quantization.quantize_fx#
此模块包含 FX 图模式量化 API(原型)。
为训练后量化准备模型 |
|
为量化感知训练准备模型 |
|
将已校准或已训练的模型转换为量化模型 |
|
融合 conv+bn、conv+bn+relu 等模块,模型必须处于 eval 模式。 |
torch.ao.quantization.qconfig_mapping#
此模块包含 QConfigMapping,用于配置 FX 图模式量化。
模型算子到 |
|
返回训练后量化的默认 QConfigMapping。 |
|
返回量化感知训练的默认 QConfigMapping。 |
torch.ao.quantization.backend_config#
此模块包含 BackendConfig,这是一个配置对象,定义了后端中如何支持量化。目前仅由 FX 图模式量化使用,但我们可能会将其扩展到 Eager 模式量化。
定义给定后端上可量化的模式集合,以及如何从这些模式生成参考量化模型的配置。 |
|
指定给定算子模式量化行为的配置对象。 |
|
指定用于输入和输出激活、权重和偏差的参考模型规范中用于量化算子的数据类型的配置对象。 |
|
用于为给定 dtype 指定附加约束的配置,例如量化值范围、比例值范围和固定量化参数,用于 |
|
一个枚举,代表算子/算子模式应如何被观察的不同方式 |
torch.ao.quantization.backend_config.utils#
给定一个 backend_config_dict 条目,返回其人类可读表示形式的字符串。 |
|
某些 op 有默认的字符串表示形式,例如“<function boolean_dispatch.<locals>.fn at 0x7ff1106bf280>”,此函数将它们替换为硬编码的函数名称。 |
torch.ao.quantization.fx.custom_config#
此模块包含几个 CustomConfig 类,它们在 eager 模式和 FX 图模式量化中都使用
用于 |
|
用于 |
|
用于 |
|
torch.ao.quantization.fx.utils#
返回第一个之后的所有节点参数索引 |
|
如果我们确定该节点的所有参数都没有张量(都是原语),则返回 True。 |
|
从目标节点开始,追溯到遇到 input 或 getattr 节点。这用于提取从 getattr 到目标节点的算子链,例如:. |
|
给定任何类型的 a 值,创建一个对应的 getattr 节点,并将该值注册为模块的 buffer。 |
|
创建 new_node 并将必要的元数据从 old_node 复制到其中。 |
|
从 collect_producer_nodes 函数提取的生产者节点构建一个图模块 :param root: 原始图的根模块 :param producer_nodes: 用于构建图的节点列表 |
|
获取与 is_target_module_type 所需的模块匹配的下一个模块(如果存在) |
|
返回节点参数是否为 bias |
|
返回节点参数是否为 weight |
|
构建一个函数,该函数接受一个节点作为参数,并返回对 node.args 有效的 arg_indices |
torch.ao.quantization.quantizer#
torch.ao.quantization.pt2e (pytorch 2.0 导出实现中的量化)#
torch.ao.quantization.pt2e.export_utils#
如果 torch.nn.Module 已导出,则返回 True,否则返回 False(例如,如果模型是 FX 符号跟踪的或根本未跟踪)。 |
torch.ao.quantization.pt2e.lowering#
将 PT2E 量化模型降级到 x86 后端。 |
PT2 Export (pt2e) Numeric Debugger#
为给定 ExportedProgram 的图模块中的所有节点(例如 conv2d、squeeze、conv1d 等,除了 placeholder)附加 numeric_debug_handle_id。 |
|
str(object='') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str |
|
str(object='') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str |
|
向具有 numeric_debug_handle 的节点添加输出记录器 |
|
对于给定模型,提取每个调试句柄的张量统计信息和相关信息。 |
|
给定两个映射(从 debug_handle_id(整数)到张量列表)的字典,返回一个从 debug_handle_id 到 NodeAccuracySummary 的映射,该映射包含 SQNR、MSE 等比较信息。 |
torch.ao.quantization.observer#
此模块包含观察器,用于在校准(PTQ)或训练(QAT)期间收集值统计信息。
基本观察器模块。 |
|
基于运行中的最小值和最大值计算量化参数的观察器模块。 |
|
基于最小值和最大值的移动平均值计算量化参数的观察器模块。 |
|
用于基于运行时的逐通道最小/最大值计算量化参数的观察者模块。 |
|
用于基于运行时的逐通道最小/最大值计算量化参数的观察者模块。 |
|
该模块记录张量值的运行直方图以及最小值/最大值。 |
|
一个不执行任何操作的观察器,只将其配置传递给量化模块的 |
|
该模块主要用于调试,并在运行时记录张量值。 |
|
一个不执行任何操作的观察器,只将其配置传递给量化模块的 |
|
返回对应于观察器统计数据的 state dict。 |
|
给定输入模型和一个包含模型观察器统计数据的 state_dict,将统计数据加载回模型。 |
|
静态量化的默认观察器,通常用于调试。 |
|
默认占位符观察器,通常用于量化到 torch.float16。 |
|
默认仅用于调试的观察器。 |
|
默认权重观察器。 |
|
默认直方图观察器,通常用于 PTQ。 |
|
默认逐通道权重观察器,通常用于支持逐通道权重量化的后端,例如 fbgemm。 |
|
动态量化的默认观察器。 |
|
浮点零点的默认观察器。 |
|
仿射量化的观察器模块(pytorch/ao) |
|
表示量化粒度的基类。 |
|
浮点数如何映射到整数 |
|
表示量化中的逐轴粒度。 |
|
表示量化中的逐块粒度。 |
|
表示量化中的逐通道组粒度。 |
|
表示量化中的逐行粒度。 |
|
表示逐张量粒度。 |
|
表示量化中的逐 token 粒度。 |
|
PyTorch 核心中尚不存在的数据类型的占位符。 |
|
枚举,指示零点是在整数域还是浮点域 |
|
根据输入形状和粒度类型获取块大小。 |
torch.ao.quantization.fake_quantize#
此模块实现了在 QAT 期间用于执行伪量化的模块。
伪量化基模块。 |
|
在训练时模拟量化和反量化操作。 |
|
在训练时模拟量化和反量化。 |
|
定义用于观察张量的融合模块。 |
|
激活的默认伪量化。 |
|
权重的默认伪量化。 |
|
逐通道权重的默认伪量化。 |
|
使用直方图的激活伪量化。 |
|
默认伪量化的融合版本,性能更优。 |
|
默认权重伪量化的融合版本,性能更优。 |
|
默认逐通道权重伪量化的融合版本,性能更优。 |
|
禁用模块的伪量化。 |
|
启用模块的伪量化。 |
|
禁用此模块的观察。 |
|
启用此模块的观察。 |
torch.ao.quantization.qconfig#
此模块定义了 QConfig 对象,这些对象用于为单个算子配置量化设置。
通过分别提供激活和权重的观察器类来描述如何量化层或网络的一部分。 |
|
默认 qconfig 配置。 |
|
用于调试的默认 qconfig 配置。 |
|
用于逐通道权重量化的默认 qconfig 配置。 |
|
默认动态 qconfig。 |
|
权重量化为 torch.float16 的动态 qconfig。 |
|
激活和权重都量化为 torch.float16 的动态 qconfig。 |
|
逐通道量化权重的动态 qconfig。 |
|
具有浮点零点的权重量化的动态 qconfig。 |
|
QAT 的默认 qconfig。 |
|
仅量化权重的默认 qconfig。 |
|
仅量化激活的默认 qconfig。 |
|
默认 QAT 配置的融合版本,具有性能优势。 |
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 模块,用于量化感知训练。 |
|
一个由 Conv1d 和 BatchNorm1d 融合而成的 ConvBn1d 模块,附加了权重的 FakeQuantize 模块,用于量化感知训练。 |
|
一个由 Conv1d、BatchNorm1d 和 ReLU 融合而成的 ConvBnReLU1d 模块,附加了权重的 FakeQuantize 模块,用于量化感知训练。 |
|
一个由 Conv2d 和 BatchNorm2d 融合而成的 ConvBn2d 模块,附加了权重的 FakeQuantize 模块,用于量化感知训练。 |
|
一个由 Conv2d、BatchNorm2d 和 ReLU 融合而成的 ConvBnReLU2d 模块,附加了权重的 FakeQuantize 模块,用于量化感知训练。 |
|
一个由 Conv2d 和 ReLU 融合而成的 ConvReLU2d 模块,附加了权重的 FakeQuantize 模块,用于量化感知训练。 |
|
一个由 Conv3d 和 BatchNorm3d 融合而成的 ConvBn3d 模块,附加了权重的 FakeQuantize 模块,用于量化感知训练。 |
|
一个由 Conv3d、BatchNorm3d 和 ReLU 融合而成的 ConvBnReLU3d 模块,附加了权重的 FakeQuantize 模块,用于量化感知训练。 |
|
一个由 Conv3d 和 ReLU 融合而成的 ConvReLU3d 模块,附加了权重的 FakeQuantize 模块,用于量化感知训练。 |
|
torch.ao.nn.intrinsic.quantized#
此模块实现了诸如 conv + relu 等融合操作的量化实现。没有 BatchNorm 变体,因为它们通常在推理时折叠到卷积中。
一个由 BatchNorm2d 和 ReLU 融合而成的 BNReLU2d 模块 |
|
一个由 BatchNorm3d 和 ReLU 融合而成的 BNReLU3d 模块 |
|
一个由 Conv1d 和 ReLU 融合而成的 ConvReLU1d 模块 |
|
一个由 Conv2d 和 ReLU 融合而成的 ConvReLU2d 模块 |
|
一个由 Conv3d 和 ReLU 融合而成的 ConvReLU3d 模块 |
|
一个由 Linear 和 ReLU 模块融合而成的 LinearReLU 模块 |
torch.ao.nn.intrinsic.quantized.dynamic#
此模块实现了诸如 linear + relu 等融合操作的量化动态实现。
一个由 Linear 和 ReLU 模块融合而成的 LinearReLU 模块,可用于动态量化。 |
torch.ao.nn.qat#
此模块实现了关键 nn 模块 **Conv2d()** 和 **Linear()** 的版本,这些版本在 FP32 中运行,但应用了舍入以模拟 INT8 量化的效果。
torch.ao.nn.qat.dynamic#
此模块实现了诸如 **Linear()** 等关键 nn 模块的版本,这些模块在 FP32 中运行,但应用了舍入以模拟 INT8 量化的效果,并在推理期间动态量化。
一个附加了权重的 FakeQuantize 模块的线性模块,用于动态量化感知训练。 |
torch.ao.nn.quantized#
此模块实现了 nn 层(如 ~torch.nn.Conv2d 和 torch.nn.ReLU)的量化版本。
应用逐元素的函数 |
|
这是 |
|
这是 |
|
这是 |
|
这是 |
|
这是 |
|
这是 |
|
对由多个量化输入平面组成的量化输入信号应用一维卷积。 |
|
对由多个量化输入平面组成的量化输入信号应用二维卷积。 |
|
对由多个量化输入平面组成的量化输入信号应用三维卷积。 |
|
对由多个输入平面组成的输入图像应用 1D 转置卷积运算符。 |
|
对由多个输入平面组成的输入图像应用 2D 转置卷积运算符。 |
|
对由多个输入平面组成的输入图像应用 3D 转置卷积算子。 |
|
一个量化 Embedding 模块,具有量化的打包权重作为输入。 |
|
一个量化 EmbeddingBag 模块,具有量化的打包权重作为输入。 |
|
浮点运算的状态收集器类。 |
|
用于在 FX 图模式量化之前替换 FloatFunctional 模块的模块,因为 activation_post_process 将直接插入到顶层模块中 |
|
量化运算的包装类。 |
|
一个量化线性模块,具有量化张量作为输入和输出。 |
|
这是 |
|
这是 |
|
这是 |
|
这是 |
|
这是 |
torch.ao.nn.quantized.functional#
函数接口 (已量化)。
此模块实现了函数式层的量化版本,例如 ~torch.nn.functional.conv2d 和 torch.nn.functional.relu。注意: 支持量化输入。
在 区域上应用 2D 平均池化操作,步长为 步。 |
|
在 区域上应用 3D 平均池化操作,步长为 步。 |
|
对由多个量化输入平面组成的量化输入信号应用 2D 自适应平均池化。 |
|
对由多个量化输入平面组成的量化输入信号应用 3D 自适应平均池化。 |
|
对由多个输入平面组成的量化 1D 输入应用 1D 卷积。 |
|
对由多个输入平面组成的量化 2D 输入应用 2D 卷积。 |
|
对由多个输入平面组成的量化 3D 输入应用 3D 卷积。 |
|
将输入下/上采样到给定 |
|
对输入的量化数据应用线性变换:。 |
|
对由多个量化输入平面组成的量化输入信号应用 1D 最大池化。 |
|
对由多个量化输入平面组成的量化输入信号应用 2D 最大池化。 |
|
逐元素应用量化的 CELU 函数。 |
|
的量化版本。 |
|
这是 |
|
这是 |
|
逐元素应用阈值函数的量化版本 |
|
这是 |
|
这是 |
|
float(input, min_, max_) -> Tensor |
|
将输入上采样到给定 |
|
使用双线性上采样对输入进行上采样。 |
|
使用最近邻像素值对输入进行上采样。 |
torch.ao.nn.quantizable#
此模块实现了某些 nn 模块的可量化版本。这些模块可以与自定义模块机制结合使用,方法是将 custom_module_config 参数同时提供给 prepare 和 convert。
可量化的长短期记忆 (LSTM)。 |
|
torch.ao.nn.quantized.dynamic#
量化数据类型和量化方案#
请注意,目前算子实现仅支持 **conv** 和 **linear** 算子权重的逐通道量化。此外,输入数据和量化数据之间的映射如下:
其中 与 clamp() 相同,而缩放因子 和零点 的计算方式如 MinMaxObserver 中所述,具体如下:
其中 :math:[x_\text{min}, x_\text{max}] 表示输入数据的范围,:math:Q_\text{min} 和 :math:Q_\text{max} 分别是量化数据类型的最小值和最大值。
请注意,:math:s 和 :math:z 的选择意味着,只要零点位于输入数据的范围内或使用了对称量化,零点就不会产生量化误差。
可以通过 自定义 算子 机制 <https://pytorch.ac.cn/tutorials/advanced/torch_script_custom_ops.html>_ 实现额外的数据类型和量化方案。
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 下的相应文件中,并在此处添加导入语句。