Optimum 文档
Ryzen AI 量化
加入 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 上更新