ChainerでGPUを使えるようにする
ChainerでPCのGPU(GTX1060)を使えるようにしてみました。cuDNNなどのインストールの記録です。
目次
バージョンに注意
ChainerでNVIDIAのGPUを使うにはいくつかのソフトウェアのインストールが必要なのですが、それぞれ互いをサポートするバージョンが限られていますので注意が必要です。
ここでは、Windows10 64bitのPython 3.7とChainer 6.1の環境に、CUDA toolkitとcuDNNとCuPyをインストールします。
Visual Studioのインストール
Visual Studio Community 2019をインストールします。
マイクロソフトのサイト からインストーラーをダウンロードして、インストーラーの指示に従ってインストールします。
本当はこれが必要かどうかわからなかったのですが、PCにVisual StudioがインストールされていないとCUDA toolkitのインストール時に警告が表示されるので、とりあえず入れました。
インストール後にPCの再起動が必要になります。
CUDA toolkitのインストール
NVIDIAのサイト からCUDA toolkitをダウンロードします。
Windows用のバージョン10.1のネットワークインストール版にしました。
ダウンロードしたインストーラーを起動して、ダイアログに従ってインストールします。
cuDNNのインストール
NVIDIAのcuDNNのサイト からcuDNNをダウンロードします。
CUDA 10.1にあわせてcuDNN 7.6.1をダウンロードしました。
ダウンロードしたzipファイルを開いて、中のファイルをすべてCUDAのインストールディレクトリにコピーします。私の場合のCUDAのインストールディレクトリは下記でした。
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1
環境変数CUDA_PATHを設定します。
Windowsで「システム環境変数の編集」を開いて、新規の環境変数としてCUDA_PATHを設定します。値は下記です。
CUDA_PATH の設定値
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1\bin
CuPyのインストール
CuPyはPFN製のツールです。
公式のインストレーションガイドに従って、pipでインストールします。CUDA 10.1用なので、cupy-cuda101ですね。
> pip install cupy-cuda101
動作確認
インストールが終わったらPythonを起動してバージョンを確認してみます。
>>> import chainer
>>> chainer.print_runtime_info()
Platform: Windows-10-10.0.17763-SP0
Chainer: 6.1.0
NumPy: 1.16.4
CuPy:
CuPy Version : 6.1.0
CUDA Root : C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1
CUDA Build Version : 10010
CUDA Driver Version : 10020
CUDA Runtime Version : 10010
cuDNN Build Version : 7500
cuDNN Version : 7500
NCCL Build Version : None
NCCL Runtime Version : None
iDeep: Not Available
CuPyもcuDNNも認識されてるみたいですね。
プログラムを実行してみた
以前の投稿 で作ったプログラムをGPUで実行してみます。
プログラムの変更箇所は、gpu_id=-1の箇所をgpu_id=0に変更しただけです。
GPUでの実行結果はこんな感じです。
epoch main/loss main/accuracy val/main/loss val/main/accuracy elapsed_time lr
1 1.95098 0.294389 1.73378 0.370898 4.2799 0.01
2 1.61783 0.423695 1.58525 0.433789 7.68214 0.01
3 1.48455 0.46806 1.44352 0.486133 10.9139 0.01
4 1.39733 0.498557 1.40814 0.488477 14.2344 0.01
5 1.32612 0.528 1.33373 0.531836 17.4989 0.01
6 1.26416 0.547474 1.32005 0.536523 20.7889 0.01
7 1.2232 0.562077 1.32893 0.519727 24.1614 0.01
8 1.17002 0.584783 1.27554 0.550781 27.4536 0.01
9 1.11919 0.60174 1.20257 0.572266 30.7289 0.01
10 1.07182 0.620548 1.21364 0.566211 34.0453 0.01
11 1.03131 0.636009 1.17099 0.583984 37.2642 0.01
12 0.992332 0.64846 1.18573 0.584766 40.4871 0.01
13 0.94667 0.665505 1.12495 0.603516 43.8106 0.01
14 0.903241 0.6806 1.13328 0.607031 47.065 0.01
15 0.862923 0.696644 1.13663 0.602539 50.3673 0.01
16 0.815238 0.711895 1.15817 0.600195 53.5971 0.01
17 0.778302 0.725786 1.12613 0.616797 56.8842 0.01
18 0.733753 0.742765 1.17826 0.603906 60.1899 0.01
19 0.693527 0.757968 1.18404 0.606055 63.4368 0.01
20 0.643745 0.77417 1.16787 0.613477 66.729 0.01
Test accuracy: 0.611254
精度が異なっているのは、たぶん乱数のseedを指定していないためです。
20エポックの経過時間を比較してみます。
CPU (core i5-8250u) |
746.520 秒 |
GPU (GTX1060 6G) |
66.729 秒 |
早いなあ。
公開日
広告