TadaoYamaokaの日記

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

Python環境をVisual Studio 2017に移行

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が使いやすかったですね。