快捷方式

量化概述

量化是一种将模型计算和存储权重中使用的数字精度降低的技术——通常从 32 位浮点数降至 8 位整数。这可以减少模型的内存占用,加快推理速度,并降低功耗,通常只带来微小的精度损失。

量化对于在穿戴设备、嵌入式系统和微控制器等边缘设备上部署模型尤其重要,这些设备通常计算能力、内存和电池容量有限。通过量化模型,我们可以使其效率更高,更适合这些资源受限的环境。

ExecuTorch 中的量化

ExecuTorch 使用 torchao 作为其量化库。这种集成允许 ExecuTorch 利用 PyTorch 原生的工具来准备、校准和转换量化模型。

ExecuTorch 中的量化是特定于后端的。每个后端都根据其硬件功能定义了模型应如何量化。大多数 ExecuTorch 后端使用 torchao 的 PT2E 量化流程,该流程适用于使用 torch.export 导出的模型,并为每个后端量身定制量化。

PT2E 量化工作流程包含三个主要步骤

  1. 配置特定于后端的量化器。

  2. 在 PyTorch 中准备、校准、转换和评估量化模型

  3. 将模型降低到目标后端

1. 配置特定于后端的量化器

每个后端都提供自己的量化器(例如,XNNPACKQuantizer、CoreMLQuantizer),它定义了如何以与目标硬件兼容的方式将量化应用于模型。这些量化器通常支持配置,允许用户指定量化选项,例如:

  • 精度(例如,8 位或 4 位)

  • 量化类型(例如,动态、静态或仅权重量化)

  • 粒度(例如,每个张量、每个通道)

并非所有后端都支持所有量化选项。请参阅特定于后端的指南,了解支持的量化模式和配置,以及如何初始化特定于后端的 PT2E 量化器。

2. 量化并评估模型

定义了特定于后端的量化器后,PT2E 量化流程对于所有后端都相同。下面提供了一个通用示例,但特定示例在后端文档中给出。

from torchao.quantization.pt2e.quantize_pt2e import convert_pt2e, prepare_pt2e

training_gm = torch.export.export(model, sample_inputs).module()

# Prepare the model for quantization using the backend-specific quantizer instance
prepared_model = prepare_pt2e(training_gm, quantizer)


# Calibrate the model on representative data
for sample in calibration_data:
	prepared_model(sample)

# Convert the calibrated model to a quantized model
quantized_model = convert_pt2e(prepared_model)

quantized_model 是一个标准的 PyTorch 模型,可以在不同任务上进行精度评估。任务特定的基准测试是评估量化模型的推荐方法,但作为粗略的替代方法,您可以使用 SQNR 等通用错误指标与原始模型的输出来比较。

from torchao.quantization.utils import compute_error
out_reference = model(sample)
out_quantized = quantized_model(sample)
sqnr = compute_error(out_reference, out_quantized) # SQNR error

请注意,即使对于未量化的模型,设备上的数值也可能与 PyTorch 中的数值不同,并且精度评估也可以使用 pybindings 或在设备上进行。

3. 降低模型

最后一步是将量化模型(quantized_model)降低到所需的后端,就像您对未量化的模型一样。有关降低信息,请参阅 特定于后端的页面

文档

访问全面的 PyTorch 开发者文档

查看文档

教程

为初学者和高级开发者提供深入的教程

查看教程

资源

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

查看资源