量化 API 参考¶
torch.ao.quantization¶
此模块包含 Eager 模式的量化 API。
顶层 API¶
使用训练后静态量化对输入的浮点模型进行量化。 |
|
将浮点模型转换为动态(即... |
|
执行量化感知训练并输出量化模型 |
|
准备模型的副本,用于量化校准或量化感知训练。 |
|
准备模型的副本用于量化校准或量化感知训练,并将其转换为量化版本。 |
|
根据 mapping 将输入模块中的子模块转换为不同的模块,通过调用目标模块类上的 from_float 方法实现。 |
准备模型进行量化¶
将模块列表融合为一个模块。 |
|
量化存根模块,在校准之前,它与观察者相同,将在 convert 中被替换为 nnq.Quantize。 |
|
反量化存根模块,在校准之前,它与 identity 相同,将在 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¶
此模块包含一些 CustomConfig 类,它们在 eager 模式和 FX 图模式量化中都使用
|
|
|
|
|
|
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 的图模块中的所有节点(如 conv2d、squeeze、conv1d 等,占位符除外)附加 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 (int) 映射到张量列表的字典,返回一个将 debug_handle_id 映射到 NodeAccuracySummary 的字典,其中包含 SQNR、MSE 等比较信息。 |
torch.ao.quantization.observer¶
此模块包含观察者,用于收集校准 (PTQ) 或训练 (QAT) 期间观察到的值的统计信息。
基础观察者模块。 |
|
基于运行中的最小值和最大值计算量化参数的观察者模块。 |
|
基于最小值和最大值移动平均值计算量化参数的观察者模块。 |
|
基于运行中的逐通道最小值和最大值计算量化参数的观察者模块。 |
|
基于运行中的逐通道最小值和最大值计算量化参数的观察者模块。 |
|
该模块记录张量值的运行直方图以及最小值/最大值。 |
|
一个不做任何事情的观察者,仅将其配置传递给量化模块的 |
|
该模块主要用于调试,并在运行时记录张量值。 |
|
一个不做任何事情的观察者,仅将其配置传递给量化模块的 |
|
返回对应于观察者统计信息的 state dict。 |
|
给定输入模型和一个包含模型观察者统计信息的 state_dict,将统计信息加载回模型中。 |
|
静态量化的默认观察者,通常用于调试。 |
|
默认占位符观察者,通常用于量化到 torch.float16。 |
|
默认仅用于调试的观察者。 |
|
默认权重观察者。 |
|
默认直方图观察者,通常用于 PTQ。 |
|
默认逐通道权重观察者,通常用于支持逐通道权重量化的后端,例如 fbgemm。 |
|
动态量化的默认观察者。 |
|
浮点 zero-point 的默认观察者。 |
|
仿射量化观察者模块 (https://github.com/pytorch/ao/tree/main/torchao/quantization#affine-quantization) |
|
表示量化粒度的基类。 |
|
浮点数如何映射到整数 |
|
表示量化中的逐轴粒度。 |
|
表示量化中的逐块粒度。 |
|
表示量化中的逐通道组粒度。 |
|
表示量化中的逐行粒度。 |
|
表示量化中的逐张量粒度。 |
|
表示量化中的逐 token 粒度。 |
|
尚不存在于 PyTorch 核心中的数据类型的占位符。 |
|
一个枚举,指示 zero_point 是在整数域还是浮点域中 |
|
根据输入形状和粒度类型获取块大小。 |
torch.ao.quantization.fake_quantize¶
此模块实现了在 QAT 期间用于执行伪量化的模块。
基础伪量化模块。 |
|
在训练期间模拟量化和反量化操作。 |
|
在训练期间模拟量化和反量化。 |
|
定义一个融合模块来观察张量。 |
|
激活的默认 fake_quant。 |
|
权重的默认 fake_quant。 |
|
逐通道权重的默认 fake_quant。 |
|
使用直方图对激活进行伪量化。 |
|
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。 |
|
权重使用浮点 zero_point 量化的动态 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¶
此模块实现了卷积+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等融合操作的量化动态实现。
一个由Linear和ReLU模块融合而成的LinearReLU模块,可用于动态量化。 |
torch.ao.nn.qat¶
此模块实现了关键nn模块(如Conv2d()和Linear())的版本,它们在FP32中运行,但应用了舍入以模拟INT8量化的效果。
一个附带用于权重的FakeQuantize模块的Conv2d模块,用于量化感知训练。 |
|
一个附带用于权重的FakeQuantize模块的Conv3d模块,用于量化感知训练。 |
|
一个附带用于权重的FakeQuantize模块的Linear模块,用于量化感知训练。 |
torch.ao.nn.qat.dynamic¶
此模块实现了关键nn模块(如Linear())的版本,它们在FP32中运行,但应用了舍入以模拟INT8量化的效果,并在推理期间动态量化。
一个附带用于权重的FakeQuantize模块的Linear模块,用于动态量化感知训练。 |
torch.ao.nn.quantized¶
此模块实现了nn层(如~`torch.nn.Conv2d`和torch.nn.ReLU)的量化版本。
应用逐元素函数 |
|
这是 |
|
这是 |
|
这是 |
|
这是 |
|
这是 |
|
这是 |
|
对由多个量化输入平面组成的量化输入信号应用一维卷积。 |
|
对由多个量化输入平面组成的量化输入信号应用二维卷积。 |
|
对由多个量化输入平面组成的量化输入信号应用三维卷积。 |
|
对由多个输入平面组成的输入图像应用一维转置卷积运算。 |
|
对由多个输入平面组成的输入图像应用二维转置卷积运算。 |
|
对由多个输入平面组成的输入图像应用三维转置卷积运算。 |
|
一种量化Embedding模块,使用量化打包权重作为输入。 |
|
一种量化EmbeddingBag模块,使用量化打包权重作为输入。 |
|
用于浮点运算的状态收集器类。 |
|
在FX图模式量化之前用于替换FloatFunctional模块的模块,因为activation_post_process将直接插入到顶层模块中。 |
|
量化运算的包装器类。 |
|
一种量化Linear模块,使用量化张量作为输入和输出。 |
|
这是 |
|
这是 |
|
这是 |
|
这是 |
|
这是 |
torch.ao.nn.quantized.functional¶
函数式接口(量化)。
此模块实现了函数层(如~`torch.nn.functional.conv2d`和torch.nn.functional.relu)的量化版本。注意:relu()
支持量化输入。
在区域应用二维平均池化运算,步长为。 |
|
在区域应用三维平均池化运算,步长为。 |
|
对由多个量化输入平面组成的量化输入信号应用二维自适应平均池化。 |
|
对由多个量化输入平面组成的量化输入信号应用三维自适应平均池化。 |
|
对由多个输入平面组成的量化一维输入应用一维卷积。 |
|
对由多个输入平面组成的量化二维输入应用二维卷积。 |
|
对由多个输入平面组成的量化三维输入应用三维卷积。 |
|
将输入下采样/上采样到给定的 |
|
对输入的量化数据应用线性变换:。 |
|
对由多个量化输入平面组成的量化输入信号应用一维最大池化。 |
|
对由多个量化输入平面组成的量化输入信号应用二维最大池化。 |
|
逐元素应用量化CELU函数。 |
|
的量化版本。 |
|
这是 |
|
这是 |
|
逐元素应用阈值函数的量化版本 |
|
这是 |
|
这是 |
|
float(input, min_, max_) -> Tensor |
|
将输入上采样到给定的 |
|
使用双线性上采样对输入进行上采样。 |
|
使用最近邻像素值对输入进行上采样。 |
torch.ao.nn.quantizable¶
此模块实现了一些nn层的可量化版本。这些模块可以与自定义模块机制结合使用,通过在准备和转换时提供custom_module_config
参数来实现。
一种可量化的长短期记忆(LSTM)模块。 |
|
torch.ao.nn.quantized.dynamic¶
动态量化的Linear
、LSTM
、LSTMCell
、GRUCell
和RNNCell
。
一种动态量化的Linear模块,使用浮点张量作为输入和输出。 |
|
一种动态量化的LSTM模块,使用浮点张量作为输入和输出。 |
|
将多层门控循环单元(GRU)RNN应用于输入序列。 |
|
具有tanh或ReLU非线性的Elman RNN单元。 |
|
一种长短期记忆(LSTM)单元。 |
|
一种门控循环单元(GRU)单元 |
量化数据类型和量化方案¶
请注意,运算符实现目前仅支持对conv和linear运算符权重进行逐通道量化。此外,输入数据按如下方式线性映射到量化数据,反之亦然:
其中与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位有符号整数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 下的相应文件中,并在此处添加导入语句。