量化 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 下的相應檔案中,並在此處新增匯入語句。