Raspberry 上的 Libtorch 无法加载 pt 文件,但可以在 ubuntu 上运行

2024-03-20

我正在尝试在 Raspberry PI 上使用 libtorch 构建 C++ 程序。该程序在 Ubuntu 上运行,但在 Raspberry 上构建时出现以下错误:

error: use of deleted function ‘void torch::jit::script::Module::operator=(const torch::jit::script::Module&)’
In file included from /usr/include/torch/csrc/jit/ir.h:18,
                 from /usr/include/torch/csrc/jit/tracer.h:9,
                 from /usr/include/torch/csrc/autograd/generated/variable_factories.h:8,
                 from /usr/include/torch/csrc/api/include/torch/types.h:7,
                 from /usr/include/torch/script.h:3,
                 from /tmp/tmp.k6618dczxt/src/../include/suvoNet.h:26,
                 from /tmp/tmp.k6618dczxt/src/../include/classifier.h:17,
                 from /tmp/tmp.k6618dczxt/src/classifier.cpp:11:
/usr/include/torch/csrc/jit/script/module.h:319:3: note: declared here
   TH_DISALLOW_COPY_AND_ASSIGN(Module);

这是崩溃的代码:

MyClass::MyClass() {
    try {
        // Deserialize the ScriptModule from a file using torch::jit::load().
        network = torch::jit::load(MODEL_FILE);
    }
    catch (const c10::Error& e) {
        std::cerr << "Error loading the model\n";
        exit(-1);
    }
}

With network宣布私有torch::jit::script::Module network

我使用 github 上的 pyTorch 版本“1.0.0a0+8322165”为 Raspberry (ARM) 构建 libtorch


TLDR:在 1.6.0 中编译 libtorch 并且工作正常。

如何为 Raspberry 编译 Libtorch 并在我的 C++ 项目中使用?

准备建造

增加 RBPi 隔夜利息

首先,如果您有 Raspberry PI 3 或更低版本,则需要增加 SWAP,因为该构建会占用 RAM。

如果您有 RBPi 4 或更高版本且 RAM 超过 3GB,请跳过此步骤。

修改文件/etc/dphys-swapfile :

CONF_SWAPFILE=2048M

然后调用以下命令来更新更改。

sudo dphys-swapfile setup

安装基础包

安装以下软件包:

sudo apt install build-essential make cmake git python3-pip libatlas-base-dev

Libtorch 需要 CMake>=3.15要正确构建,请检查 cmake 版本 cmake --版本``

如果低于 3.15,请按照以下命令构建更新版本并删除旧版本:

wget https://github.com/Kitware/CMake/releases/download/v3.18.0-rc1/cmake-3.18.0-rc1.tar.gz
tar -xzf cmake-3.18.0-rc1.tar.gz
cd cmake<version>
mkdir build
cd build
cmake ..
make
sudo make install

sudo apt remove cmake
sudo ln -s /usr/local/bin/cmake /usr/bin/cmake
sudo ldconfig

从源代码构建 PyTorch 以获取 ARM 的 libtorch 后端

如果您没有 3GB 或 RAM,请不要忘记将 SWAP 增加到 2048M。

获取所有需要的库:

sudo apt-get update
sudo apt-get install build-essential tk-dev libncurses5-dev libncursesw5-dev libreadline6-dev libdb5.3-dev libgdbm-dev libsqlite3-dev libssl-dev libbz2-dev libexpat1-dev liblzma-dev zlib1g-dev

获取 PyTorch 源:

git clone --recursive https://github.com/pytorch/pytorch --branch=release/1.6
cd pytorch

初始化所有子模块:

git submodule update --init --recursive
git submodule update --remote third_party/protobuf # To prevent a bug I had

获取所有需要的库:

sudo apt-get update
sudo apt-get install build-essential tk-dev libncurses5-dev libncursesw5-dev libreadline6-dev libdb5.3-dev libgdbm-dev libsqlite3-dev libssl-dev libbz2-dev libexpat1-dev liblzma-dev zlib1g-dev

获取 PyTorch 源:

git clone --recursive https://github.com/pytorch/pytorch --branch=release/1.6
cd pytorch

为构建设置环境变量。

将以下行添加到~/.bashrc file.

export NO_CUDA=1
export NO_DISTRIBUTED=1
export NO_MKLDNN=1 
export NO_NNPACK=1
export NO_QNNPACK=1

以 root 身份登录,并使用 .bashrc 文件设置环境变量

sudo su
source /home/<user>/.bashrc

安装python依赖项

pip3 install setuptools pyyaml numpy

构建并安装 PyTorch,是时候喝杯咖啡了,这需要一段时间。

不要忘记-E强制使用环境变量。

sudo -E python3 setup.py install

检查安装是否有效:

cd 
python3
import torch
torch.__version__

使用 Torch 构建您的程序

In your CMakeLists.txt :

cmake_minimum_required(VERSION 2.6)
project(projectName)

set(CMAKE_PREFIX_PATH "/home/pi/pytorch/torch") # Adding the directory where torch as been installed
set(CMAKE_CXX_STANDARD 14) # C14 required to compile Torch
set(CMAKE_CXX_STANDARD_REQUIRED TRUE)
add_compile_definitions(_GLIBCXX_USE_CXX11_ABI=0) # Torch is compiled with CXX11_ABI, so your program needs to be also, or you may have conflicts in some libraries (such as GTest for example)

# Specifying we are using pthread for UNIX systems.
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS} -pthread -Wall")

find_package(Torch REQUIRED)

if(NOT Torch_FOUND)
    message(FATAL_ERROR "Pytorch Not Found!")
endif(NOT Torch_FOUND)

message(STATUS "Pytorch status :")
message(STATUS "    libraries: ${TORCH_LIBRARIES}")
message(STATUS "    Torch Flags: ${TORCH_CXX_FLAGS}")

# Program executable
add_executable(projectName <sources>)

target_link_libraries(projectName PRIVATE pthread dl util ${TORCH_LIBRARIES})                        
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Raspberry 上的 Libtorch 无法加载 pt 文件,但可以在 ubuntu 上运行 的相关文章

  • 将按钮控件嵌入到现有 Direct3D 应用程序中

    我想将自己的内容覆盖在 Direct3D v9 游戏 由第三方制作 之上 叠加互动按钮 具体来说 我想覆盖一个可点击的按钮控件 就像 Steam 所做的那样 尽管我正在尝试一个更简单的界面 理想情况下 我能够覆盖 WPF 按钮或 Windo
  • C++ 中跨多个文件的类

    我几乎 100 确定我在这两个类中的语法都是正确的 但是我收到以下错误 对于 CShape cpp 错误 C2011 CShape class 类型重新定义 对于 CCircle cpp 错误 CS2504 CShape 基类未定义 这是
  • 使用 gcc 的中间 GIMPLE 格式

    根据本文 http en wikipedia org wiki Intermediate languagegcc 在生成代码之前使用多种中间格式 我读到 GIMPLE 格式使用三个地址代码 这似乎是最容易使用的中间语言 但我需要更多细节 因
  • 为什么json序列化器不符合多态性?

    我在 NET 4 5 Windows 应用商店应用程序中使用库存 JSON 序列化器 System Runtime Serialization Json DataContractJsonSerializer 我有一个由 API 提供商提供的
  • 类似于 Active Directory 中的搜索

    我正在使用 C 中的以下代码搜索 LDAP 以轮询用户的活动目录 DirectoryEntry entry new DirectoryEntry ldapPath userName password DirectorySearcher Se
  • C中的内存使用问题

    请帮忙 操作系统 Linux 其中 sleep 1000 中 此时 top 显示Linux任务 给我写了7 7 MEM使用 valgrind 未发现内存泄漏 我明白 写得正确 所有 malloc 结果都是 NULL 但是为什么这次 睡眠 我
  • 在 C# 中将“set”添加到接口的属性中

    我希望通过为该接口中的属性提供设置访问器来 扩展 该接口 界面看起来像这样 interface IUser string UserName get 我想要这样的东西 interface IMutableUser IUser string U
  • 用于生成 C++ 代码轮廓/图的工具 - 有这样的东西吗? [复制]

    这个问题在这里已经有答案了 我需要深入研究用 C 编写的软件组件并对其进行一些修改 我幻想生成一些代码映射 它将显示类之间的关系并引导我完成方法的流程 调用图 有这个工具吗 几年前 我使用 Rational Rose 建模工具 该工具具有对
  • 如何混淆整数?

    我需要从 C 中的整数列表生成唯一值的列表 我以为是 MD5 或类似的 但它们生成了太多字节 整数大小为 2 个字节 例如 我想获得单向通信 0 gt ARY812Q3 1 gt S6321Q66 2 gt 13TZ79K2 因此 在证明哈
  • 运行时动态转换

    有没有一种方法可以在运行时动态转换 如以下伪代码 foreach DataRow row in table Rows foreach DataColumn col in table Columns if row col DBNull Val
  • 更改 RabbitMQ 队列中的参数

    我有一个 RabbitMQ 队列 最初声明如下 var result channel QueueDeclare NewQueue true false false null 我正在尝试添加死信交换 因此我将代码更改为 channel Exc
  • WPF 应用程序在每个系统规模上具有相同的大小(与规模无关)

    有没有办法让 WPF 应用程序在每个系统规模上获得相同的大小 当我改变时更改文本 应用程序和其他项目的大小在windows系统设置中125 推荐 to 100 在全高清屏幕中 我的 WPF 应用程序变得太小 为了实现独立的系统缩放应用程序
  • Qt 信号槽,新符号中的转换类型[重复]

    这个问题在这里已经有答案了 鉴于以下两个 connect ui gt comboBox SIGNAL activated QString ps SLOT requestPlotsAvailable QString connect ui gt
  • 私有静态方法有必要吗?

    原理工程师 https stackoverflow com users 201787 metal在我上一家公司有一条规则private static方法应该作为实现文件中的函数实现 而不是作为类方法 我不记得他的规则是否有任何例外 我在目前
  • 如何只应用一种 clang-format 操作?

    我想用clang 格式调整我的评论 但仅此而已 选项是 AlignTrailingComments bool 但是当我运行以下命令时 clang format 3 6 i style AlignTrailingComments true
  • 虚拟继承 - 跳过构造函数

    我有以下课程 class Socket Socket Socket SOCKET s class Connection public virtual Socket Connection IP ip 这两个类包含一些纯虚函数和一些非虚函数以及
  • 警告 C4172:返回局部变量或临时变量的地址[重复]

    这个问题在这里已经有答案了 可能的重复 指向局部变量的指针 https stackoverflow com questions 4570366 pointer to local variable 我在这个网站上阅读了很多关于同一问题的其他主
  • exit() 和 abort() 有什么区别?

    在C和C 中 有什么区别exit and abort 我试图在发生错误 不是例外 后结束我的程序 abort http en cppreference com w c program abort退出程序而不调用使用注册的函数atexit h
  • K&R 之后用什么书来学习纯 C 编程? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何从 dll 导出 C++ 类? [复制]

    这个问题在这里已经有答案了 我有一个有两个重载函数的类 如何从 dll 导出它以及如何由其他 C 类使用它 我的班级是这样的 define DECLDIREXP declspec dllexport define DECLDIRIMP de

随机推荐

  • 函数对象的好处?

    我知道STL中使用的函数对象只是简单的对象 我们可以像函数一样操作它 我可以说函数和函数对象的工作原理是相同的 如果这是真的 那么为什么我们应该使用函数对象而不是函数呢 主要好处是对函数对象 函子 的调用通常是可内联的 而对函数指针的调用通
  • AngularStrap 选项卡加载 html 片段

    我目前正在使用 Twitter Bootstrap 开发 AngularJS 项目 并尝试将我的 Bootstrap 指令转换为 Angular 我决定使用 AngularStrap 因为它提供了对 Bootstrap Select 的支持
  • 如果 c =a,b,c 的值是多少;

    int a 0 int b 1 int c a b int d a b 在初始化之外 逗号 ina b is the 逗号运算符 并评估为b 涉及行中的括号d造成这样的情况 所以该行实际上相当于 int d b 然而 在涉及c 这不是逗号运
  • 如何解决 Java Swing 登录窗口中的这些可视化问题?

    我是 Java Swing 的新手 但我遇到了一个问题 我必须创建一个登录窗口 灵感来自这样的图像 像这样 scilicet 窗口必须显示 2 个文本字段 用户在其中插入用户名和密码以及一个按钮来执行登录操作 好的 我认为这非常简单 我已经
  • bind_param 中的参数数量未知[重复]

    这个问题在这里已经有答案了 当您不知道要接收的参数数量时 你们会怎么做 例如 if a 1 filter AND u name if b 1 filter AND u address if c 1 filter AND u age if d
  • 将布尔值序列化为“1”和“0”而不是“true”和“false”

    我在上面找不到任何方法Boolean类将布尔值序列化为 1 和 0 而不是 true 和 false 有没有本地函数可以做到这一点 如果不是 最好的方法 最优化的方法 是什么 更新 我确实想制作一个String出于一个Boolean If你
  • 将上下文变量与 IBM Watson Conversation 中的实体进行比较

    在 Watson 对话对话框中 我创建了一个条件 就像是 if stored state states Florida AND preferred joint joint KFC then some response where store
  • 安卓。如何沿对象面向的方向移动对象(使用 Vector3 和四元数)

    我正在使用 libGDX 事实上对它来说相当新 和 Android 我想沿 3d 对象所面向的方向移动 使用一定的速度 我认为这是一个基本问题 但找不到直接答案 我有一个代表对象旋转 方向 的四元数 有一个代表对象位置的 Vector3 问
  • FreeTDS - tsql 连接,isql 失败

    我正在尝试连接到我的主机 Windows XP SQL Server 05 上的数据库 我的客户机器是 Ubuntu 10 04 我可以使用 tsql 连接并执行命令 但 isql 失败 以下是我的配置文件和错误消息 freetds con
  • UITableView 部分未按预期排序

    我正在使用带有自定义部分标题的 tableView 核心数据对象根据称为 sectionIdentifier 的瞬态属性的值显示在精确的部分上 一切都按预期工作 但各部分的顺序没有按我的预期响应 这应该是部分顺序 1 OVERDUE sec
  • 匿名函数和内存消耗

    就内存消耗而言 这些是否等效 或者我们是否为后者中的每个对象获得一个新的函数实例 var f function alert this animal var items for var i 0 i lt 10 i var item anima
  • 如何重置 Apache Archiva 密码

    我正在使用 apache archiva 2 2 0 版本 我丢失了管理员密码 因此我想重置管理员用户的密码 我尝试通过删除下面提到的文件来重置密码 apache archiva 2 2 0 data databases users dbe
  • 检测 pandas.DataFrame 中的列是否是分类的好的启发式是什么?

    我一直在开发一个工具 可以自动预处理 pandas DataFrame 格式的数据 在此预处理步骤中 我想以不同的方式处理连续数据和分类数据 特别是 我希望能够应用 OneHotEncoder 等only分类数据 现在 假设我们提供了一个
  • Python 3 默认编码 cp1252 [重复]

    这个问题在这里已经有答案了 我最近在索尼 vaio windows 10 系统上使用 anaconda 4 1 1 python 3 5 2 安装从 Biopython 模块解码句柄 错误映射 0x81 0x8D 时遇到了一些问题 经过一番
  • bash 逗号分隔值的逆序

    我有以下元素列表 a b c 1337 d e 我希望我有 e d 1337 c b a 我怎样才能在 bash 中实现这一目标 你可以这样做awk bin bash awk BEGIN FS OFS for i NF i gt 0 i p
  • Maven 与 Android - R.java 文件生成 (Eclipse)

    我正在尝试将 R java 生成工作到 gen 文件夹中的项目 实际上 应用程序在使用 maven 构建时构建 但是 eclipse 发现错误 因为它无法解析 R java 文件 实际上在每次构建后放入 target generated s
  • CodeIgniter 和 Oracle 数据库 - ActiveRecord insert() 在查询中添加双引号

    我正在使用 CodeIgniter 框架版本 2 2 和 Oracle 11g 数据库 在database php中我的配置如下所示 与 CodeIgniter 的数据库连接良好 当我尝试使用 CodeIgniter 的 ActiveRec
  • c#图表控件,垂直滚动缩放问题[“Stuck Scroll bar”]

    我有一个带有大型 C 图表控件的程序 我允许用户选择任何区域来进行缩放 它将放大 这一切都很好 当我水平滚动时 这也工作得很好而且非常流畅 但是 当我尝试垂直滚动时 滚动条不会移动 我唯一能做的就是使用滚动条上的向上和向下箭头键 这只会给出
  • 使用 Popen 运行本地二进制文件时出现“文件未找到”错误

    我正在编写一个 Python 程序来使用 Popen 调用本地二进制文件来捕获其输出 我将目录更改为os chdir我已经验证该文件在那里 但是 以下代码引发 找不到文件 异常 谁能告诉我我做错了什么 从不在我的 PATH 中的目录运行程序
  • Raspberry 上的 Libtorch 无法加载 pt 文件,但可以在 ubuntu 上运行

    我正在尝试在 Raspberry PI 上使用 libtorch 构建 C 程序 该程序在 Ubuntu 上运行 但在 Raspberry 上构建时出现以下错误 error use of deleted function void torc