快捷方式

量化概述

量化是一種降低計算精度並減少模型記憶體佔用的過程。要了解更多資訊,請訪問ExecuTorch 概念頁面。這對於邊緣裝置(包括可穿戴裝置、嵌入式裝置和微控制器)特別有用,這些裝置通常具有有限的資源,如處理能力、記憶體和電池續航。透過使用量化,我們可以使模型更高效,並使其能夠有效地在這些裝置上執行。

從流程上看,量化發生在 ExecuTorch 堆疊的早期階段。

ExecuTorch Entry Points

更詳細的工作流程可以在ExecuTorch 教程中找到。

量化通常與實現了量化運算元的執行後端相關聯。因此,每個後端對於模型應如何量化都有自己的觀點,這通過後端特定的 Quantizer 類來表達。Quantizer 為建模使用者提供了關於他們希望如何對模型進行量化的 API,並將使用者意圖傳遞給量化工作流程。

後端開發者需要實現自己的 Quantizer 來表達其後端中不同運算元或運算元模式如何量化。這透過量化工作流程提供的 Annotation API 來實現。由於 Quantizer 也面向使用者,因此它將公開特定的 API,供建模使用者配置他們希望如何對模型進行量化。每個後端都應該為自己的 Quantizer 提供 API 文件。

建模使用者將使用針對其目標後端的 Quantizer 來量化其模型,例如 XNNPACKQuantizer

有關使用 XNNPACKQuantizer 的量化流程示例、更多文件和教程,請參閱ExecuTorch 教程中的 Performing Quantization(執行量化)部分。

源數量化:Int8DynActInt4WeightQuantizer

除了基於匯出的量化(如上所述),ExecuTorch 還希望重點介紹基於源的量化,這透過 torchao 實現。與基於匯出的量化不同,基於源的量化在匯出之前直接修改模型。一個具體示例如下:Int8DynActInt4WeightQuantizer

該方案表示在推理過程中,對權重進行 4 位量化,對啟用進行 8 位動態量化。

使用 from torchao.quantization.quant_api import Int8DynActInt4WeightQuantizer 匯入後,該類使用指定資料型別精度和分組大小構建的量化例項,來修改提供的 nn.Module

# Source Quant
from torchao.quantization.quant_api import Int8DynActInt4WeightQuantizer

model = Int8DynActInt4WeightQuantizer(precision=torch_dtype, groupsize=group_size).quantize(model)

# Export to ExecuTorch
from executorch.exir import to_edge
from torch.export import export

exported_model = export(model, ...)
et_program = to_edge(exported_model, ...).to_executorch(...)

文件

查閱 PyTorch 的全面開發者文件

檢視文件

教程

獲取適合初學者和高階開發者的深度教程

檢視教程

資源

查詢開發資源並獲得問題解答

檢視資源