GPUをGeForce GTX 1080に交換したので、CUDAを8.0にバージョンアップした。
CUDA7.5でインストールしたChainerが動かなくなったため、CUDA 8.0に対応させるため、再インストールを行った。
基本的に、CUDA7.5のときの手順と同じだが、環境変数INCLUDEの設定が必要であった。
手順の変更点を以下に示す。
変更点
Visual Studio 2013はCUDA 7.5では必要だったが、CUDA 8.0では不要になるため、Visual Studio 2015 Communityのみでよい。
環境変数PATHには、CUDA 7.5でのインストール時に設定した
「C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin」を削除して、
代わりに「C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\bin」を設定する。
環境変数INCLUDEに以下のパスを追加する。
「C:\Program Files (x86)\Windows Kits\10\Include\10.0.10240.0\ucrt」
環境変数INCLUDEがないと、実行時に、nvccがヘッダーファイルを見つけられずエラーになる。
※2018/1/27 追記
Chainer 3.3.0では環境変数PATHとINCLUDEを設定していなくても問題なく動作するようになっていました。
Chainerをアンインストールしてからインストールし直す。
pip uninstall chainer pip install chainer --no-cache-dir
動作確認
Chainer 1.17のMNISTサンプルを実行する。
git clone https://github.com/pfnet/chainer.git cd chainer\examples\mnist python train_mnist.py -g 0
Chainer 1.11からは、MNISTサンプルでTrainerが使用されているため、学習の進捗状況がコンソールに表示されるようになった。
しかし、Windowsのコマンドプロンプトでは、正しく表示されないため、以下のような悲しい表示となる。
(※2017/4/9追記 1.22で確認したところ、コマンドプロンプトでも正しく表示されるようになっていました。)
GPU: 0 # unit: 1000 # Minibatch-size: 100 # epoch: 20 [Jepoch main/loss validation/main/loss main/accuracy validation/main/accuracy [J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J total [..................................................] 0.83% this epoch [########..........................................] 16.67% 100 iter, 0 epoch / 20 epochs inf iters/sec. Estimated time to finish: 0:00:00. [4A[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J total [..................................................] 1.67% this epoch [################..................................] 33.33% 200 iter, 0 epoch / 20 epochs 280.13 iters/sec. Estimated time to finish: 0:00:42.123847. [4A[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J total [#.................................................] 2.50% this epoch [#########################.........................] 50.00% 300 iter, 0 epoch / 20 epochs 286.58 iters/sec. Estimated time to finish: 0:00:40.826498. (省略) [4A[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J total [#################################################.] 99.17% this epoch [#########################################.........] 83.33% 11900 iter, 19 epoch / 20 epochs 276.56 iters/sec. Estimated time to finish: 0:00:00.361588. [4A[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J[J20 0.0119729 0.129709 0.996765 0.9807 [J total [##################################################] 100.00% this epoch [..................................................] 0.00% 12000 iter, 20 epoch / 20 epochs 275.05 iters/sec. Estimated time to finish: 0:00:00. [4A[J
表示はおかしいが、実行結果には問題ない。
グラフ表示をやめたい場合は、train_mnist.pyの
trainer.extend(extensions.PrintReport( ['epoch', 'main/loss', 'validation/main/loss', 'main/accuracy', 'validation/main/accuracy']))
と
trainer.extend(extensions.ProgressBar())
の行をコメントアウトすればよい。
ただし、進捗状況が一切表示されなくなるので、進捗状況を確認したい場合は、別のコマンドプロンプトを起動して、result\logをMinGWなどでインストールしたtailコマンドで確認する必要がある。
2016/11/29追記
PowerShellだと進捗状況が正しく表示できると情報頂きました。
確認したところ、以下のように正しく表示されました。
PS chainer\examples\mnist> python train_mnist.py -g 0 GPU: 0 # unit: 1000 # Minibatch-size: 100 # epoch: 20 epoch main/loss validation/main/loss main/accuracy validation/main/accuracy elapsed_time 1 0.193621 0.0969001 0.941784 0.9699 4.65855 2 0.07452 0.0797367 0.976265 0.9741 6.83185 3 0.0499362 0.107785 0.983765 0.9663 9.00563 4 0.0342047 0.0684211 0.989098 0.9787 11.1779 5 0.0294403 0.0747326 0.990565 0.9789 13.3467 6 0.0248758 0.0861258 0.991448 0.9775 15.5149 7 0.0212153 0.0827466 0.992732 0.9791 17.6967 8 0.019431 0.076995 0.993798 0.9818 19.8634 9 0.0164358 0.0847282 0.994882 0.9813 22.0251 10 0.0141179 0.0980002 0.995782 0.9786 24.1904 11 0.0143263 0.104953 0.995415 0.9782 27.1725 total [############################......................] 57.50% this epoch [#########################.........................] 50.00% 6900 iter, 11 epoch / 20 epochs 268.05 iters/sec. Estimated time to finish: 0:00:19.026036.
2017/4/12 追記
chainer 1.20.0以降で、Theanoの関数がサポートされるようになったため、実行時にWARNINGが出力されるようになりました。
WARNING (theano.configdefaults): g++ not detected ! Theano will be unable to execute optimized C-implementations (for both CPU and GPU) and will default to Python implementations. Performance will be severely degraded. To remove this warning, set Theano flags cxx to an empty string.
また、chainer 1.20.0以降では、Python Tools for Visual Studioを使用して、デバッグを開始するとエラーが発生し、デバッグを開始できなくなります。
そのため、Windowsではchainerをバージョン指定して1.18.0をインストールすることをお勧めします。(1.19.0はインストールでエラーが発生します。)
※ 1.24.0ではエラーが発生しなくなっていました。Windowsでも最新バージョンをインストールしても問題ありません。
バージョンを指定してインストールする方法
pip install chainer==1.18.0 --no-cache-dir
ただし、最新のMNISTサンプルを実行しようとすると、以下のエラーが発生します。
Traceback (most recent call last): File ".\chainer\examples\mnist\train_mnist.py", line 129, in <module> main() File ".\chainer\examples\mnist\train_mnist.py", line 99, in main if extensions.PlotReport.available(): AttributeError: module 'chainer.training.extensions' has no attribute 'PlotReport'
その場合、99行目から106行目をコメントアウトすることで実行できるようになります。
グラフを画像に保存する処理なのでコメントアウトしても結果に影響はありません。