Optimum 文档

Ryzen AI 量化

您正在查看的是需要从源码安装。如果您想进行常规的 pip 安装,请查看最新的稳定版本 (v1.27.0)。
Hugging Face's logo
加入 Hugging Face 社区

并获得增强的文档体验

开始使用

Ryzen AI 量化

Ryzen AI IPU 的最佳性能通过使用量化模型实现。有两种不同的方法可以对 Ryzen AI IPU 的模型进行量化:

  • 通过 Vitis AI Quantizer,在 Optimum 的 RyzenAIOnnxQuantizer 中使用,该量化器专为 ONNX 模型量化设计。目前支持使用动态和静态量化方法对 timm 模型进行量化。
  • 通过 Brevitas 库,在 Optimum 的 BrevitasQuantizer 中使用。Brevitas 允许直接量化 PyTorch 模型,这些模型可以选择导出为 ONNX。建议使用此方法量化其他模型。

使用 RyzenAIOnnxQuantizer 进行量化

🤗 Optimum AMD 提供了一个 Ryzen AI 量化器,您可以使用 AMD Vitis AI Quantizer 对 Hugging Face Hub 上托管的许多模型应用量化。

RyzenAI Quantizer 为以 ONNX 格式保存的预训练模型提供了易于使用的训练后量化 (PTQ) 流程。它生成一个量化的 ONNX 模型,可直接与 Ryzen AI 部署。

该量化器支持各种配置和功能,可对目标部署在 IPU_CNN、IPU_Transformer 和 CPU 上的模型进行量化。

RyzenAIOnnxQuantizer 可以使用 from_pretrained 方法进行初始化,无论是来自本地模型文件夹还是 Hugging Face Hub 上托管的模型。

>>> from optimum.amd.ryzenai import RyzenAIOnnxQuantizer

>>> quantizer = RyzenAIOnnxQuantizer.from_pretrained("path/to/model")

下面您将找到一个关于如何量化来自 Timm 库的 VGG 模型的简单端到端示例。

  • 首先,使用 Optimum Exporters 将 VGG 模型导出为 ONNX。确保为推理指定静态形状。
  • 创建一个预处理函数,以处理特定的图像格式转换并应用必要的转换,以准备模型的输入。
  • 初始化 RyzenAI 量化器 (RyzenAIOnnxQuantizer) 并使用 AutoQuantizationConfig 配置量化设置。部署在 IPU 上的 CNN 模型的推荐量化配置使用 ipu_cnn_config 加载。
  • 使用量化器的 get_calibration_dataset 方法获取校准数据集。该数据集对于在量化过程中计算量化参数至关重要。
  • 使用指定的量化配置和校准数据运行量化器。在此过程中计算的量化参数将作为常量嵌入到量化模型中。
  • 生成的量化模型保存在指定的量化目录中。
>>> from functools import partial
>>> import timm

>>> from optimum.amd.ryzenai import AutoQuantizationConfig, RyzenAIOnnxQuantizer
>>> from optimum.exporters.onnx import main_export
>>> from transformers import PretrainedConfig

>>> # Define paths for exporting ONNX model and saving quantized model
>>> export_dir = "/path/to/vgg_onnx"
>>> quantization_dir = "/path/to/vgg_onnx_quantized"

>>> # Specify the model ID from Timm
>>> model_id = "timm/vgg11.tv_in1k"

>>> # Step 1: Export the model to ONNX format using Optimum Exporters
>>> main_export(
...     model_name_or_path=model_id,
...     output=export_dir,
...     task="image-classification",
...     opset=13,
...     batch_size=1,
...     no_dynamic_axes=True,
... )

>>> # Step 2: Preprocess configuration and data transformations
>>> config = PretrainedConfig.from_pretrained(export_dir)
>>> data_config = timm.data.resolve_data_config(pretrained_cfg=config.pretrained_cfg)
>>> transforms = timm.data.create_transform(**data_config, is_training=False)

>>> def preprocess_fn(ex, transforms):
...     image = ex["image"]
...     if image.mode == "L":
...       # Convert greyscale to RGB if needed
...       print("WARNING: converting greyscale to RGB")
...       image = image.convert("RGB")
...     pixel_values = transforms(image)
...     return {"pixel_values": pixel_values}

>>> # Step 3: Initialize the RyzenAIOnnxQuantizer with the exported model
>>> quantizer = RyzenAIOnnxQuantizer.from_pretrained(export_dir)

>>> # Step 4: Load recommended quantization config for model
>>> quantization_config = AutoQuantizationConfig.ipu_cnn_config()

>>> # Step 5: Obtain a calibration dataset for computing quantization parameters
>>> train_calibration_dataset = quantizer.get_calibration_dataset(
...     "imagenet-1k",
...     preprocess_function=partial(preprocess_fn, transforms=transforms),
...     num_samples=100,
...     dataset_split="train",
...     preprocess_batch=False,
...     streaming=True,
... )

>>> # Step 6: Run the quantizer with the specified configuration and calibration data
>>> quantizer.quantize(
...     quantization_config=quantization_config,
...     dataset=train_calibration_dataset,
...     save_dir=quantization_dir
... )

使用 BrevitasQuantizer 进行量化

即将推出。

< > 在 GitHub 上更新