我试图训练一个量化模型,并将其转化为ONNX。我在pytorch_quantization软件包的帮助下使用了量化感知训练技术.我使用以下代码将我的模型转换为ONNX:
from pytorch_quantization import nn as quant_nn
from pytorch_quantization import calib
from pytorch_quantization.tensor_quant import QuantDescriptor
from pytorch_quantization import quant_modules
import onnxruntime
我正在尝试用TensorRT C++ API (不是从其他框架,如caffe,tensorflow)原生编写的模型运行半精度推理;据我所知,没有这个问题的公共工作示例;我找到的最接近的是sampleMLP示例代码,与一起发布,但说不支持fp16;
我的玩具示例代码可以在中找到。它包含应用编程接口实现的体系结构和推理例程,以及我用来将经过训练的权重字典转换为wtd TensorRT格式的python脚本。
我的玩具架构只包含一个卷积;目标是在fp32和fp16之间获得类似的结果,除了一些合理的精度损失;代码似乎可以与fp32一起工作,而我在fp16推断的情况下获得的是完全不同数量级(~1e40)
我的项目使用多个Keras模型。这些模型可以有不同批次大小的输入,从1到24不等。我决定使用TRT优化这些模型。
我尝试了两种转换方法:
from tensorflow.python.compiler.tensorrt import trt_convert as trt
第一种方法转换模型,但不为模型创建TensorRT引擎:
conversion_params = trt.DEFAULT_TRT_CONVERSION_PARAMS._replace(
precision_mode=trt.TrtPrecisionMode.FP32)
converter = t