Python3.5はVisual Studio 2015でビルドされているため、余計なトラブルを避けるためVisual Studio 2015を使い続けてきた。
最近、Visual Studio 2015が起動して数分後に30秒くらい固まる現象が起きて、再インストールしたりしたが直らないので、しばらく我慢して使っていた。
毎回固まるのはストレスがたまるので、思い切ってVisual Studio 2017に移行することにした。
先日Visual Studio 2019がでたところで、今更なのだが。
Pythonとの互換性
最新のAnacondaのPythonのバージョンは3.7で、3.7はVisual Studio 2017でビルドされているため、Visual Studio 2017にしてもPythonを使う上で問題はない。
Visual Studio 2017は細かくリビジョンが分かれている。
最新のVisual Studio 2017のデフォルトのツールセットは、15.9で、AnacondaのPythonは15.8でビルドされている。
リビジョンの違いは問題ないのか気になって調べたところ、Visual Studio 2015以降C/C++のランタイムはバイナリ互換が保たれている。
リビジョンの違いは影響なさそうだ。
なお、Visual Studio 2019にしない理由は、CUDA10が、まだVisual Studio 2019をサポートしていないためである。
Chainerのインストール
Visual Studio 2017に移行したので、ディープラーニングフレームワークの再インストールを行った。
Chainerをcupyからインストールしようとしたところ、
building 'cupy.core._dtype' extension error: Microsoft Visual C++ 14.1 is required. Get it with "Microsoft Visual C++ Build Tools": https://visualstudio.microsoft.com/downloads/
というエラーがでてインストールできなかった。
14.1は、Visual Studio 2017のことなのでビルド環境は問題ないはずなので、Chainerのソースに何か問題があるようだ(別のCythonを使うパッケージはインストールできている)。
Chainerは、Windows向けにもビルド済みパッケージが配布されているので、そちらからインストールすることにした。
pip install cupy-cuda100 pip install chainer
で問題なくインストールできた。
TensorFlow
TensorFlowもビルド済みパッケージが配布されているので、Visual Studioのバージョンは関係なくインストールできる。
pip install tensorflow-gpu
Boost.Python
PythonからC++でビルドしたモジュールを使うためにBoost.Pythonを利用している。
Visual Studio 2015でビルドしたBoostが使えなくなったので、Visual Studio 2017でビルドし直した。
今まで使っていた1.59.1は、Visual Studio 2017ではビルドできなかった。C++の構文エラーが発生するようになっていた。
Boostのバージョンを最新の1.69.0にしたところ、今度は問題なくビルドできた。
Visual Studio 2015と2017でビルドしたコードの速度の比較
dlshogiをビルドし直してバージョンアップ前後の速度を比較してみた。
初期局面の探索速度
2015 | 7649.0 nps |
2017 | 7646.6 nps |
※3回測定した平均
違いはなかった(GPU律速なので当然だが)。
ということで、これまでより(固まらないという意味で)快適にコーディングできるようになりました。
ちなみに、Visual Studioはバージョン4から使っています。
Borland C++も持っていましたがIDEとしてはVisual Studioが使いやすかったですね。