Eccezione standard imprevista dal file MEX (modello pytorch in avanti)

Aug 22 2020

Quando chiamo mex api da Matlab, ho ricevuto un'eccezione standard inaspettata.

Ho esportato 2 modelli DNN pytorch in file "A.pt" e "B.pt".

E ho implementato le funzioni c ++ che caricano i modelli dai file ".pt" ed eseguono i modelli (avanti).

L'implementazione c ++ funziona bene, posso ottenere risultati corretti dai modelli.

Ho costruito la funzione load & run forward nella libreria '.dll' e ho implementato una funzione mex api per chiamarli.

Quando chiamo l'api mex in ambiente Matlab, i 2 modelli vengono caricati normalmente e il primo modello viene eseguito correttamente.

Tuttavia, quando ho eseguito il secondo modello, ho ottenuto la seguente eccezione.


Eccezione standard imprevista dal file MEX

What (): la seguente operazione non è riuscita nell'interprete TorchScript.

Traceback di TorchScript (la chiamata più recente per ultima):

RuntimeError: la seguente operazione non è riuscita nell'interprete TorchScript.

Traceback di TorchScript (la chiamata più recente per ultima):

RuntimeError: errore in LoadLibraryA


Non ho idea del motivo per cui l'implementazione di c ++ funzioni correttamente, ma l'eccezione si verifica quando viene chiamata tramite mex api da Matlab.

Poiché le funzioni di caricamento e avanzamento sono invariate, mi aspettavo esattamente gli stessi risultati.

È più difficile eseguire il debug perché non è presente la stampa dello stack di chiamate.

C'è un modo per ottenere lo stack di chiamate?

Per favore dammi qualche consiglio.

Grazie in anticipo.

-ambiente-------------------------------

compilatore c ++: community di visual studio 2017

matlab: R2020a

libtorch: 1.6

torcia: 1.5

python: 3.6

cuda: 10.2


Risposte

1 양유경 Aug 23 2020 at 02:00

Dai commenti di Mr. Cris Luengo, ho risolto questo problema copiando tutte le DLL di libtorch nella cartella bin di Matlab. Ci sono diversi file duplicati ma li ho sovrascritti. Non sono sicuro che sia sicuro o meno, quindi il backup delle DLL precedenti è una buona scelta. Grazie Sig. Cris Luengo.