目录

量化概述

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

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

ExecuTorch 入口点

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

量化通常与已实现量化运算符的执行后端相关联。因此,每个后端都对模型应该如何量化有主见,以 backend 特定的类表示。 提供 API,用于根据用户希望如何量化模型进行建模,并将用户意向传递给量化工作流程。QuantizerQuantizer

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

建模用户将使用特定于其目标后端的 来量化他们的模型,例如 .QuantizerXNNPACKQuantizer

有关量化流程的示例,更多文档和教程,请参见 ExecuTorch 教程 中的部分。XNPACKQuantizerPerforming Quantization

源量化:Int8DynActInt4WeightQuantizer

除了基于导出的量化(如上所述)之外,ExecuTorch 还希望突出显示基于 source 的量化,通过 torchao 完成。与基于导出的量化不同,基于源的量化会在导出之前直接修改模型。一个具体的例子是 。Int8DynActInt4WeightQuantizer

该方案表示 4 位权重量化,在推理过程中对激活进行 8 位动态量化。

使用 导入时,此类使用以指定的 dtype 精度和 groupsize 构造的量化实例来改变提供的 .from torchao.quantization.quant_api import Int8DynActInt4WeightQuantizernn.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 的全面开发人员文档

查看文档

教程

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

查看教程

资源

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

查看资源