人気ブログランキング | 話題のタグを見る

主にニュースに対する感想を書いていきます


by only_brain_108
カレンダー
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
31

Windows8.1 + VC2010Express + WinSDK7.1 + Python3.4 + CUDA7.5 + Theano + Keras

いままでメインマシンはWindows+OpenCL+Theanoを使っていたんだけど
OpenCLだとRNNが使えないという問題があった
(TheanoのOpenCLが不十分なのだが、仕方ないね…)

サブマシン(GTX1080を乗せた)から追い出されたGTX980Tiがあるので
これをメインマシンに乗せてRNNもできるようにする

連休をつぶしていろいろやった結果、何とか環境構築に成功したのでここにメモ

Python3.5ではなくてPython3.4を使っているのは
AnacondaのPython3.5では簡単にはTheanoが動かないから(仕方ないね…)

VisualStudio2010 Express + WinSDK7.1
Windowsのクリーンインストールが必要!

Python3.4はVS2010でコンパイルされているので、それにあわせてVS2010 Expressを入れる

以下が必要になるソフトなのであらかじめダウンロードしておく
VisualStudio2010 Express
WinSDK7.1
VisualStudio2010 SP1
64bitコンパイラが消えちゃう問題の修正パッチ

VisualStudio2010Expressは64bitバイナリが作れない
→WinSDK7.1を追加すると64bitバイナリが作れるようになる
→WinSDK7.1をインストールするためにはVCの再配布ライブラリが入っていない状態が必要
→最近のグラフィックドライバは再配布ライブラリを入れてくるのでグラフィックドライバより前に入れる必要がある
OS再インストールが必要

Visual Studio 2010 Express
OS入れてマザボに付属のドライバを入れた直後にVisualStudio2010 Expressを入れる
(Win8.1の標準設定だと勝手にグラボのドライバを入れてくるので、ドライバを入れないようにして作業する)
いろいろオプションが入れられるようだが、オプションは不要

Windows SDK 7.1
こっちもいろいろオプションが出るけどC++のコンパイラだけあればよい
つまり以下を入れる
Windows Native Code Developmentの
・Windows Headers and Libraries
・Tools
・Visual C++ Compilers
".Net Development"は消せないので消せる分だけしてインストールする

Windows SDK 7.1が入れ終わったら、グラボのドライバとかWindowsUpdateをしても大丈夫

VisualStudio 2010 SP1
VS2010が入っているとWindowsUpdateで入れようとしてくるけど、うまくいかないのでパッケージで入れる
(なくてもいい気がするけどなんとなく入れている)

VS 2010 SP1で消えた64bitコンパイラを復活
何かの嫌がらせか?
SP1入れると64bit用のコンパイラが消えてしまうんですね
でもそれを元に戻すパッケージがあるので、それを入れて64bit用のコンパイラを復活させる

参考
http://d.hatena.ne.jp/kfujieda/20140827/1409137229

CUDA 7.5 + CuDNN v5.1
VisualStudio2010に対応したCUDAということで、なんとなくCUDA7.5にしてみた
CUDA8.0も一応対応してるみたいよ…

CUDA 7.5
もともとCUDAはExpress版には対応していないので、
インストール時にVisualStudio2010が見つからないといわれるが無視して続けてよい
(すくなくともPythonから使う分には動いた)

CuDNN v5.1
展開してCUDAのインストールディレクトリに上書きして終了

Python 3.4
Anacondaを使う
ここではAnaconda4.1.0をインストールした
(Anaconda4.2.0はQtConsoleじゃない生コンソールでマウスのスクロールが効かないバグがあるため)
AnacondaはPython3.5なんだけどGCCとかの絡みでPython3.4だとTheanoが動かない
そこでconda createでPython3.4の仮想環境を作って、それを使っていくことにする

python3.4の仮想環境を作る
生のcondaコンソールで以下を実行して仮想環境を作る
$ conda create --name py34 python=3.4.5 anaconda=4.1.1 mingw libpython

ショートカットの作成
環境によっては勝手に仮想環境を使うショートカットができるみたいだけど、できないときは手動で作る
  • py34のcondaコンソール
    %windir%\system32\cmd.exe "/K" C:\Anaconda3-4.1.0\Scripts\activate.bat C:\Anaconda3-4.1.0\envs\py34
  • py34の生コンソール
    C:\Anaconda3-4.1.0\envs\py34\python.exe C:\Anaconda3-4.1.0\cwp.py C:\Anaconda3-4.1.0\envs\py34 "C:/Anaconda3-4.1.0/envs/py34/python.ex e" "C:/Anaconda3-4.1.0/envs/py34/Scripts/ipython-script.py"
  • py34のQtConsole
    C:\Anaconda3-4.1.0\envs\py34\pythonw.exe C:\Anaconda3-4.1.0\cwp.py C:\Anaconda3-4.1.0\envs\py34 "C:/Anaconda3-4.1.0/envs/py34/pythonw.ex e" "C:/Anaconda3-4.1.0/envs/py34/Scripts/jupyter-qtconsole-script.py"
(↑どうもexblogではexeと書けないみたいなのでexとeに分けて書いてあるけど、本当はつながっている)

libgpuarray
Theanoの前提ライブラリであるlibgpuarrayを入れる(モジュール名はpygpu)
入れ方をしらないと難度が高いけど、知ってるならまぁ何とかなるレベル

準備
前に作ったpy34のcondaコンソールにVisualStudio2010(WinSDK7.1?)のコンパイル環境用変数を設定して作業をおこなう
VisualStudio2010のコンパイル環境変数は、
"C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd" /x64 /Release
で設定される。

要求パッケージ
なくてもいいっぽいけどとりあえず入れておく
$ conda install mako

ダウンロード等
(git処理は適当にmingwとかgnupack-devとかで行ってください)
$ git clone https://github.com/Theano/libgpuarray.git

最近libgpuarrayにGpuArray_maxandargmaxという機能を追加したみたいだけど
Windowsではコンパイルできなくなってるんだが…
仕方ないので少し古いものを使う
$ cd libgpuarray
$ git reset --hard 6e1e5c4 (←6e1e5c4はGpuArray_maxandargmaxがmergeされる前のID)

libgpuarrayのコンパイル
$ mkdir build
$ cd build
$ cmake .. -G "NMake Makefiles" -DCUDA_SDK_ROOT_DIR="C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5" -DCMAKE_BUILD_TYPE=Release
(cmakeはバイナリがどこかに落ちてるので持ってきてそれを使う)
$ nmake

後述のsetup.pyを実行する際にlib/Releaseにライブラリがないと動かないのでファイルを移動する
$ cd ../lib
$ mkdir Release
$ move * Release (コマンド違うかも)

pygpuのコンパイル&インストール
$ cd ..
$ python setup.py build --compiler=msvc
$ python setup.py install

後処理
インストールしただけではダメで、いくつかファイルを手動コピーする
dllのコピー
libgpuarray/lib/Release/gpuarray.dllをpython3.4用のpython.exeがあるディレクトリ(例:C:\Anaconda3-4.1.0\envs\py34)にコピー
ヘッダファイルのコピー
libgpuarray/src/gpuarrayを丸ごと、pygpuがインストールされたディレクトリにあるpygpuディレクトリ(C:\Anaconda3-4.1.0\envs\py34\Lib\site-packages\pygpu-0.2.1-py3.4-win-amd64.egg\pygpu)以下にコピー
これにより例えばC:\Anaconda3-4.1.0\envs\py34\Lib\site-packages\pygpu-0.2.1-py3.4-win-amd64.egg\pygpu\gpuarrayというようなディレクトリが作成される状態にする

テスト
動作確認しておく
py34のcondaコンソールを別途立ち上げて実行(VisualStudioの環境変数設定は不要)
$ set GPUARRAY_TEST_DEVICE=cuda
$ python
> import pygpu
> pygpu.test()

全部"."になっていればオッケー。多少"."が出てても大丈夫?
(gitから持ってきた6e1e5c4は全部"."だったけど、gitから持ってきたmasterのままだと三つ"E"が出てた)

Theano
libgpuarrayと同じくVisualStudio2010のコンパイル環境変数が設定されたpy34のcondaコンソールで作業する

ダウンロード
(以下のgit処理は適当にmingwとかgnupack-devとかで行ってください)
$ git clone --origin upstream git://github.com/Theano/Theano.git

コンパイル&インストール
$ python setup.py build --compiler=msvc
$ python setup.py install

設定
ここがメチャクチャわからなかった

環境変数PATHの設定
cl.exeがあるの場所をPATHに追加する(C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64 とか)
.theanorcの設定
HOME環境変数を設定して、そこに".theanorc"を用意して以下のように記述する

[global]
device=cuda
floatX = float32
#mode = FAST_RUN

[lib]
#cnmem = 1024

[nvcc]
flags=--cl-version=2010
compiler_bindir=C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64


参考

http://stackoverflow.com/questions/2760374/why-cant-nvcc-find-my-visual-c-installation
http://stackoverflow.com/questions/21103243/compiling-cuda-code-from-the-command-line
https://github.com/Theano/Theano/issues/1473
http://acoupleofrobots.com/everything/?p=2238
http://stackoverflow.com/questions/25729969/installing-theano-on-windows-8-with-gpu-enabled

テスト
http://deeplearning.net/software/theano_versions/dev/tutorial/using_gpu.html
上にサンプルプログラムが乗ってるので、それをコピペでファイルを作って実行する

$ python gpu_tutorial1.py

Keras
$ pip install keras
でKerasを入れて準備完了





というわけで、まともなDNN環境がWindows上に構築できた

機械学習関係はどうしてもnvidia寄りになってしまっていて
頑張ってRadeon使っていたけど最後には陥落してしまって悲しい今日この頃

復権ってあるんですかねぇ
AMDさん頑張ってください!!

追記 2016/10/)
設定で"cuda"と記述している部分があるけど"gpu0"にするのが正しいっぽい
gpu0にするとimport theanoを行ったときにCNMeMとcuDNNの使用状況が表示されるが
cudaだと表示されないのがなんか変なので


by only_brain_108 | 2016-10-11 22:33 | コンピュータ