ONNX-Python:有人可以解释一下 static_quantization 函数请求的 Calibration_Data_Reader 吗?

问题描述 投票:0回答:1

我正在使用 ONNX-Python 库。我正在尝试使用从 onnxruntime.quantization 导入的 quantize_static() 函数静态量化 ai 模型。

这个函数将calibration_data_reader-object作为第三个输入,我找不到这个对象是什么,或者如何创建一个对象的全面解释。

我怎样才能创建这个对象?另外,是否可以创建一个可供多个模型使用的calibrationDataReader 的通用版本?

我尝试在 onnx 网站上查找此内容,并在 github-page 上阅读示例,但找不到我能理解的解释或文档,因为大多数数据读取器似乎是针对模型预先制作的.

我能想到的最好的事情就是这样,使用 onnx.quantization-tools 中的校准器:

from onnxruntime.quantization import quantize_static, calibrate

def quantize(model_path, output_path):
    calibrator = calibrate.create_calibrator(model_path, calibrate_method= calibrate.CalibrationMethod.MinMax)
    quantize_static(model_input= model_path, model_output= output_path, calibration_data_reader= calibrator)

这会引发此错误:

quantize_static(model_input= model_path, model_output= output_path, calibration_data_reader= calibrator)
File "████Python\Python311\Lib\site-packages\onnxruntime\quantization\quantize.py", line 435, in quantize_static
calibrator.collect_data(calibration_data_reader)
File "████Python\Python311\Lib\site-packages\onnxruntime\quantization\calibrate.py", line 301, in collect_data
inputs = data_reader.get_next()
         ^^^^^^^^^^^^^^^^^^^^
AttributeError: 'MinMaxCalibrater' object has no attribute 'get_next'

我可能在这里使用了错误类型的对象,但我没有想法。解释该主题的解释或资源链接将帮助我解决这个问题。

python onnx quantization onnxruntime static-quantization
1个回答
0
投票

calibrationDataReader
对象可以在这里找到:https://github.com/microsoft/onnxruntime/blob/dadd0c451a60a6f908ef40fc93e7775765280c09/onnxruntime/python/tools/quantization/calibrate.py#L139
get_next()
方法默认未实现,应由您编写以匹配模型所需的输入。

在这里您可以找到有关使用 onnx 量化模型的更多说明:https://onnxruntime.ai/docs/performance/model-optimizations/quantization.html

本节:https://onnxruntime.ai/docs/performance/model-optimizations/quantization.html#quantization-on-gpu与您最相关,并提供了实现静态量化所需的步骤。我在这里附上了解释的副本:

” 为了在 GPU 上实现更好的量化性能,需要硬件支持。您需要一个支持 Tensor Core int8 计算的设备,例如 T4 或 A100。较旧的硬件不会从量化中受益。

ONNX 运行时现在利用 TensorRT 执行提供程序在 GPU 上进行量化。与 CPU 执行提供程序不同,TensorRT 接受全精度模型和输入校准结果。它用自己的逻辑决定如何量化。利用 TensorRT EP 量化的总体过程是:

  1. 实现 CalibrationDataReader。
  2. 使用校准数据集计算量化参数。
  3. 将量化参数保存到平面缓冲区文件中。
  4. 加载模型和量化参数文件并与TensorRT EP一起运行。 ”
© www.soinside.com 2019 - 2024. All rights reserved.