量化 API 參考#
創建於: 2020年7月25日 | 最後更新於: 2025年6月18日
torch.ao.quantization#
該模組包含 Eager 模式下的量化 API。
頂級 API#
使用訓練後靜態量化對輸入浮點模型進行量化。 |
|
將浮點模型轉換為動態(即 |
|
進行量化感知訓練並輸出量化模型 |
|
準備模型副本以進行量化校準或量化感知訓練。 |
|
準備模型副本以進行量化校準或量化感知訓練,並將其轉換為量化版本。 |
|
根據 mapping,透過呼叫目標模組類的 from_float 方法,將輸入模組中的子模組轉換為不同的模組。 |
準備模型以進行量化#
將模組列表融合成一個單一的模組。 |
|
量化存根模組,在校準之前,它與觀察器相同,將在 convert 中被替換為 nnq.Quantize。 |
|
反量化存根模組,在校準之前,它與恆等函式相同,將在 convert 中被替換為 nnq.DeQuantize。 |
|
一個包裝類,用於包裝輸入模組,新增 QuantStub 和 DeQuantStub,並將模組的呼叫圍繞量化和反量化模組的呼叫。 |
|
如果葉子子模組具有有效的 qconfig,則將其包裝在 QuantWrapper 中。請注意,此函式將就地修改模組的子模組,並且還可以返回一個包裝輸入模組的新模組。 |
實用函式#
如果模組具有量化對應項並且附加了 observer,則替換該模組。 |
|
透過模組層級結構傳播 qconfig,並在每個葉子模組上分配 qconfig 屬性。 |
|
定義預設的評估函式。 |
torch.ao.quantization.quantize_fx#
該模組包含 FX 圖模式量化的 API(原型)。
準備模型以進行訓練後量化。 |
|
準備模型以進行量化感知訓練。 |
|
將已校準或訓練過的模型轉換為量化模型。 |
|
融合模組,如 conv+bn、conv+bn+relu 等。模型必須處於 eval 模式。 |
torch.ao.quantization.qconfig_mapping#
該模組包含 QConfigMapping,用於配置 FX 圖模式量化。
模型操作到 |
|
返回用於訓練後量化的預設 QConfigMapping。 |
|
返回用於量化感知訓練的預設 QConfigMapping。 |
torch.ao.quantization.backend_config#
該模組包含 BackendConfig,一個配置物件,用於定義量化在後端中如何被支援。目前僅由 FX 圖模式量化使用,但我們可能會擴充套件 Eager 模式量化以使其也能工作。
定義給定後端可以量化的模式集,以及如何從這些模式生成參考量化模型的配置。 |
|
指定給定運算子模式的量化行為的配置物件。 |
|
指定參考模型規範中用於量化操作的啟用、權重和偏置的輸入和輸出資料的支援資料型別的配置物件。 |
|
用於指定給定 dtype 的附加約束的配置,例如量化值範圍、比例值範圍和固定量化引數,用於 |
|
一個列舉,表示運算子/運算子模式應如何被觀察的各種方式。 |
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(例如。 |
torch.ao.quantization.pt2e.lowering#
將 PT2E 量化的模型降低到 x86 後端。 |
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(整數)到張量列表的對映,返回一個從 debug_handle_id 到 NodeAccuracySummary 的對映,其中包含 SQNR、MSE 等比較資訊。 |
torch.ao.quantization.observer#
該模組包含觀察器,用於在校準(PTQ)或訓練(QAT)期間收集值的統計資訊。
基礎觀察器模組。 |
|
基於執行的 min 和 max 值計算量化引數的觀察器模組。 |
|
基於 min 和 max 值的移動平均值計算量化引數的觀察器模組。 |
|
用於基於執行時的逐通道最小/最大值計算量化引數的觀察者模組。 |
|
用於基於執行時的逐通道最小/最大值計算量化引數的觀察者模組。 |
|
該模組記錄張量值的執行直方圖以及 min/max 值。 |
|
一個不執行任何操作的觀察器,僅將其配置傳遞給量化模組的 |
|
該模組主要用於除錯,並記錄執行時張量值。 |
|
一個不執行任何操作的觀察器,僅將其配置傳遞給量化模組的 |
|
返回對應於觀察器統計資訊的 state dict。 |
|
給定輸入模型和包含模型觀察器統計資訊的 state_dict,將統計資訊載入回模型。 |
|
靜態量化的預設觀察器,通常用於除錯。 |
|
預設佔位符觀察器,通常用於量化到 torch.float16。 |
|
預設僅用於除錯的觀察器。 |
|
預設權重觀察器。 |
|
預設直方圖觀察器,通常用於 PTQ。 |
|
預設逐通道權重觀察器,通常用於支援逐通道權重量化的後端,例如 fbgemm。 |
|
動態量化的預設觀察器。 |
|
浮點零點的預設觀察器。 |
|
仿射量化的觀察器模組(pytorch/ao)。 |
|
表示量化粒度的基類。 |
|
浮點數如何對映到整數 |
|
表示量化中的逐軸粒度。 |
|
表示量化中的逐塊粒度。 |
|
表示量化中的逐通道組粒度。 |
|
表示量化中的逐行粒度。 |
|
表示量化中的逐張量粒度。 |
|
表示量化中的逐 token 粒度。 |
|
PyTorch 核心中尚不存在的資料型別的佔位符。 |
|
列舉,指示零點是在整數域還是浮點域 |
|
根據輸入形狀和粒度型別獲取塊大小。 |
torch.ao.quantization.fake_quantize#
該模組實現了在 QAT 期間用於執行虛假量化的模組。
基礎虛假量化模組。 |
|
在訓練時模擬量化和反量化操作。 |
|
在訓練時模擬量化和反量化。 |
|
定義一個用於觀察張量的融合模組。 |
|
啟用的預設虛假量化。 |
|
權重的預設虛假量化。 |
|
逐通道權重的預設虛假量化。 |
|
使用直方圖的啟用的虛假量化。 |
|
預設 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)的量化動態實現。
由 Linear 和 ReLU 模組融合的 LinearReLU 模組,可用於動態量化。 |
torch.ao.nn.qat#
該模組實現了關鍵 nn 模組 **Conv2d()** 和 **Linear()** 的版本,它們在 FP32 下執行,但應用了舍入以模擬 INT8 量化的效果。
torch.ao.nn.qat.dynamic#
該模組實現了關鍵 nn 模組(如 **Linear()**)的版本,它們在 FP32 下執行,但應用了舍入以模擬 INT8 量化的效果,並在推理時進行動態量化。
附加了用於權重的 FakeQuantize 模組的線性模組,用於動態量化感知訓練。 |
torch.ao.nn.quantized#
該模組實現了 nn 層(如 ~torch.nn.Conv2d 和 torch.nn.ReLU)的量化版本。
逐元素應用函式。 |
|
這是 |
|
這是 |
|
這是 |
|
這是 |
|
這是 |
|
這是 |
|
對由多個量化輸入平面組成的量化輸入訊號應用一維卷積。 |
|
對由多個量化輸入平面組成的量化輸入訊號應用二維卷積。 |
|
對由多個量化輸入平面組成的量化輸入訊號應用三維卷積。 |
|
對由多個輸入平面組成的輸入影像應用 1D 轉置卷積運算子。 |
|
對由多個輸入平面組成的輸入影像應用 2D 轉置卷積運算子。 |
|
對由多個輸入平面組成的輸入影像應用 3D 轉置卷積運算元。 |
|
一個量化的 Embedding 模組,具有量化的打包權重作為輸入。 |
|
一個量化的 EmbeddingBag 模組,具有量化的打包權重作為輸入。 |
|
浮點操作的狀態收集器類。 |
|
在 FX 圖模式量化之前替換 FloatFunctional 模組的模組,因為 activation_post_process 將直接插入到頂級模組中。 |
|
量化操作的包裝類。 |
|
一個量化的線性模組,具有量化張量作為輸入和輸出。 |
|
這是 |
|
這是 |
|
這是 |
|
這是 |
|
這是 |
torch.ao.nn.quantized.functional#
函式介面(量化)。
該模組實現了函式式層(如 ~torch.nn.functional.conv2d 和 torch.nn.functional.relu)的量化版本。注意: 支援量化輸入。
區域上的二維平均池化操作,步長為 。 |
|
在 區域上的三維平均池化操作,步長為 。 |
|
對由多個量化輸入平面組成的量化輸入訊號應用二維自適應平均池化。 |
|
對由多個量化輸入平面組成的量化輸入訊號應用三維自適應平均池化。 |
|
對量化一維輸入(由多個輸入平面組成)應用一維卷積。 |
|
對量化二維輸入(由多個輸入平面組成)應用二維卷積。 |
|
對量化三維輸入(由多個輸入平面組成)應用三維卷積。 |
|
將輸入下/上取樣到給定的 |
|
對傳入的量化資料應用線性變換:。 |
|
對量化輸入訊號(由多個量化輸入平面組成)應用一維最大池化。 |
|
對量化輸入訊號(由多個量化輸入平面組成)應用二維最大池化。 |
|
逐元素應用量化的 CELU 函式。 |
|
的量化版本。 |
|
這是 |
|
這是 |
|
逐元素應用閾值函式的量化版本。 |
|
這是 |
|
這是 |
|
float(input, min_, max_) -> Tensor |
|
將輸入上取樣到給定的 |
|
使用雙線性上取樣對輸入進行上取樣。 |
|
使用最近鄰畫素值對輸入進行上取樣。 |
torch.ao.nn.quantizable#
該模組實現了某些 nn 層(如 LSTM)的可量化版本。這些模組可以與自定義模組機制結合使用,透過向 prepare 和 convert 引數提供 custom_module_config 來實現。
可量化的長短期記憶(LSTM)。 |
|
torch.ao.nn.quantized.dynamic#
量化資料型別和量化方案#
請注意,運算子實現目前僅支援 **conv** 和 **linear** 運算子權重的逐通道量化。此外,輸入資料以線性方式對映到量化資料,反之亦然,如下所示:
其中 :math:clamp 與 clamp() 相同,而比例 和零點 的計算方法如 MinMaxObserver 中所述,具體為:
其中 :math:[x_\text{min}, x_\text{max}] 表示輸入資料的範圍,而 :math:Q_\text{min} 和 :math:Q_\text{max} 分別是量化資料型別的最小值和最大值。
請注意,:math:s 和 :math:z 的選擇意味著,只要零點在輸入資料範圍內或使用對稱量化時,零點都不會產生量化誤差。
可以透過 自定義 運算子 機制 <https://pytorch.com.tw/tutorials/advanced/torch_script_custom_ops.html>_ 實現其他資料型別和量化方案。
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 下的相應檔案中,同時在此處新增匯入語句。