You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.07 10:54:51