TadaoYamaokaの日記

山岡忠夫Homeで公開しているプログラムの開発ネタを中心に書いていきます。

WindowsでPyTorchをC++(Visual C++)で動かす

WindowsでPyTorchをC++のサンプル(MNIST)をVisual Studio 2017でビルドして動かす手順のメモです。

LibTorchのインストール

https://pytorch.orgのQUICK START LOCALLYから、Stable/Windows/LibTorch/C++/10.0(CUDAのバージョンが10.0の場合)を選んでlibtorch-win-shared-with-deps-latest.zipをダウンロードする。
適当な場所に解凍する(以下、C:\に解凍したとして説明)。

環境変数PATHに

C:\libtorch\lib

を追加する。

最も単純なサンプルをビルドして実行

Installing C++ Distributions of PyTorch — PyTorch master documentation
の説明の通り、適当な場所に

  • CMakeLists.txt
  • example-app.cpp

を作成して、上記のページの内容の通り内容を記述する。

ビルド

スタートメニューから「VS 2017 用 x64_x86 Cross Tools コマンド プロンプト」を起動する。
サンプルコードを配置したディレクトリに移動して、以下のコマンドを実行する。

mkdir build
cd build
cmake -G "Visual Studio 15 2017 Win64" -DCMAKE_PREFIX_PATH=C:\libtorch ..

cmakeのオプションは、Visual Studio 2017とLibTorchを解凍した場所に合わせている。
(cmakeはVisual Studioのインストール時のオプションで選択すればインストールされる。)

buildディレクトリに「example-app.sln」が作成されるので、エクスプローラから開いて、Visual Studio 2017でビルドして、スタートアッププロジェクトを「example-app」に設定して実行する。
成功すれば、以下のように表示される。

 0.3171  0.7950  0.6067
 0.1094  0.7421  0.8496
[ Variable[CPUType]{2,3} ]

もしくは、msbuildでビルドする。
ソリューションの構成が「RelWithDebInfo」の場合の例)

msbuild example-app.sln /t:build /p:Configuration=RelWithDebInfo;Platform="x64"

MNISTサンプルをビルドして実行

The C++ Frontend — PyTorch master documentation
の説明の通り、サンプルのGitHubレポジトリのcppブランチを取得する。

git clone -b cpp https://github.com/goldsborough/examples.git

以下の通り実行する。

cd examples\cpp\mnist
mkdir build
cd build
cmake -G "Visual Studio 15 2017 Win64" -DCMAKE_PREFIX_PATH=C:\libtorch ..

buildディレクトリにmnist.slnが作成されるので、エクスプローラから開いてビルドする。
スタートアッププロジェクトを「mnist」に設定して実行する。
ソリューションの構成が「Debug」の場合、
register_module("conv1", conv1);
の箇所で、vectorライブラリ内で例外が発生して実行できなかった。
ソリューションの構成を「Release」または「RelWithDebInfo」にした場合は実行できた。
成功すれば、以下のように表示される。

CUDA available! Training on GPU.
Train Epoch: 1 [59584/60000] Loss: 0.4143
Test set: Average loss: 0.1984 | Accuracy: 0.939
Train Epoch: 2 [59584/60000] Loss: 0.1886
Test set: Average loss: 0.1356 | Accuracy: 0.959
Train Epoch: 3 [59584/60000] Loss: 0.1666
Test set: Average loss: 0.0983 | Accuracy: 0.969
Train Epoch: 4 [59584/60000] Loss: 0.1346
Test set: Average loss: 0.0870 | Accuracy: 0.973
Train Epoch: 5 [59584/60000] Loss: 0.1822
Test set: Average loss: 0.0770 | Accuracy: 0.975
Train Epoch: 6 [59584/60000] Loss: 0.0635
Test set: Average loss: 0.0696 | Accuracy: 0.978
Train Epoch: 7 [59584/60000] Loss: 0.1375
Test set: Average loss: 0.0676 | Accuracy: 0.978
Train Epoch: 8 [59584/60000] Loss: 0.0289
Test set: Average loss: 0.0625 | Accuracy: 0.980
Train Epoch: 9 [59584/60000] Loss: 0.0218
Test set: Average loss: 0.0553 | Accuracy: 0.982
Train Epoch: 10 [59584/60000] Loss: 0.0773
Test set: Average loss: 0.0530 | Accuracy: 0.983

Google Colabでビルドして実行する方法

Linuxの場合は、公式の説明の通り実行できる。
Google Colabのノートブックを公開したので参考にしてほしい。
https://colab.research.google.com/drive/1F8kSS1VLTAi0zVocIf7kCCMhSgM732PW