我正在尝试在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);
}
}
用network
声明为私有(private)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消耗者。
修改文件/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 --version检查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后端获取所有需要的库:
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
为构 build 置环境变量。将以下行添加到
~/.bashrc
文件。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,花点时间抓取:coffee:,这需要一些时间。sudo -E python3 setup.py install
检查安装工作:cd
python3
import torch
torch.__version__
使用Torch构建程序在您的
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})
关于c++ - Raspberry上的Libtorch无法加载pt文件,但在ubuntu上工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/62755739/