pytorchをC++から使う(libtorch):環境設定
pythonで機械学習を行うpytorchやtensorflowは,C++からも利用できる.今回はpytorchに的を絞ってC++で使うための環境構築を行う.pythonの場合はcondaで簡単にインストールできるが,C++版は少し大変だったのでその辺をメモしておきたい.今回の設定はm1 mac,intel mac,Linuxマシンで試していずれも同一手順で大丈夫だった.
公式ページからのインストール(失敗)
まずは公式の配布コードを試したが,私の場合はこれでは動かなかった... 何か間違っているのだと思うが試したことを書いておく. 公式のインストールガイドではまずこれを試せということだ.公式ページから,LanguageでC++/Javaを選択すると,コードのダウンロードが可能だ.追加のインストール作業は必要ない.C++
からインクルードするヘッダファイルはinclude
ディレクトリ以下に存在し,特にtorch/script.h
がメインになっているようだ.インストールガイドではtorch/torch.h
となっているがこれは古くtorch/script.h
が正しいと思う(実際torch/script.h
は存在しない).また,lib
ディレクトリがshared librariesを含んでいる.
libtorch/
bin/
include/
lib/
share/
以下でちゃんと動くかどうかのテストを実施して,これがちゃんと動くようならそれで問題ないと思う.新しくディレクトリを掘って,C++のコード(example.cpp)とCMakeLists.txtを用意する.別にcmakeは使わなくても良いが公式は推奨している.
.
├── example.cpp
├── CMakeLists.txt
公式でMWEとして提示されているのは以下のようなpytorchのtensorを表示するコードだ.
#include <torch/script.h>
#include <iostream>
int main() {
torch::Tensor tensor = torch::rand({2, 3});
std::cout << tensor << std::endl;
}
このコードをcmakeを使ってビルドする.C++17が必要なのでその点に注意が必要.
cmake_minimum_required(VERSION 3.18 FATAL_ERROR)
project(example)
find_package(Torch REQUIRED)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${TORCH_CXX_FLAGS}")
add_executable(example-app example.cpp)
target_link_libraries(example "${TORCH_LIBRARIES}")
set_property(TARGET example PROPERTY CXX_STANDARD 17)
あとは通常通りcmakeでビルドする.コンパイル時にダウンロードしたlibtorchのディレクトリにpathを通す.パスはCMakeLists.txtでlist(APPEND CMAKE_PREFIX_PATH /absolute/path/to/libtorch )
として追加しても良い.
# ビルド用ディレクトリの作成.
mkdir build
cd build
cmake .. -DCMAKE_PREFIX_PATH=/absolute/path/to/libtorch
make
これでできたexample
ファイルを実行して以下のようにtensorが表示されれば成功だが,自分の場合はmakeで引っかかってしまいこの方法では成功しなかった.
./example-app
0.2063 0.6593 0.0866
0.0796 0.5841 0.1569
[ Variable[CPUFloatType]{2,3} ]
libtorchのビルド
しょうがないのでlibtorchのビルドにトライすることにした.githubのdocsページにCmakeを使ってlibtorchをビルドする方法が書いてあるのでこれに従った.ありがたいことにこれでうまく行った.
git clone -b main --recurse-submodule https://github.com/pytorch/pytorch.git
mkdir pytorch-build
cd pytorch-build
cmake -DBUILD_SHARED_LIBS:BOOL=ON -DCMAKE_BUILD_TYPE:STRING=Release -DPYTHON_EXECUTABLE:PATH=`which python3` -DCMAKE_INSTALL_PREFIX:PATH=../pytorch-install ../pytorch
cmake --build . --target install
この方法だとpytorch-install
にinclude
他のファイルがインストールされる.こちらのtorch/script.h
を用いて前述のexampleをコンパイルするとうまく行った.
参考文献
M1 MacでPytorchのc++版、libtorchをインストールして実行する LibTorch(PyTorch C++API)の使い方 PyTorch C++(LibTorch)環境構築