量化 API 參考¶
torch.ao.quantization¶
此模組包含 Eager 模式量化 API。
頂層 API¶
| 使用訓練後靜態量化來量化輸入浮點數模型。 | |
| 將浮點數模型轉換為動態(即 | |
| 進行量化感知訓練並輸出量化模型 | |
| 準備模型的副本以進行量化校準或量化感知訓練。 | |
| 準備模型的副本以進行量化校準或量化感知訓練,並將其轉換為量化版本。 | |
| 透過在目標模組類別上呼叫 from_float 方法,根據 mapping 將輸入模組中的子模組轉換為不同的模組。 | 
準備模型以進行量化¶
| 將模組清單融合成單一模組。 | |
| 量化 stub 模組,在校準之前,這與觀察器相同,它將在 convert 中交換為 nnq.Quantize。 | |
| 反量化 stub 模組,在校準之前,這與識別相同,這將在 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 模式量化以使其也能使用它。
| 定義可在給定後端上量化的模式集以及如何從這些模式生成參考量化模型的配置。 | |
| 為給定運算子模式指定量化行為的配置物件。 | |
| 配置物件,指定作為引數傳遞給參考模型規範中的量化操作的支援資料類型,用於輸入和輸出激活、權重和偏差。 | |
| 用於為給定 dtype 指定其他約束的配置,例如量化值範圍、比例值範圍和固定量化參數,用於  | |
| 表示應如何觀察運算子/運算子模式的不同方式的列舉 | 
torch.ao.quantization.fx.custom_config¶
此模組包含一些在 Eager 模式和 FX 圖形模式量化中使用的 CustomConfig 類別
| 用於  | |
| 用於  | |
| 用於  | |
torch.ao.quantization.quantizer¶
torch.ao.quantization.pt2e(pytorch 2.0 匯出實作中的量化)¶
torch.ao.quantization.pt2e.export_utils¶
| 如果 torch.nn.Module 已匯出,則返回 True,否則返回 False(例如 | 
torch.ao.quantization.observer¶
此模組包含用於收集在校準 (PTQ) 或訓練 (QAT) 期間觀察到的值統計資訊的觀察器。
| 基礎觀察器模組。 | |
| 用於根據執行的最小值和最大值計算量化參數的觀察器模組。 | |
| 用於根據最小值和最大值的移動平均值計算量化參數的觀察器模組。 | |
| 用於根據執行的每個通道最小值和最大值計算量化參數的觀察器模組。 | |
| 用於根據執行的每個通道最小值和最大值計算量化參數的觀察器模組。 | |
| 該模組記錄張量值的執行直方圖以及最小值/最大值。 | |
| 不做任何事情的觀察器,只將其配置傳遞給量化模組的  | |
| 該模組主要用於除錯,並在執行時記錄張量值。 | |
| 不做任何事情的觀察器,只將其配置傳遞給量化模組的  | |
| 返回與觀察器統計資訊相對應的狀態字典。 | |
| 給定輸入模型和包含模型觀察器統計資訊的 state_dict,將統計資訊載入回模型中。 | |
| 靜態量化的預設觀察器,通常用於除錯。 | |
| 預設的佔位符號觀察器,通常用於量化為 torch.float16。 | |
| 僅限除錯的預設觀察器。 | |
| 預設權重觀察器。 | |
| 預設直方圖觀察器,通常用於 PTQ。 | |
| 預設的逐通道權重觀察器,通常用於支援逐通道權重量化的後端,例如 fbgemm。 | |
| 動態量化的預設觀察器。 | |
| 浮點零點的預設觀察器。 | 
torch.ao.quantization.fake_quantize¶
此模組實作了在 QAT 期間用於執行偽量化的模組。
| 基礎偽量化模組。 | |
| 在訓練時間模擬量化和反量化操作。 | |
| 在訓練時間模擬量化和反量化。 | |
| 定義一個融合模組來觀察張量。 | |
| 激活的預設 fake_quant。 | |
| 權重的預設 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。 | |
| 使用浮點零點對權重量化的動態 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¶
此模組實現融合運算(如 conv + 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¶
此模組實現融合運算(如 linear + relu)的量化動態實現。
| LinearReLU 模組是由 Linear 和 ReLU 模組組成的融合模組,可用於動態量化。 | 
torch.ao.nn.qat¶
此模組實現關鍵 nn 模組(如 Conv2d() 和 Linear())的版本,這些模組以 FP32 運行,但應用四捨五入來模擬 INT8 量化的效果。
| 附加用於權重的 FakeQuantize 模組的 Conv2d 模組,用於量化感知訓練。 | |
| 附加用於權重的 FakeQuantize 模組的 Conv3d 模組,用於量化感知訓練。 | |
| 附加用於權重的 FakeQuantize 模組的線性模組,用於量化感知訓練。 | 
torch.ao.nn.qat.dynamic¶
此模組實現關鍵 nn 模組(如 Linear())的版本,這些模組以 FP32 運行,但應用四捨五入來模擬 INT8 量化的效果,並將在推斷期間動態量化。
| 附加用於權重的 FakeQuantize 模組的線性模組,用於動態量化感知訓練。 | 
torch.ao.nn.quantized¶
此模組實現 nn 層的量化版本,如 ~`torch.nn.Conv2d` 和 torch.nn.ReLU。
| 套用逐元素函數 | |
| 這是  | |
| 這是  | |
| 這是  | |
| 這是  | |
| 這是  | |
| 這是  | |
| 對由多個量化輸入平面組成的量化輸入信號套用一維卷積。 | |
| 對由多個量化輸入平面組成的量化輸入信號套用二維卷積。 | |
| 對由多個量化輸入平面組成的量化輸入信號套用三維卷積。 | |
| 對由多個輸入平面組成的輸入圖像套用一維轉置卷積運算符。 | |
| 對由多個輸入平面組成的輸入圖像套用二維轉置卷積運算符。 | |
| 對由多個輸入平面組成的輸入圖像套用三維轉置卷積運算符。 | |
| 量化的 Embedding 模組,以量化的打包權重作為輸入。 | |
| 量化的 EmbeddingBag 模組,以量化的打包權重作為輸入。 | |
| 浮點運算的狀態收集器類別。 | |
| 在 FX 圖形模式量化之前替換 FloatFunctional 模組的模組,因為 activation_post_process 將直接插入頂層模組 | |
| 量化運算的包裝器類別。 | |
| 量化的線性模組,以量化張量作為輸入和輸出。 | |
| 這是  | |
| 這是  | |
| 這是  | |
| 這是  | |
| 這是  | 
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。
| 動態量化的線性模組,以浮點數張量作為輸入和輸出。 | |
| 動態量化的 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/ 下的適當檔案,同時在此處新增 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 語句。