SONYのニューラルネットワークを直観的に構築するツール「Neural Network Console」は、GPUを利用することで速く学習が可能になります。
ただしGPUの世代がKepkerだと、ちょっといじらないと動きません。
※ここではクラウド版ではなく、Windows版の「Neural Network Console」について書いています
【注意】
私の環境では、まだうまく動いていないので、真似しないほうがいいです。
エラーメッセージ
いじる前は、こんな感じでエラーになります。
2018-08-08 18:56:48,681 Training process is started.
・・・途中省略・・・
forward_function
func.variable_inputs, func.variable_outputs)
File "nnabla\function.pyx", line 188, in nnabla.function.Function.forward (D:\gitlab-ci\builds\862e82a9\2\nnabla\nnabla-builder\nnabla\python\src\nnabla\function.cpp:5145)
RuntimeError: target_specific error in nbla::cublas_gemm
C:\ci\builds\f124a89d\3\nnabla\nnabla-builder\nnabla-ext-cuda\src\nbla\cuda\cublas.cpp:50
Failed `status == CUBLAS_STATUS_SUCCESS`: ARCH_MISMATCH
CUDAのインストール
CUDA 8をインストールします。(バージョンは重要です)
インストール方法等は省略。
cuDNNのインストール
cuDNN 7をインストールします。(バージョンは重要です)
インストール方法等は省略。
※ログインが必要
※CUDA毎、Windows毎に異なるので注意
ライブラリの入れ替え
「Neural Network Console」から呼んでいるGPU呼び出しモジュールを入れ替えます。
パスの設定
linux環境ではおなじみのpipでモジュールのインストールを行いますので、「Neural Network Console」の以下の2つのフォルダにパスを通します。
- (インストールフォルダ)\libs\Miniconda3
- (インストールフォルダ)\libs\Miniconda3\Scripts
コマンドプロンプトを開き、以下のように実行します。
c:\hoge\nnc> set path=%path%;c:\hoge\nnc\libs\Miniconda3;c:\hoge\nnc\libs\Miniconda3\Scripts
入れ替え
pipを使って、古いライブラリを消し、新しいライブラリ(古いバージョンのライブラリ)をインストールします。
c:\hoge\nnc> pip uninstall nnabla-ext-cuda
c:\hoge\nnc> pip install nnabla-ext-cuda80==1.0.0
【参考】
ライブラリとCUDA/cuDNNの関係は以下の通りとのこと。
- nnabla-ext-cuda80 (CUDA 8.0 x cuDNN 7.1)
- nnabla-ext-cuda90 (CUDA 9.0 x cuDNN 7.1)
- nnabla-ext-cuda91 (CUDA 9.1 x cuDNN 7.1)
- nnabla-ext-cuda92 (CUDA 9.2 x cuDNN 7.1)
確認
ちゃんと動作するか、サンプルプロジェクトで確認してみます。
2018-08-08 19:05:18,694 Training process is started.
・・・途中省略・・・
2018-08-08 19:05:24,755 [nnabla]: Train with contexts ['cpu']
2018-08-08 19:05:24,770 [nnabla]: Training epoch 1 of 100 begin
2018-08-08 19:05:24,973 [nnabla]: epoch 1 of 100 cost=0.670640 {train_error=0.601071, valid_error=0.616336}
2018-08-08 19:05:25,082 [nnabla]: epoch 2 of 100 cost=0.557968 {train_error=0.514157, valid_error=0.542608}
2018-08-08 19:05:25,176 [nnabla]: epoch 3 of 100 cost=0.481263 {train_error=0.448142, valid_error=0.492721}
2018-08-08 19:05:25,301 [nnabla]: epoch 4 of 100 cost=0.423768 {train_error=0.401717, valid_error=0.450013}
2018-08-08 19:05:25,394 [nnabla]: epoch 5 of 100 cost=0.384835 {train_error=0.361735, valid_error=0.410510}
2018-08-08 19:05:25,441 [nnabla]: epoch 6 of 100 cost=0.344484
2018-08-08 19:05:25,488 [nnabla]: epoch 7 of 100 cost=0.315490
2018-08-08 19:05:25,535 [nnabla]: epoch 8 of 100 cost=0.296956
2018-08-08 19:05:25,581 [nnabla]: epoch 9 of 100 cost=0.276522
2018-08-08 19:05:25,691 [nnabla]: epoch 10 of 100 cost=0.255827 {train_error=0.248344, valid_error=0.310425}
・・・途中省略・・・
2018-08-08 19:05:30,190 [nnabla]: epoch 96 of 100 cost=0.060721
2018-08-08 19:05:30,236 [nnabla]: epoch 97 of 100 cost=0.062549
2018-08-08 19:05:30,283 [nnabla]: epoch 98 of 100 cost=0.053480
2018-08-08 19:05:30,330 [nnabla]: epoch 99 of 100 cost=0.064627
2018-08-08 19:05:30,439 [nnabla]: epoch 100 of 100 cost=0.060106 {train_error=0.056343, valid_error=0.119016}
2018-08-08 19:05:30,439 [nnabla]: Training Completed.
Please install the correct version of CUDA / CUDNN.
Or install correct nnabla_ext_cuda for installed version of CUDA/CUDNN.
あれ?
2018-08-08 19:05:24,755 [nnabla]: Train with contexts ['cpu']
あれあれ??
Please install the correct version of CUDA / CUDNN.
Or install correct nnabla_ext_cuda for installed version of CUDA/CUDNN.
でもまぁ動いたからいいか...う~ん。
なんとなく、ライブラリを変えるだけで、GPUを指定してもCPUで動くようになるような気がする...
※問題解決にはなってないけど
後日追記
ライブラリを戻しても、CUDAのバージョンを上げても、結局CPUで動くようになってしまったので、もう何がなんだかわからない...
一番最初のエラーはなんだったのか(苦笑)
手動で確認
>>> import nnabla_ext.cudnn
Please install the correct version of CUDA / CUDNN.
Or install correct nnabla_ext_cuda for installed version of CUDA/CUDNN.
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\users\mine.soltec\desktop\neural network console\libs\miniconda3\lib\site-packages\nnabla_ext\cudnn\__init__.py", line 18, in <module>
import nnabla_ext.cuda
File "c:\users\mine.soltec\desktop\neural network console\libs\miniconda3\lib\site-packages\nnabla_ext\cuda\__init__.py", line 20, in <module>
from .init import (
ImportError: DLL load failed: 指定されたモジュールが見つかりません。
- 「init.cp36-win_amd64.pyd」内でDLLがロードできていない模様。
(「init.cp36-win_amd64.pyd」ではなく「init.pyd」が呼ばれている可能性もあり)
※「init.cp36-win_amd64.pyd」が呼び出せているのは確認済み - init.cp36-win_amd64.pyd → nnabla_cuda.dll → cudnn64_7.dll等という呼び出し構造になっている模様。
- もしかしたら、全然別のDLLが見つからないのかもしれない
怪しい部分
- 公式な対象がWindows8.1かWindows10の64bit版
→確認しているのがWindows7の64bit版 - 「Microsoft Visual C++ 2015 Redistributable」が必要
→「Microsoft Visual C++ 2017 Redistributable」をインストールすると2015の方が消える
現時点での結論
Windows7+Kepler環境では、「Neural Network Console」は使い物にならない。
参考情報
https://groups.google.com/forum/#!topic/neural_network_console_users_jp/cbC87rHV4As
https://groups.google.com/forum/#!topic/neural_network_console_users/9OKrwn2oOIA
https://nnabla.readthedocs.io/en/latest/python/install_on_windows.html