PyTorch C++ API加载Python导出的.pt模型文件失败(报错errno 22)求助
PyTorch C++ API加载Python导出的.pt模型文件失败(报错errno 22)求助
看起来你遇到了PyTorch C++ API加载模型的头疼问题——从一开始无响应到现在抛出errno 22的路径错误,我来帮你一步步排查:
首先看当前错误的核心:
你拿到的错误日志显示errno 22: Invalid argument,而且文件路径为空,结合你的代码来看,最可能的问题是路径字符串的写法错误!
你贴的代码里有这么一行:
const std::string model_path = "simple_net.pt";
这里的"是HTML的转义双引号,如果你实际写代码时真的用了这个,那路径字符串会变成"simple_net.pt"——这显然是个包含无效字符的非法路径,直接导致fopen调用失败,触发errno 22!这应该是当前问题的罪魁祸首。
第一步:修正路径字符串
先把代码里的路径改成正常的C++双引号写法:
const std::string model_path = "simple_net.pt";
如果用相对路径,一定要确保simple_net.pt文件在你运行C++程序的工作目录下(比如和生成的exe文件同一文件夹)。如果还是有问题,建议直接用绝对路径测试,比如Windows下用:
// 注意用正斜杠,或者双反斜杠 const std::string model_path = "C:/YourProjectDirectory/simple_net.pt";
第二步:验证模型文件本身的有效性
先回到Python环境,确认你导出的simple_net.pt是正常可加载的:
import torch # 加载模型 model = torch.jit.load("simple_net.pt") # 测试前向传播 test_input = torch.rand(1, 4) test_output = model(test_input) print("Python测试输出:", test_output)
如果Python能正常加载并运行,说明模型文件本身没问题,问题就锁定在C++侧的路径或环境。
第三步:再次确认环境兼容性和依赖
- 版本严格匹配:确保PyTorch Python版本和C++ API版本完全一致(比如都是1.13.1 CPU版,小版本号也要对应),版本不兼容也可能导致加载异常甚至无响应。
- DLL文件齐全:确认
torch_cpu.dll、c10.dll、libiomp5md.dll这些核心DLL都在exe的运行目录下,缺一不可。 - 工作目录检查:如果用IDE运行程序,要在IDE的运行配置里设置正确的工作目录,确保程序启动时能找到模型文件。
修正后的完整测试代码
给你调整后的可测试代码,你可以直接用:
#include <torch/script.h> #include <iostream> #include <vector> int main() { torch::jit::script::Module module; try { // 推荐先尝试绝对路径 const std::string model_path = "C:/YourProjectPath/simple_net.pt"; module = torch::jit::load(model_path); std::cout << "模型加载成功!" << std::endl; torch::Tensor input = torch::rand({1, 4}); std::vector<torch::jit::IValue> inputs; inputs.push_back(input); torch::Tensor output = module.forward(inputs).toTensor(); std::cout << "Output: " << output << std::endl; } catch (const c10::Error &e) { std::cerr << "Error loading the model: " << e.what() << std::endl; return -1; } return 0; }
按这个步骤排查,应该能解决你当前的errno 22问题。
内容来源于stack exchange
相关产品推荐
相关产品推荐

