ディープラーニングフレームワークChainerをEC2のGPUインスタンスで動かす g2.2xlarge instance

GPUモードで動かしたことなかったのでEC2でやってみた。
GPUモードとCPUモードのスピードの差は圧倒的で、
GPU:CUP=2.49143505096:161.869711161だった

以下手順備忘録

1. g2.2xlargeを一番安いバージニアリージョンでたてる

ただしコマンドのレスポンスが遅いのでイライラする

2. ややこしいので以下全部root

sudo su -

3. いろいろインストール

yum -y update
yum -y install gcc gcc-c++ kmod perl python-devel
wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py
python get-pip.py
pip install numpy

sudo reboot

参考:
chainer-test/Dockerfile.centos7_cuda at master · pfnet/chainer-test · GitHub

4. nvidiaドライバーをインストール

ここの「NVIDIA ドライバの手動インストール」のところ
Linux GPU のインスタンス - Amazon Elastic Compute Cloud
最後のrunファイル実行したらでてくる黒い画面での選択肢は全部YES系。
最初は違うバージョンをインストールしていたがうまくいかず、このバージョン(340.46)でうまくいった。

4.2. CUDAをインストール

wget http://developer.download.nvidia.com/compute/cuda/6_5/rel/installers/cuda_6.5.19_linux_64.run
chmod +x cuda_6.5.19_linux_64.run
mkdir installers
./cuda_6.5.19_linux_64.run -extract=`pwd`/installers
cd installers
./cuda-linux64-rel-6.5.19-18849900.run -noprompt

PATHとLD_LIBRARY_PATHの追加。
いくつかやり方があったけど、最終的にbashrcに書いてしまうのが確実だった

export CUDA_ROOT=/usr/local/cuda-6.5
LD_LIBRARY_PATH=/usr/local/cuda-6.5/lib64
export LD_LIBRARY_PATH
PATH=$PATH:$CUDA_ROOT/bin
export PATH

source ~/.bashrc

5. いろいろインストール

このあたりは勢いで入れたので必要かどうか怪しい

pip install --upgrade pip
yum install zlib zlib-devel tk-devel tcl-devel sqlite-devel ncurses-devel gdbm-devel readline-devel bzip2-devel db4-devel openssl-devel
yum install -y boost-devel

これはたしかchainerのソース見ていたら必要そうだったので入れたやつ

pip install scikits
pip install Mako
pip install six
pip install scikits.cuda==0.5.0b1 (このタイミングではエラーがでて入らなかったので一番最後に入れるとうまくいった)

pycudaのインストール

これが苦労した

wget https://pypi.python.org/packages/source/p/pycuda/pycuda-2015.1.2.tar.gz
tar zxvf pycuda-2015.1.2.tar.gz
cd pycuda-2015.1.2
./configure.py
make
make install

makeはいろいろwarningとかでるが最後がこんなので終わった。

src/wrapper/_pvt_struct_v2.cpp:1593:74: warning: deprecated conversion from string constant to ‘char*’ [-Wwrite-strings]
StructError = PyErr_NewException("pycuda._pvt_struct.error", NULL, NULL);
^
g++ -pthread -shared build/temp.linux-x86_64-2.7/src/wrapper/_pvt_struct_v2.o -L/usr/lib64 -lpython2.7 -o build/lib.linux-x86_64-2.7/pycuda/_pvt_struct.so

make installのあとはこんな感じ

Using /usr/lib/python2.7/dist-packages
Finished processing dependencies for pycuda==2015.1.2

pycudaのTEST

cd ~/pycuda-2015.1.2/test/
python test_driver.py
python test_gpuarray.py
python test_cumath.py

すべてグリーンになったらOK。
ここでのNGを放置するとchainerでもコケる。
最初はNGだったが、
NVIDIAドライバーのバージョン
環境変数(PATHとLD_LIBRARY_PATH)
を見直すことでうまくいくようになった。だったと思う。

今からもういちどこの手順でうまくいくか試してみよう...[OK]

chainer のインストール

最新版(2015/07/04時点)だとcomputational_graph.py周りのimportが新たに加わっていてエラーがでたので、gitから1.0.1を落としてきてソースからインストールした。
あと、sklearn.datasetsを入れるのはすごく大変そうだった。
あ、でも今最新版みたら逆にその部分はimport dataとなっていてsklearn.datasets不要になっているっぽい?

気付き

GPUインスタンスのように高額なインスタンスだと、すごく作業に集中できることがわかった。