TadaoYamaokaの日記

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

WindowsでChainerをGPUを使って動かす(v2.0対応)

Windowsで安定して使用できるv1.24を使用していましたが、Chainer v2.0でパフォーマンスが向上するということなので、アップデートしました。

v1.24用のコードに一部修正が発生しましたが、軽微な修正で対応できました。

アップデート手順

v1.24をアンインストールして、インストールし直す。

pip uninstall chainer
pip install chainer --no-cache-dir

GPUを使用する場合は、cupyを追加でインストールする。

pip install cupy

MNISTサンプルの実行

git clone https://github.com/pfnet/chainer.git
cd chainer
python examples\mnist\train_mnist.py -g 0

成功すれば、以下のように表示される。

H:\src\chainer>python examples\mnist\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.192455    0.0952584             0.942016       0.9691                    41.9665
2           0.0766379   0.0824858             0.975816       0.9736                    44.3679
3           0.0475103   0.0777052             0.984365       0.9759                    46.7663
4           0.0350414   0.0709947             0.988666       0.9795                    49.1532
5           0.0306068   0.0739683             0.990015       0.9812                    51.5701
6           0.0223621   0.082753              0.992615       0.9787                    53.9638
7           0.0204088   0.07966               0.993482       0.9805                    56.4207
8           0.0193365   0.074065              0.993732       0.9814                    58.8356
9           0.0145758   0.0646451             0.995515       0.985                     61.2115
10          0.015124    0.087687              0.995498       0.981                     63.6042
11          0.0152862   0.0875953             0.995016       0.9826                    65.9779
12          0.0150241   0.0847389             0.995349       0.983                     68.3442
13          0.00898874  0.0903441             0.997049       0.9807                    70.6993
14          0.0138175   0.124715              0.995916       0.9764                    73.0819
15          0.00765957  0.0941705             0.997549       0.9818                    75.4683
16          0.0109906   0.116298              0.996966       0.9781                    77.8691
17          0.0103545   0.0987549             0.996749       0.9824                    80.2834
18          0.0108863   0.127021              0.997149       0.9787                    82.7075
19          0.0088669   0.120687              0.997332       0.9792                    85.0907
20          0.00868301  0.108154              0.997749       0.9821                    87.4538

v1用のコード修正

自分が記述したコードで、対応が必要な個所は以下の通りでした。

trainとtestオプション削除

BatchNormalizationのtestオプションと、dropoutのtrainオプションを削除し、モデル実行時に

with chainer.using_config('train', False):

を使用する。

volatileオプション削除

Variableのvolatileオプションを削除し、モデル実行時に

with chainer.no_backprop_mode():

を使用する。

use_cleargrads削除
optimizer.use_cleargrads()

を削除する。

v1からv2への変更の詳細は、公式のドキュメントを参照。

パフォーマンス測定

v2.0にすることでパフォーマンスが向上するか確認した。

検証している将棋のWide Resnetのモデルの学習時間で比較した。

time(mm:ss)
v1.24 0:21:01
v2.0 0:19:53


学習時間が5.39%向上した。
また、Windowsで問題なく実行できた。