はじめに
普段はPythonを使って学習させているのですが、何となくC++APIを使ってみたくなりました。しかし、WindowsでMSBuild使うと(当たり前ですが)、チュートリアル通りでは動きませんでした。
これ以外の方法もあるかと思いますが、私はこの方法で成功したので残しておきます。
環境
Windows 10
CUDA 10.0
NVIDIA Driver 430.39
MSBuild ver. 15.9.21+g9802d43bc3
cmake ver. 3.13.3
libtorchをダウンロード
PyTorchの公式サイトから自分に合ったlibtorchをダウンロード
展開して/path/to/libtorchに配置
私はCドライブ直下に入れてしまったので今回はそれで進めます。
ビルド方法
pytorchのexamplesをcloneするところから始めます。
lsを使えているのはcmdの代わりにcmder使っているからです。
注意
今回の方法でcloneしたまま行うと、エラーが出ずに"CUDA is available! Training on GPU."とだけ
Logに出力されて終了します。
これはdataディレクトリが適切な場所に置かれていないためです。
なので以下の方法のどちらかをとってください。
- dcgan.cppファイルの17行目のkDataFolderの値を"./data" から "../data"に変更
dcgan.cpp
17 const char* kDataFolder = "./data" // => "../data"に変更
- 以下に示す流れで生成されたdcgan.exeと同じディレクトリ(dcgan/build/Release)に生成されたdataディレクトリ(dcgan/build/data)を入れる。
というわけで流れを示します。
$ git clone https://github.com/pytorch/examples.git
$ cd examples/cpp/dcgan
$ ls
CMakeLists.txt dcgan.cpp display_samples.py README.md
$ mkdir build
$ cd build
$ cmake .. -DCMAKE_PREFIX_PATH=C:\libtorch -Ax64 -DCMAKE_BUILD_TYPE=Release
... (長いのでカット)
$ msbuild dcgan.sln /p:Configuration=Release
... (非常に長いのでカット warningがいっぱい出ます)
$ cd Release
$ dcgan
CUDA is available! Training on GPU.
define Generator.
Defined Generator.
Define Discriminator.
Defined Discriminator.
Define MNIST
Defined MNIST
[ 1/30][ 10/938] D_loss: 0.8263 | G_loss: 1.6410
[ 1/30][ 20/938] D_loss: 0.6547 | G_loss: 2.2157
[ 1/30][ 30/938] D_loss: 0.6314 | G_loss: 2.3801
[ 1/30][ 40/938] D_loss: 0.5518 | G_loss: 3.0052
[ 1/30][ 50/938] D_loss: 0.4735 | G_loss: 3.4814
[ 1/30][ 60/938] D_loss: 0.4381 | G_loss: 3.8758
.
.
.
Training complete!
参考
pytorchのissueを参考にしたのですが、どのissueだったか忘れてしまいました...。
https://github.com/pytorch/pytorch/issues