问题描述
当我从Matlab调用mex api时,出现了意外的标准异常。
我将2个pytorch DNN模型导出到“ A.pt”和“ B.pt”文件中。
然后我实现了c ++函数,这些函数从'.pt'文件中加载模型并运行模型(向前)。
c ++实现工作正常,我可以从模型中获得正确的结果。
我将“加载并运行”功能内置到“ .dll”库中, 我实现了一个可以调用它们的mex api函数。
当我在Matlab环境中调用mex api时, 这两个模型已正常加载,第一个模型正确运行。
但是,当向前运行第二个模型时,出现了以下异常。
MEX文件出现意外的标准异常
What():TorchScript解释器中的以下操作失败。
TorchScript的跟踪(最近一次通话最后一次):
RuntimeError:TorchScript解释器中的以下操作失败。
TorchScript跟踪(最近一次通话结束):
RuntimeError:LoadLibraryA中的错误
我不知道为什么c ++实现可以正常工作,但是通过Matlab的mex api调用它时会发生异常。
由于加载和运行功能未更改,所以我希望得到完全相同的结果。
由于没有调用堆栈打印,因此调试起来更加困难。
有什么方法可以获取调用堆栈?
请给我任何建议。
谢谢。
-环境-------------------------------
C ++编译器:Visual Studio 2017社区
matlab:R2020a
libtorch:1.6
火炬:1.5
python:3.6
cuda:10.2
解决方法
从Cris Luengo先生的评论中,我通过将所有libtorch dll复制到Matlab自己的bin文件夹中解决了这个问题。有几个重复的文件,但我覆盖了它们。我不确定它是否安全,因此备份以前的dll是个不错的选择。谢谢克里斯·伦戈先生。