量化 API 参考 ¶
torch.ao.quantization¶
此模块包含急切模式的量化 API。
顶级 API
使用后训练静态量化量化输入浮点模型。 |
|
将浮点模型转换为动态(即。 |
|
进行量化感知训练并输出量化模型 |
|
准备模型副本以进行量化校准或量化感知训练。 |
|
准备模型副本以进行量化校准或量化感知训练,并将其转换为量化版本。 |
|
通过在目标模块类上调用 from_float 方法,根据映射将输入模块中的子模块转换为不同的模块。 |
准备模型进行量化
将一系列模块融合成一个单一模块。 |
|
对占位模块进行量化,在校准之前,这等同于观察者,将在转换时替换为 nnq.Quantize。 |
|
对占位模块进行去量化,在校准之前,这等同于恒等变换,这将在转换时替换为 nnq.DeQuantize。 |
|
一个包装类,用于包装输入模块,添加 QuantStub 和 DeQuantStub,并在调用模块时围绕调用量化模块和去量化模块。 |
|
如果叶子子模块具有有效的 qconfig,则将其包裹在 QuantWrapper 中。请注意,此函数将就地修改模块的子模块,并且可以返回一个包装输入模块的新模块。 |
工具函数 §
如果模块具有量化的对应模块并且附加了观察器,则交换模块。 |
|
在模块层次结构中传播 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 Graph Mode 量化,但我们也可能将其扩展到 Eager Mode 量化以与之兼容。
定义在给定后端上可以量化的模式集的配置,以及如何从这些模式生成参考量化模型。 |
|
指定给定操作模式量化行为的配置对象。 |
|
配置对象,用于指定在参考模型规范中量化操作传递的参数所支持的数据类型,包括输入和输出激活、权重和偏置。 |
|
用于指定给定数据类型的额外约束配置,例如量化值范围、缩放值范围和固定量化参数,用于在 |
|
表示操作/操作模式应如何观察的不同方式的枚举。 |
torch.ao.quantization.fx.custom_config¶
本模块包含一些用于急切模式和 FX 图模式量化的 CustomConfig 类
|
|
|
|
|
|
torch.ao.quantization.quantizer
torch.ao.quantization.pt2e(PyTorch 2.0 导出实现中的量化)
torch.ao.quantization.pt2e.export_utils
如果 torch.nn.Module 已导出,则返回 True,否则返回 False(例如 |
PT2 导出(pt2e)数值调试器 ¶
为给定 ExportedProgram 的图模块中的所有节点附加 numeric_debug_handle_id,如 conv2d、squeeze、conv1d 等,除了占位符。 |
|
str(object='') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str |
|
str(object='') -> str str(bytes_or_buffer[, encoding[, errors]]) -> str |
|
将输出日志记录器添加到具有数字调试句柄的节点 |
|
对于给定的模型,提取每个调试句柄的张量统计信息和相关数据 |
|
给定两个从 debug_handle_id(整数)到张量列表的字典映射,返回一个从 debug_handle_id 到包含比较信息(如 SQNR、MSE 等)的 NodeAccuracySummary 的映射 |
torch.ao.quantization.observer¶
此模块包含用于收集校准(PTQ)或训练(QAT)期间观察到的值的统计信息的观察器。
基础观察器模块。 |
|
基于运行中的最小值和最大值计算量化参数的观察器模块。 |
|
基于最小值和最大值移动平均计算量化参数的观察器模块。 |
|
基于运行中每通道最小值和最大值计算量化参数的观察器模块。 |
|
基于运行时每个通道的最小和最大值计算量化参数的观察模块。 |
|
该模块记录张量值的运行时直方图以及最小/最大值。 |
|
不做任何事情,只是将配置传递给量化模块的 |
|
该模块主要用于调试,并记录运行时的张量值。 |
|
观察者不执行任何操作,只是将配置传递给量化模块的 |
|
返回对应观察者状态的 state dict。 |
|
给定输入模型和包含模型观察者状态的 state_dict,将状态重新加载到模型中。 |
|
静态量化默认观察者,通常用于调试。 |
|
默认占位符观察者,通常用于将数据量化为 torch.float16。 |
|
默认仅调试观察者。 |
|
默认权重观察者。 |
|
默认直方图观察者,通常用于 PTQ。 |
|
默认的按通道权重观察者,通常用于支持按通道权重量化的后端,例如 fbgemm。 |
|
默认的动态量化观察者。 |
|
默认的浮点零点观察者。 |
|
线性量化观察者模块(https://github.com/pytorch/ao/tree/main/torchao/quantization#affine-quantization) |
|
基类,用于表示量化粒度。 |
|
浮点数如何映射为整数 |
|
表示量化中每个轴的粒度。 |
|
表示量化中的每块粒度。 |
|
表示量化中的通道组粒度。 |
|
表示量化中的行粒度。 |
|
表示量化中的张量粒度。 |
|
表示量化中的标记粒度。 |
|
PyTorch 核心中尚不存在的数据类型占位符。 |
|
指示 zero_point 是否在整数域或浮点域的枚举。 |
|
根据输入形状和粒度类型获取块大小。 |
torch.ao.quantization.fake_quantize¶
该模块实现了在 QAT 过程中执行伪量化的模块。
基础伪量化模块。 |
|
在训练时模拟量化和反量化操作。 |
|
在训练时模拟量化和反量化。 |
|
定义一个融合模块来观察张量。 |
|
默认的激活函数 fake_quant。 |
|
默认的权重 fake_quant。 |
|
默认的按通道权重 fake_quant。 |
|
激活使用的直方图伪量化。 |
|
默认_fake_quant 的融合版本,性能提升。 |
|
默认_weight_fake_quant 的融合版本,性能提升。 |
|
默认_per_channel_weight_fake_quant 的融合版本,性能提升。 |
|
禁用模块的伪量化。 |
|
启用模块的伪量化。 |
|
禁用此模块的观察。 |
|
启用此模块的观察。 |
torch.ao.quantization.qconfig
此模块定义 QConfig 对象,用于配置单个操作的反量化设置。
描述如何通过提供激活和权重各自的设置(观察器类)来量化层或网络的一部分。 |
|
默认 qconfig 配置。 |
|
默认的调试 qconfig 配置。 |
|
默认的按通道权重量化的 qconfig 配置。 |
|
默认的动态 qconfig。 |
|
将权重量化为 torch.float16 的动态 qconfig。 |
|
动态 qconfig,激活和权重均量化为 torch.float16。 |
|
动态 qconfig,按通道量化权重。 |
|
动态 qconfig,使用浮点零点量化权重。 |
|
QAT 的默认 qconfig。 |
|
仅对权重进行量化的默认 qconfig。 |
|
仅对激活进行量化的默认 qconfig。 |
|
默认_qat_config 的融合版本,具有性能优势。 |
torch.ao.nn.intrinsic¶
此模块实现了融合(融合)模块 conv + relu,然后可以进行量化。
这是一个调用 Conv1d 和 ReLU 模块的顺序容器。 |
|
这是一个调用 Conv2d 和 ReLU 模块的顺序容器。 |
|
这是一个调用 Conv3d 和 ReLU 模块的顺序容器。 |
|
这是一个调用线性模块和 ReLU 模块的顺序容器。 |
|
这是一个调用 1D 卷积模块和 1D 批量归一化模块的顺序容器。 |
|
这是一个调用 2D 卷积模块和 2D 批量归一化模块的顺序容器。 |
|
这是一个调用 3D 卷积模块和 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¶
此模块实现了量化感知训练所需的那些融合操作的版本。
由线性模块和 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
此模块实现了融合操作的量化实现,如卷积 + ReLU。由于在推理时通常会被折叠到卷积中,因此没有 BatchNorm 变体。
BNReLU2d 模块是 BatchNorm2d 和 ReLU 的融合模块 |
|
BNReLU3d 模块是 BatchNorm3d 和 ReLU 的融合模块 |
|
ConvReLU1d 模块是 Conv1d 和 ReLU 的融合模块 |
|
ConvReLU2d 模块是 Conv2d 和 ReLU 的融合模块 |
|
ConvReLU3d 模块是 Conv3d 和 ReLU 的融合模块 |
|
LinearReLU 模块是由 Linear 和 ReLU 模块融合而成的 |
torch.ao.nn.intrinsic.quantized.dynamic
此模块实现了融合操作的量化动态实现,如线性 + ReLU。
由线性模块和 ReLU 模块融合而成的 LinearReLU 模块,可用于动态量化。 |
torch.ao.nn.qat
此模块实现了 FP32 版本的 Conv2d()和 Linear()关键 nn 模块,并通过四舍五入来模拟 INT8 量化的效果。
用于量化感知训练的 Conv2d 模块,附加了用于权重的 FakeQuantize 模块。 |
|
用于量化感知训练的 Conv3d 模块,附加了用于权重的 FakeQuantize 模块。 |
|
用于量化感知训练的线性模块,附加了用于权重的 FakeQuantize 模块。 |
torch.ao.nn.qat.dynamic
此模块实现了关键 nn 模块的版本,如 Linear(),在 FP32 模式下运行,但通过舍入来模拟 INT8 量化的效果,并在推理过程中进行动态量化。
用于动态量化感知训练的附加 FakeQuantize 模块的线性模块。 |
torch.ao.nn.quantized
该模块实现了 nn 层的量化版本,例如~`torch.nn.Conv2d`和 torch.nn.ReLU。
应用逐元素函数: |
|
这是 |
|
这是 |
|
这是 |
|
这是 |
|
这是 |
|
这是 |
|
对由多个量化输入平面组成的量化输入信号应用 1D 卷积。 |
|
对由多个量化输入平面组成的量化输入信号应用 2D 卷积。 |
|
对由多个量化输入平面组成的量化输入信号应用 3D 卷积。 |
|
对由多个输入平面组成的输入图像应用 1D 转置卷积算子。 |
|
对由多个输入平面组成的输入图像应用 2D 转置卷积算子。 |
|
对由多个输入平面组成的输入图像应用 3D 转置卷积算子。 |
|
使用量化打包权重作为输入的量化嵌入模块。 |
|
带有量化打包权重的量化 EmbeddingBag 模块。 |
|
浮点操作的状态收集器类。 |
|
在 FX 图模式量化之前替换 FloatFunctional 模块的模块,因为激活后处理将直接插入顶层模块。 |
|
量化操作的包装类。 |
|
具有量化张量作为输入和输出的量化线性模块。 |
|
这是 |
|
这是 |
|
这是 |
|
这是 |
|
这是 |
torch.ao.nn.quantized.functional¶
功能接口(量化)。
此模块实现了功能层(如 ~`torch.nn.functional.conv2d` 和 torch.nn.functional.relu)的量化版本。注意: relu()
支持量化输入。
在 区域通过步长 步应用 2D 平均池化操作。 |
|
在 区域通过步长 步应用 3D 平均池化操作。 |
|
对由多个量化输入平面组成的量化输入信号应用 2D 自适应平均池化。 |
|
对由多个量化输入平面组成的量化输入信号应用 3D 自适应平均池化。 |
|
对由多个输入平面组成的量化 1D 输入应用 1D 卷积。 |
|
对由多个输入平面组成的量化 2D 输入应用 2D 卷积。 |
|
对由多个输入平面组成的量化 3D 输入应用 3D 卷积。 |
|
对输入进行下/上采样,使其变为给定的 |
|
对输入的量化数据进行线性变换: 。 |
|
对由多个量化输入平面组成的量化输入信号应用 1D 最大池化。 |
|
对由多个量化输入平面组成的量化输入信号应用 2D 最大池化。 |
|
应用逐元素量化的 CELU 函数。 |
|
量化版本的。 |
|
这是 |
|
这是 |
|
将阈值函数的量化版本逐元素应用: |
|
这是 |
|
这是 |
|
float(input, min_, max_) -> 张量 |
|
将输入上采样到给定的 |
|
使用双线性上采样对输入进行上采样。 |
|
使用最近邻像素值对输入进行上采样。 |
torch.ao.nn.quantizable
此模块实现了某些 nn 层的可量化版本。这些模块可以通过提供 custom_module_config
参数,在准备和转换时与自定义模块机制一起使用。
可量化的长短期记忆(LSTM) |
|
torch.ao.nn.quantized.dynamic
动态量化 Linear
, LSTM
, LSTMCell
, GRUCell
,和 RNNCell
。
输入输出为浮点张量的动态量化线性模块。 |
|
输入输出为浮点张量的动态量化 LSTM 模块。 |
|
将多层门控循环单元(GRU)RNN 应用于输入序列。 |
|
带有 tanh 或 ReLU 非线性函数的 Elman RNN 单元。 |
|
长短期记忆(LSTM)单元。 |
|
门控循环单元(GRU)细胞 |
量化数据类型和量化方案
注意,当前操作符实现仅支持卷积和线性操作符的通道量化。此外,输入数据按线性方式映射到量化数据,反之亦然,如下所示:
其中 与 clamp()
相同,而比例 和零点 的计算方法如 MinMaxObserver
所述,具体如下:
其中 表示输入数据的范围,而 和 分别是量化数据类型的最大值和最小值。
注意,选择 和 意味着当零在输入数据范围内或使用对称量化时,零可以用无量化误差来表示。
可以通过自定义操作符机制实现额外的数据类型和量化方案。
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 下的适当文件中,同时在此处添加导入语句。