量化 API 参考¶
torch.ao.quantization¶
此模块包含急切模式量化API。
顶级API¶
quantize |
使用训练后静态量化对输入的浮点模型进行量化。 |
quantize_dynamic |
将浮点模型转换为动态(即 |
quantize_qat |
进行量化感知训练并输出一个量化模型 |
准备 |
准备用于量化校准或量化感知训练的模型副本。 |
prepare_qat |
准备模型的量化校准或量化感知训练的副本,并将其转换为量化版本。 |
转换 |
根据mapping将输入模块中的子模块转换为不同的模块,通过在目标模块类上调用from_float方法。 |
准备量化模型¶
将模块列表合并为一个模块。 |
|
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 |
从模型操作映射到 |
获取默认的qconfig映射 |
返回用于训练后量化的默认 QConfigMapping。 |
get_default_qat_qconfig_mapping |
返回用于量化感知训练的默认 QConfigMapping。 |
torch.ao.quantization.backend_config¶
此模块包含 BackendConfig,一个配置对象,定义了如何在后端支持量化。目前仅由 FX 图模式量化使用,但我们可能会扩展 Eager 模式量化以与此配合使用。
BackendConfig |
配置定义了可以在给定后端上量化的模式集,以及如何从这些模式生成参考量化模型。 |
BackendPatternConfig |
配置对象,用于指定给定操作符模式的量化行为。 |
DTypeConfig |
配置对象,用于指定在参考模型规范中作为参数传递给量化操作的支持数据类型,适用于输入和输出激活值、权重和偏置。 |
DTypeWithConstraints |
用于为给定数据类型指定附加约束的配置,例如量化值范围、比例值范围和固定量化参数,以便在 |
观察类型 |
一个枚举,表示观察操作符/操作符模式的不同方式 |
torch.ao.quantization.fx.custom_config¶
此模块包含一些在急切模式和FX图模式量化中使用的CustomConfig类
FuseCustomConfig |
自定义配置用于 |
PrepareCustomConfig |
自定义配置用于 |
ConvertCustomConfig |
自定义配置用于 |
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 |
用于基于运行时的每个通道的最小值和最大值计算量化参数的观察模块。 |
直方图观察器 |
该模块记录张量值的运行直方图以及最小/最大值。 |
占位符观察者 |
观察者不做任何事情,只是将其配置传递给量化模块的 |
RecordingObserver |
该模块主要用于调试,并在运行时记录张量值。 |
NoopObserver |
观察者不做任何事情,只是将其配置传递给量化模块的 |
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 |
这是 |
ELU |
这是 |
LeakyReLU |
这是 |
Sigmoid |
这是 |
BatchNorm2d |
这是 |
BatchNorm3d |
这是 |
Conv1d |
对由多个量化输入平面组成的量化输入信号应用一维卷积。 |
Conv2d |
对由多个量化输入平面组成的量化输入信号应用二维卷积。 |
Conv3d |
对由多个量化输入平面组成的量化输入信号进行3D卷积操作。 |
ConvTranspose1d |
对由多个输入平面组成的输入图像应用一维转置卷积运算符。 |
ConvTranspose2d |
对由多个输入平面组成的输入图像应用二维转置卷积运算符。 |
ConvTranspose3d |
对由多个输入平面组成的输入图像应用3D转置卷积运算符。 |
嵌入 |
一个使用量化打包权重作为输入的量化嵌入模块。 |
EmbeddingBag |
一个使用量化打包权重作为输入的量化EmbeddingBag模块。 |
FloatFunctional |
用于浮点操作的状态收集器类。 |
FXFloatFunctional |
在FX图模式量化之前替换FloatFunctional模块的模块,因为activation_post_process将直接插入到顶层模块中 |
QFunctional |
用于量化操作的包装类。 |
线性 |
一个使用量化张量作为输入和输出的量化线性模块。 |
LayerNorm |
这是 |
GroupNorm |
这是 |
InstanceNorm1d |
这是 |
InstanceNorm2d |
这是 |
InstanceNorm3d |
这是 |
torch.ao.nn.quantized.functional¶
函数式接口(量化)。
此模块实现了诸如~`torch.nn.functional.conv2d` 和 torch.nn.functional.relu 等函数层的量化版本。注意:
relu() 支持量化输入。
avg_pool2d |
在 区域中应用2D平均池化操作,步长为 。 |
avg_pool3d |
在 区域中应用3D平均池化操作,步长为 。 |
adaptive_avg_pool2d |
对由多个量化输入平面组成的量化输入信号应用二维自适应平均池化。 |
adaptive_avg_pool3d |
对由多个量化输入平面组成的量化输入信号应用3D自适应平均池化。 |
conv1d |
对由多个输入平面组成的量化1D输入进行1D卷积操作。 |
conv2d |
对由多个输入平面组成的量化2D输入进行2D卷积操作。 |
conv3d |
对由多个输入平面组成的量化3D输入进行3D卷积操作。 |
interpolate |
对输入进行下采样或上采样,以达到给定的 |
线性 |
对传入的量化数据应用线性变换:. |
max_pool1d |
对由多个量化输入平面组成的量化输入信号应用一维最大池化。 |
max_pool2d |
对由多个量化输入平面组成的量化输入信号应用2D最大池化。 |
celu |
逐元素应用量化CELU函数。 |
leaky_relu |
量化的版本。 |
hardtanh |
这是 |
hardswish |
这是 |
threshold |
对阈值函数的量化版本进行逐元素应用: |
elu |
这是 |
hardsigmoid |
这是 |
clamp |
float(input, min_, max_) -> 张量 |
upsample |
将输入上采样到给定的 |
双线性上采样 |
使用双线性上采样对输入进行上采样。 |
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) 细胞 |
量化数据类型和量化方案¶
请注意,操作符实现目前仅支持卷积和线性操作符权重的逐通道量化。此外,输入数据按照以下方式线性地映射到量化数据,反之亦然:
其中 与 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。
量化模块。
- Note::
正在弃用 torch.nn.quantized 命名空间。 请改用 torch.ao.nn.quantized。
量化动态模块。
此文件正在迁移到 torch/ao/nn/quantized/dynamic, 为了兼容性,迁移过程中仍保留在此处。 如果您正在添加新条目/功能,请将其添加到 torch/ao/nn/quantized/dynamic 下的相应文件中, 同时在此处添加导入语句。