目录

量化概述

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

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

ExecuTorch Entry Points

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

量化通常与实现了量化操作符的执行后端相关联。因此,每个后端都对模型应如何进行量化持有特定观点,这通过后端特定的 Quantizer 类来表达。Quantizer 提供了面向建模用户的API,以描述他们希望模型如何被量化,并将用户的意图传递给量化工作流。

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

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

对于带有XNPACKQuantizer的量化流程示例,更多文档和教程,请参阅Performing Quantization部分中的ExecuTorch 教程

源量化: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 的全面开发人员文档

查看文档

教程

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

查看教程

资源

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

查看资源