tot*_*tok 2 c++ build raspberry-pi torch libtorch
我正在尝试在 Raspberry PI 上使用 libtorch 构建 C++ 程序。该程序在 Ubuntu 上运行,但在 Raspberry 上构建时出现以下错误:
\nerror: use of deleted function \xc3\xa2\xe2\x82\xac\xcb\x9cvoid torch::jit::script::Module::operator=(const torch::jit::script::Module&)\xc3\xa2\xe2\x82\xac\xe2\x84\xa2\nIn file included from /usr/include/torch/csrc/jit/ir.h:18,\n from /usr/include/torch/csrc/jit/tracer.h:9,\n from /usr/include/torch/csrc/autograd/generated/variable_factories.h:8,\n from /usr/include/torch/csrc/api/include/torch/types.h:7,\n from /usr/include/torch/script.h:3,\n from /tmp/tmp.k6618dczxt/src/../include/suvoNet.h:26,\n from /tmp/tmp.k6618dczxt/src/../include/classifier.h:17,\n from /tmp/tmp.k6618dczxt/src/classifier.cpp:11:\n/usr/include/torch/csrc/jit/script/module.h:319:3: note: declared here\n TH_DISALLOW_COPY_AND_ASSIGN(Module);\nRun Code Online (Sandbox Code Playgroud)\n这是崩溃的代码:
\nMyClass::MyClass() {\n try {\n // Deserialize the ScriptModule from a file using torch::jit::load().\n network = torch::jit::load(MODEL_FILE);\n }\n catch (const c10::Error& e) {\n std::cerr << "Error loading the model\\n";\n exit(-1);\n }\n}\n\nRun Code Online (Sandbox Code Playgroud)\n已network声明为私有torch::jit::script::Module network
我使用 github 上的 pyTorch 版本“1.0.0a0+8322165”为 Raspberry (ARM) 构建 libtorch
\nTLDR:在 1.6.0 中编译 libtorch 并且工作正常。
首先,如果您有 Raspberry PI 3 或更低版本,则需要增加 SWAP,因为该构建会占用 RAM。
如果您有 RBPi 4 或更高版本且 RAM 超过 3GB,请跳过此步骤。
修改文件/etc/dphys-swapfile:
CONF_SWAPFILE=2048M
Run Code Online (Sandbox Code Playgroud)
然后调用以下命令来更新更改。
sudo dphys-swapfile setup
Run Code Online (Sandbox Code Playgroud)
安装以下软件包:
sudo apt install build-essential make cmake git python3-pip libatlas-base-dev
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
如果您没有 3GB 或 RAM,请不要忘记将 SWAP 增加到 2048M。
获取所有需要的库:
sudo apt install build-essential make cmake git python3-pip libatlas-base-dev
Run Code Online (Sandbox Code Playgroud)
获取 PyTorch 源:
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
Run Code Online (Sandbox Code Playgroud)
初始化所有子模块:
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
Run Code Online (Sandbox Code Playgroud)
获取所有需要的库:
git clone --recursive https://github.com/pytorch/pytorch --branch=release/1.6
cd pytorch
Run Code Online (Sandbox Code Playgroud)
获取 PyTorch 源:
git submodule update --init --recursive
git submodule update --remote third_party/protobuf # To prevent a bug I had
Run Code Online (Sandbox Code Playgroud)
为构建设置环境变量。
将以下行添加到文件中~/.bashrc。
export NO_CUDA=1
export NO_DISTRIBUTED=1
export NO_MKLDNN=1
export NO_NNPACK=1
export NO_QNNPACK=1
Run Code Online (Sandbox Code Playgroud)
以 root 身份登录,并使用 .bashrc 文件设置环境变量
sudo su
source /home/<user>/.bashrc
Run Code Online (Sandbox Code Playgroud)
安装python依赖项
pip3 install setuptools pyyaml numpy
Run Code Online (Sandbox Code Playgroud)
构建并安装 PyTorch,是时候喝杯咖啡了,这需要一段时间。
不要忘记
-E强制使用环境变量。
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
Run Code Online (Sandbox Code Playgroud)
检查安装是否有效:
git clone --recursive https://github.com/pytorch/pytorch --branch=release/1.6
cd pytorch
Run Code Online (Sandbox Code Playgroud)
在你的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})
Run Code Online (Sandbox Code Playgroud)