0

当我从 Matlab 调用 mex api 时,我遇到了一个意外的标准异常。

我将 2 个 pytorch DNN 模型导出到“A.pt”和“B.pt”文件。

我实现了从“.pt”文件加载模型并运行模型(转发)的 c++ 函数。

c++ 实现工作正常,我可以从模型中得到正确的结果。

我将加载和运行转发函数构建到“.dll”库中,并实现了一个可以调用它们的 mex api 函数。

当我在Matlab环境中调用mex api时,2个模型加载正常,第一个模型向前运行正常。

但是,当向前运行第二个模型时,我得到了以下异常。


MEX 文件中的意外标准异常

What():以下操作在 TorchScript 解释器中失败。

TorchScript 的回溯(最后一次调用):

RuntimeError:TorchScript 解释器中的以下操作失败。

TorchScript 的回溯(最后一次调用):

RuntimeError:LoadLibraryA 中的错误


我不知道为什么 c++ 实现可以正常工作,但是当通过 Matlab 的 mex api 调用它时会发生异常。

因为加载和运行前向功能没有改变,所以我期望得到完全相同的结果。

由于没有调用堆栈打印,因此更难以调试。

有没有办法获得调用堆栈?

请给我任何建议。

提前致谢。

-环境 - - - - - - - - - - - - - - - -

c++ 编译器:Visual Studio 2017 社区

matlab : R2020a

火炬:1.6

火炬:1.5

蟒蛇:3.6

库达:10.2


4

1 回答 1

1

根据 Cris Luengo 先生的评论,我通过将所有 libtorch dll 复制到 Matlab 自己的 bin 文件夹中解决了这个问题。有几个重复的文件,但我覆盖了它们。我不确定它是否安全,所以可能备份以前的 dll 是不错的选择。谢谢克里斯·伦戈先生。

于 2020-08-23T02:00:18.597 回答