导出到 onnx 量化 Pytorch 模型时出现分段错误
Segmentation Fault when exporting to onnx a quantized Pytorch model
我正在尝试将模型导出为 onnx
格式。架构很复杂,所以我不会在这里分享,但基本上,我在 .pth
文件中有网络权重。我能够加载它们、创建网络并使用它进行推理。
重要的是要注意我已经调整了代码以能够量化网络。我添加了量化和反量化运算符以及一些 torch.nn.quantized.FloatFunctional()
运算符。
但是,每当我尝试使用
导出它时
torch.onnx.export(torch_model, # model being run
input_example, # model input
model_name, # where to save the model
export_params=True, # store the trained parameter
opset_version=11, # the ONNX version to export
# the model to
do_constant_folding=True, # whether to execute constant
# folding for optimization
)
我明白了 Segmentation fault (core dumped)
我正在 Ubuntu 20 上工作,安装了以下软件包:
torch==1.6.0
torchvision==0.7.0
onnx==1.7.0
onnxruntime==1.4.0
请注意,根据我在代码中留下的一些prints
,导出的推理部分已完成。随后发生分段错误。
有人知道为什么会发生这种情况吗?
[编辑]:当我的网络不适用于量化操作时,我可以导出它。因此,问题不是安装损坏,而是一些量化运算符的问题,以节省onnx。
好吧,事实证明 ONNX 不支持量化模型(但在 运行 时不会以任何方式警告您,它只是抛出一个段错误)。好像还没有提上日程,所以解决方案可以是使用TensorRT。
我正在尝试将模型导出为 onnx
格式。架构很复杂,所以我不会在这里分享,但基本上,我在 .pth
文件中有网络权重。我能够加载它们、创建网络并使用它进行推理。
重要的是要注意我已经调整了代码以能够量化网络。我添加了量化和反量化运算符以及一些 torch.nn.quantized.FloatFunctional()
运算符。
但是,每当我尝试使用
导出它时torch.onnx.export(torch_model, # model being run
input_example, # model input
model_name, # where to save the model
export_params=True, # store the trained parameter
opset_version=11, # the ONNX version to export
# the model to
do_constant_folding=True, # whether to execute constant
# folding for optimization
)
我明白了 Segmentation fault (core dumped)
我正在 Ubuntu 20 上工作,安装了以下软件包:
torch==1.6.0
torchvision==0.7.0
onnx==1.7.0
onnxruntime==1.4.0
请注意,根据我在代码中留下的一些prints
,导出的推理部分已完成。随后发生分段错误。
有人知道为什么会发生这种情况吗?
[编辑]:当我的网络不适用于量化操作时,我可以导出它。因此,问题不是安装损坏,而是一些量化运算符的问题,以节省onnx。
好吧,事实证明 ONNX 不支持量化模型(但在 运行 时不会以任何方式警告您,它只是抛出一个段错误)。好像还没有提上日程,所以解决方案可以是使用TensorRT。