调试模式下构建的PyTorch模型可以在发布模式下使用吗? TorchScript 模型在发布模式下加载错误,但在调试模式下工作

问题描述 投票:0回答:1

我在尝试使用 LibTorch 在 C++ 应用程序中加载 TorchScript 模型时遇到问题。该模型在调试模式下加载并工作正常,但在切换到发布模式时出现异常。这是代码的最小可重现示例

#include <torch/script.h> // Include necessary headers
#include <iostream>

int main() {
    try {
        std::string model_path = "path/to/your/model.pt"; // make sure that this path is correct
        torch::jit::script::Module model;
        model = torch::jit::load(model_path); // This is where the error occurs
        std::cout << "Model loaded successfully!" << std::endl;
    } catch (const c10::Error& e) {
        std::cerr << "Error loading the model: " << e.what() << std::endl;
        return -1;
    }
    return 0;
}

此代码应该使用

torch::jit::load(model_path);
加载 PyTorch 模型。但是,我遇到以下错误:
Unhandled exception at 0x00007FFA25F5B699 in myApp.exe: Microsoft C++ exception: c10::Error at memory location 0x000000D4C29DE3F0.
我在Windows 10 Pro上使用libtorch(稳定2.5.1,Windows,C ++ / java,CPU),Visual Studio

清理堆栈跟踪

KernelBase.dll!00007ffcc7e7b699()   Unknown
00007ffcc7e7b699()
00007ffc3a79bbf1()
c10::detail::torchCheckFail(const char *, const char *, unsigned int, const std::string &)
caffe2::serialize::FileAdapter::RAIIFile::RAIIFile(const std::string &)
caffe2::serialize::FileAdapter::FileAdapter(const std::string &)
std::make_unique<caffe2::serialize::FileAdapter,std::string const &,0>(const std::string &)
caffe2::serialize::PyTorchStreamReader::PyTorchStreamReader(const std::string &)
std::make_unique<caffe2::serialize::PyTorchStreamReader,std::string const &,0>(const std::string &)
torch::jit::import_ir_module(std::shared_ptr<torch::jit::CompilationUnit>, const std::string &, std::optional<c10::Device>, std::unordered_map<std::string,std::string,std::hash<std::string>,std::equal_to<std::string>,std::allocator<std::pair<std::string const ,std::string>>> &, bool, bool)
torch::jit::import_ir_module(std::shared_ptr<torch::jit::CompilationUnit>, const std::string &, std::optional<c10::Device>, bool)
torch::jit::load(const std::string &, std::optional<c10::Device>, bool)
processImage(int, const std::string &, const std::string &, const std::string &)
main()

该模型是由我正在合作的一家公司提供的,并且是在调试模式下构建的。该应用程序在调试模式下工作正常,但在发布模式下失败。 模型是在调试模式下构建的事实是否会导致发布模式下出现此问题?在向他们询问发布模式之前我需要确定一下。

我已检查模型文件路径是否正确且可访问,也没有链接器错误,并确保所有必要的库在调试和发布配置中都正确链接。 还验证了文件路径和访问权限

c++ debugging visual-studio-debugging unhandled-exception libtorch
1个回答
0
投票

我注意到这个文件

在 Windows 上,调试和发布版本不兼容 ABI。如果您计划在调试模式下构建项目,请尝试 LibTorch 的调试版本。另外,请确保在 cmake --build 中指定正确的配置。上面的线。

根据我的理解,我认为如果您打算在调试模式下构建项目,您应该使用 LibTorch 的调试版本。对于发布模式,您应该使用 LibTorch 的发布版本。

尝试下载Release版本:

Download here (Release version):
https://download.pytorch.org/libtorch/nightly/cu118/libtorch-win-shared-with-deps-latest.zip
Download here (Debug version):
https://download.pytorch.org/libtorch/nightly/cu118/libtorch-win-shared-with-deps-debug-latest.zip
© www.soinside.com 2019 - 2024. All rights reserved.