捷徑

量化概觀

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

就流程而言,量化發生在 ExecuTorch 堆疊的早期階段

ExecuTorch Entry Points

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

量化通常與實作了量化運算子的執行後端相關聯。因此,每個後端對於如何量化模型都有自己的看法,並以特定於後端的 Quantizer 類別表示。Quantizer 提供 API,用於對使用者如何量化模型進行建模,並將使用者的意圖傳遞給量化工作流程。

後端開發人員需要實作他們自己的 Quantizer,以表達不同的運算子或運算子模式如何在他們的後端中被量化。這是透過量化工作流程提供的 Annotation API 來完成的。由於 Quantizer 也是面向使用者的,它將公開特定的 API,讓建模使用者能夠配置他們希望如何量化模型。每個後端都應該為他們的 Quantizer 提供自己的 API 文件。

建模使用者將使用特定於其目標後端的 Quantizer 來量化他們的模型,例如 XNNPACKQuantizer

有關使用 XNPACKQuantizer 的量化流程範例,以及更多文件和教學,請參閱 ExecuTorch 教學 中的 Performing Quantization 部分。

原始碼量化:Int8DynActInt4WeightQuantizer

除了基於匯出的量化(如上所述),ExecuTorch 想要強調基於原始碼的量化,這是透過 torchao 完成的。與基於匯出的量化不同,基於原始碼的量化會在匯出之前直接修改模型。一個具體的例子是 Int8DynActInt4WeightQuantizer

此方案表示 4 位元權重量化,並在推論期間對激活進行 8 位元動態量化。

使用 from torchao.quantization.quant_api import Int8DynActInt4WeightQuantizer 導入,此類別使用具有指定 dtype 精度和 groupsize 建構的量化實例,來變更提供的 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 的完整開發者文件

檢視文件

教學

取得初學者和進階開發人員的深入教學

檢視教學

資源

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

檢視資源