捷徑

量化 API 參考

torch.ao.quantization

此模組包含 Eager 模式量化 API。

頂層 API

quantize

使用訓練後靜態量化來量化輸入浮點數模型。

quantize_dynamic

將浮點數模型轉換為動態(即

quantize_qat

進行量化感知訓練並輸出量化模型

prepare

準備模型的副本以進行量化校準或量化感知訓練。

prepare_qat

準備模型的副本以進行量化校準或量化感知訓練,並將其轉換為量化版本。

convert

透過在目標模組類別上呼叫 from_float 方法,根據 mapping 將輸入模組中的子模組轉換為不同的模組。

準備模型以進行量化

fuse_modules.fuse_modules

將模組清單融合成單一模組。

QuantStub

量化 stub 模組,在校準之前,這與觀察器相同,它將在 convert 中交換為 nnq.Quantize

DeQuantStub

反量化 stub 模組,在校準之前,這與識別相同,這將在 convert 中交換為 nnq.DeQuantize

QuantWrapper

包裝輸入模組的包裝類別,新增 QuantStub 和 DeQuantStub,並使用對量化和反量化模組的呼叫來包圍對模組的呼叫。

add_quant_dequant

如果葉子子模組具有有效的 qconfig,則將其包裝在 QuantWrapper 中。請注意,此函數將就地修改模組的子模組,並且它可以返回一個新的模組,該模組也包裝輸入模組。

實用函數

swap_module

如果模組具有量化對應項並且附加了 observer,則交換該模組。

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

從模型操作到 torch.ao.quantization.QConfig 的映射。

get_default_qconfig_mapping

返回訓練後量化的預設 QConfigMapping。

get_default_qat_qconfig_mapping

返回量化感知訓練的預設 QConfigMapping。

torch.ao.quantization.backend_config

此模組包含 BackendConfig,這是一個配置物件,用於定義如何在後端支援量化。目前僅由 FX 圖形模式量化使用,但我們可能會擴展 Eager 模式量化以使其也能使用它。

BackendConfig

定義可在給定後端上量化的模式集以及如何從這些模式生成參考量化模型的配置。

BackendPatternConfig

為給定運算子模式指定量化行為的配置物件。

DTypeConfig

配置物件,指定作為引數傳遞給參考模型規範中的量化操作的支援資料類型,用於輸入和輸出激活、權重和偏差。

DTypeWithConstraints

用於為給定 dtype 指定其他約束的配置,例如量化值範圍、比例值範圍和固定量化參數,用於 DTypeConfig 中。

ObservationType

表示應如何觀察運算子/運算子模式的不同方式的列舉

torch.ao.quantization.fx.custom_config

此模組包含一些在 Eager 模式和 FX 圖形模式量化中使用的 CustomConfig 類別

FuseCustomConfig

用於 fuse_fx() 的自訂配置。

PrepareCustomConfig

用於 prepare_fx()prepare_qat_fx() 的自訂配置。

ConvertCustomConfig

用於 convert_fx() 的自訂配置。

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

用於根據執行的每個通道最小值和最大值計算量化參數的觀察器模組。

HistogramObserver

該模組記錄張量值的執行直方圖以及最小值/最大值。

PlaceholderObserver

不做任何事情的觀察器,只將其配置傳遞給量化模組的 .from_float()

RecordingObserver

該模組主要用於除錯,並在執行時記錄張量值。

NoopObserver

不做任何事情的觀察器,只將其配置傳遞給量化模組的 .from_float()

get_observer_state_dict

返回與觀察器統計資訊相對應的狀態字典。

load_observer_state_dict

給定輸入模型和包含模型觀察器統計資訊的 state_dict,將統計資訊載入回模型中。

default_observer

靜態量化的預設觀察器,通常用於除錯。

default_placeholder_observer

預設的佔位符號觀察器,通常用於量化為 torch.float16。

default_debug_observer

僅限除錯的預設觀察器。

default_weight_observer

預設權重觀察器。

default_histogram_observer

預設直方圖觀察器,通常用於 PTQ。

default_per_channel_weight_observer

預設的逐通道權重觀察器,通常用於支援逐通道權重量化的後端,例如 fbgemm

default_dynamic_quant_observer

動態量化的預設觀察器。

default_float_qparams_observer

浮點零點的預設觀察器。

torch.ao.quantization.fake_quantize

此模組實作了在 QAT 期間用於執行偽量化的模組。

FakeQuantizeBase

基礎偽量化模組。

FakeQuantize

在訓練時間模擬量化和反量化操作。

FixedQParamsFakeQuantize

在訓練時間模擬量化和反量化。

FusedMovingAvgObsFakeQuantize

定義一個融合模組來觀察張量。

default_fake_quant

激活的預設 fake_quant。

default_weight_fake_quant

權重的預設 fake_quant。

default_per_channel_weight_fake_quant

逐通道權重的預設 fake_quant。

default_histogram_fake_quant

使用直方圖的激活的 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

權重量化為 torch.float16 的動態 qconfig。

float16_static_qconfig

激活和權重都量化為 torch.float16 的動態 qconfig。

per_channel_dynamic_qconfig

權重按通道量化的動態 qconfig。

float_qparams_weight_only_qconfig

使用浮點零點對權重量化的動態 qconfig。

default_qat_qconfig

QAT 的預設 qconfig。

default_weight_only_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

從 Linear 和 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

LinearReLU 模組是由 Linear 和 ReLU 模組組成的融合模組

torch.ao.nn.intrinsic.quantized.dynamic

此模組實現融合運算(如 linear + relu)的量化動態實現。

LinearReLU

LinearReLU 模組是由 Linear 和 ReLU 模組組成的融合模組,可用於動態量化。

torch.ao.nn.qat

此模組實現關鍵 nn 模組(如 Conv2d()Linear())的版本,這些模組以 FP32 運行,但應用四捨五入來模擬 INT8 量化的效果。

Conv2d

附加用於權重的 FakeQuantize 模組的 Conv2d 模組,用於量化感知訓練。

Conv3d

附加用於權重的 FakeQuantize 模組的 Conv3d 模組,用於量化感知訓練。

Linear

附加用於權重的 FakeQuantize 模組的線性模組,用於量化感知訓練。

torch.ao.nn.qat.dynamic

此模組實現關鍵 nn 模組(如 Linear())的版本,這些模組以 FP32 運行,但應用四捨五入來模擬 INT8 量化的效果,並將在推斷期間動態量化。

Linear

附加用於權重的 FakeQuantize 模組的線性模組,用於動態量化感知訓練。

torch.ao.nn.quantized

此模組實現 nn 層的量化版本,如 ~`torch.nn.Conv2d` 和 torch.nn.ReLU

ReLU6

套用逐元素函數

Hardswish

這是 Hardswish 的量化版本。

ELU

這是 ELU 的量化版本。

LeakyReLU

這是 LeakyReLU 的量化版本。

Sigmoid

這是 Sigmoid 的量化版本。

BatchNorm2d

這是 BatchNorm2d 的量化版本。

BatchNorm3d

這是 BatchNorm3d 的量化版本。

Conv1d

對由多個量化輸入平面組成的量化輸入信號套用一維卷積。

Conv2d

對由多個量化輸入平面組成的量化輸入信號套用二維卷積。

Conv3d

對由多個量化輸入平面組成的量化輸入信號套用三維卷積。

ConvTranspose1d

對由多個輸入平面組成的輸入圖像套用一維轉置卷積運算符。

ConvTranspose2d

對由多個輸入平面組成的輸入圖像套用二維轉置卷積運算符。

ConvTranspose3d

對由多個輸入平面組成的輸入圖像套用三維轉置卷積運算符。

Embedding

量化的 Embedding 模組,以量化的打包權重作為輸入。

EmbeddingBag

量化的 EmbeddingBag 模組,以量化的打包權重作為輸入。

FloatFunctional

浮點運算的狀態收集器類別。

FXFloatFunctional

在 FX 圖形模式量化之前替換 FloatFunctional 模組的模組,因為 activation_post_process 將直接插入頂層模組

QFunctional

量化運算的包裝器類別。

Linear

量化的線性模組,以量化張量作為輸入和輸出。

LayerNorm

這是 LayerNorm 的量化版本。

GroupNorm

這是 GroupNorm 的量化版本。

InstanceNorm1d

這是 InstanceNorm1d 的量化版本。

InstanceNorm2d

這是 InstanceNorm2d 的量化版本。

InstanceNorm3d

這是 InstanceNorm3d 的量化版本。

torch.ao.nn.quantized.functional

函數介面(量化)。

此模組實現函數層的量化版本,如 ~`torch.nn.functional.conv2d` 和 torch.nn.functional.relu。注意:relu() 支援量化輸入。

avg_pool2d

kH×kWkH \times kW 區域中以步長 sH×sWsH \times sW 套用二維平均池化運算。

avg_pool3d

kD timeskH×kWkD \ times kH \times kW 區域中以步長 sD×sH×sWsD \times sH \times sW 套用三維平均池化運算。

adaptive_avg_pool2d

對由多個量化輸入平面組成的量化輸入信號套用二維自適應平均池化。

adaptive_avg_pool3d

對由多個量化輸入平面組成的量化輸入信號套用三維自適應平均池化。

conv1d

對由多個輸入平面組成的一維量化輸入套用一維卷積。

conv2d

對由多個輸入平面組成的二維量化輸入套用二維卷積。

conv3d

對由多個輸入平面組成的三維量化輸入套用三維卷積。

interpolate

對輸入進行下/上採樣,使其達到指定的 sizescale_factor

linear

對輸入的量化資料套用線性轉換:y=xAT+by = xA^T + b

max_pool1d

對由多個量化輸入平面組成的量化輸入信號應用一維最大池化。

max_pool2d

對由多個量化輸入平面組成的量化輸入信號應用二維最大池化。

celu

逐元素應用量化 CELU 函數。

leaky_relu

量化版本的。

hardtanh

這是 hardtanh() 的量化版本。

hardswish

這是 hardswish() 的量化版本。

threshold

逐元素應用臨界值函數的量化版本。

elu

這是 elu() 的量化版本。

hardsigmoid

這是 hardsigmoid() 的量化版本。

clamp

float(input, min_, max_) -> Tensor

upsample

將輸入上採樣到指定的 size 或指定的 scale_factor

upsample_bilinear

使用雙線性上採樣方法對輸入進行上採樣。

upsample_nearest

使用最近鄰像素值對輸入進行上採樣。

torch.ao.nn.quantizable

此模組實作了一些 nn 層的可量化版本。這些模組可以與自訂模組機制結合使用,方法是提供 custom_module_config 參數給準備和轉換。

LSTM

可量化的長短期記憶網路 (LSTM)。

MultiheadAttention

torch.ao.nn.quantized.dynamic

動態量化的 LinearLSTMLSTMCellGRUCellRNNCell

Linear

動態量化的線性模組,以浮點數張量作為輸入和輸出。

LSTM

動態量化的 LSTM 模組,以浮點數張量作為輸入和輸出。

GRU

對輸入序列應用多層閘控循環單元 (GRU) RNN。

RNNCell

具有 tanh 或 ReLU 非線性的 Elman RNN 細胞。

LSTMCell

長短期記憶網路 (LSTM) 細胞。

GRUCell

閘控循環單元 (GRU) 細胞。

量化資料類型和量化方案

請注意,運算子實作目前僅支援 convlinear 運算子的權重的逐通道量化。此外,輸入資料會線性映射到量化資料,反之亦然,如下所示:

量化:Qout=clamp(xinput/s+z,Qmin,Qmax)反量化:xout=(Qinputz)s\begin{aligned} \text{量化:}&\\ &Q_\text{out} = \text{clamp}(x_\text{input}/s+z, Q_\text{min}, Q_\text{max})\\ \text{反量化:}&\\ &x_\text{out} = (Q_\text{input}-z)*s \end{aligned}

其中 clamp(.)\text{clamp}(.)clamp() 相同,而比例 ss 和零點 zz 的計算方式如 MinMaxObserver 中所述,具體來說:

若為對稱:s=2max(x最小值,x最大值)/(Q最大值Q最小值)z={0若資料類型為 qint8128否則否則:s=(x最大值x最小值)/(Q最大值Q最小值)z=Q最小值round(x最小值/s)\begin{aligned} \text{若為對稱:}&\\ &s = 2 \max(|x_\text{最小值}|, x_\text{最大值}) / \left( Q_\text{最大值} - Q_\text{最小值} \right) \\ &z = \begin{cases} 0 & \text{若資料類型為 qint8} \\ 128 & \text{否則} \end{cases}\\ \text{否則:}&\\ &s = \left( x_\text{最大值} - x_\text{最小值} \right ) / \left( Q_\text{最大值} - Q_\text{最小值} \right ) \\ &z = Q_\text{最小值} - \text{round}(x_\text{最小值} / s) \end{aligned}

其中 [xmin,xmax][x_\text{min}, x_\text{max}] 表示輸入資料的範圍,而 QminQ_\text{min}QmaxQ_\text{max} 分別是量化資料類型的最小值和最大值。

請注意,選擇 sszz 表示,當零在輸入資料範圍內或使用對稱量化時,零的表示沒有量化誤差。

可以透過 自定義運算子機制 來實作其他資料類型和量化方案。

  • 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/ 下的適當檔案,同時在此處新增 import 語句。

QAT 動態模組。

此套件正在棄用中。請改用 torch.ao.nn.qat.dynamic

量化模組。

注意:

torch.nn.quantized 命名空間正在棄用中。請改用 torch.ao.nn.quantized

量化動態模組。

此檔案正在遷移至 torch/ao/nn/quantized/dynamic,並在此保留以確保相容性,同時遷移過程正在進行中。如果您要新增項目/功能,請將其新增至 torch/ao/nn/quantized/dynamic 下的適當檔案,同時在此處新增 import 語句。

文件

取得 PyTorch 的完整開發人員文件

檢視文件

教學課程

取得適用於初學者和進階開發人員的深入教學課程

檢視教學課程

資源

尋找開發資源並獲得問題解答

檢視資源