快捷方式

量化概述

量化是一个降低计算精度并降低模型内存占用量的过程。要了解更多信息,请访问ExecuTorch 概念页面。这对于包括可穿戴设备、嵌入式设备和微控制器在内的边缘设备特别有用,这些设备通常资源有限,例如处理能力、内存和电池寿命。通过使用量化,我们可以使我们的模型更高效,并使其能够在这些设备上有效运行。

在流程方面,量化发生在 ExecuTorch 堆栈的早期

ExecuTorch Entry Points

可以在ExecuTorch 教程中找到更详细的工作流程。

量化通常与已实现量化运算符的执行后端相关联。因此,每个后端都对模型的量化方式有自己的看法,并在特定于后端的Quantizer类中表达。Quantizer为建模用户提供了 API,说明他们希望如何对模型进行量化,并将用户意图传递给量化工作流程。

后端开发人员需要实现自己的Quantizer来表达如何在他们的后端中对不同的运算符或运算符模式进行量化。这是通过量化工作流程提供的注释 API完成的。由于Quantizer也面向用户,因此它将公开特定的 API,以便建模用户配置他们希望如何对模型进行量化。每个后端都应为其Quantizer提供自己的 API 文档。

建模用户将使用特定于其目标后端的Quantizer来量化其模型,例如XNNPACKQuantizer

有关使用XNPACKQuantizer的量化流程示例、更多文档和教程,请参阅ExecuTorch 教程中的“执行量化”部分。

源代码量化: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 的全面开发者文档

查看文档

教程

获取针对初学者和高级开发人员的深入教程

查看教程

资源

查找开发资源并获得问题的解答

查看资源