久しぶりにAWSのGPUインスタンスを見ていてると、p2インスタンスが利用可能になっていました。
p2のGPUはTesla K80が載っているのでg2系のK10よりも2.5倍ほど速い。FLOPSは2倍、GPUメモリは3倍、などおおむね倍以上のスペックになっていて、値段としては、g2.2xlargeが$0.65/hでp2.xlargeが$0.9/hなので、1.4倍ほど。ディープラーニングの学習が12時間かかったとしても1200円ちょっとで、コストパフォーマンスとしても割といいのではないでしょうか。
このp2インスタンス、AmazonLinuxならCaffeなどが入っているらしいですが、ディープラーニングではubuntuばかり使っているので、ubuntuでのTensorFlowインストールを行います。以前に比べて妙な手間が減って割と簡単になった感があります。
Ubuntu初期設定
まずインスタンスを立ち上げます。Ubuntu Server 16.04 LTSを使用して、ディープラーニングではデータセットが大きくなるのでSSDは50GB以上など大きめにとっておきます。
インスタンスが起動したら、ツール類をインストールしておきます。今回はPython2.7で。
$ sudo apt-get update $ sudo apt-get upgrade -y $ sudo apt-get install -y build-essential python-pip python-dev git python-numpy swig python-dev default-jdk zip zlib1g-dev ipython
CUDA/cuDNNインストール
デフォルトでnouveauのグラフィックドライバが有効になっているので、NVIDIAのCUDAなどドライバをインストールする際にエラーがでないように無効化しておきます。
$ echo -e "blacklist nouveau\nblacklist lbm-nouveau\noptions nouveau modeset=0\nalias nouveau off\nalias lbm-nouveau off\n" | sudo tee /etc/modprobe.d/blacklist-nouveau.conf $ echo options nouveau modeset=0 | sudo tee -a /etc/modprobe.d/nouveau-kms.conf $ sudo update-initramfs -u $ sudo reboot $ sudo apt-get install -y linux-image-extra-virtual $ sudo reboot
NVIDIAのウェブサイトからドライバをダウンロードしておきます。
cuDNNはNVIDIAへのログインが必要です。CUDA8.0と、cuDNN5.1 for CUDA 8.0をダウンロードしたら、SCPなどでubuntu側へアップロードしておきます。
CUDAインストール
sudo apt-get install -y linux-source linux-headers-`uname -r` sudo dpkg -i cuda-repo-ubuntu1604_8.0.61-1_amd64.deb sudo apt-get update sudo apt-get install cuda
cuDNNインストール
tar xvzf cudnn-8.0-linux-x64-v5.1.tgz sudo cp -P cuda/include/cudnn.h /usr/local/cuda/include sudo cp -P cuda/lib64/libcudnn* /usr/local/cuda/lib64 sudo chmod a+r /usr/local/cuda/include/cudnn.h /usr/local/cuda/lib64/libcudnn* sudo apt-get install libcupti-dev
.profile更新
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/local/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64" export CUDA_HOME=/usr/local/cuda
$ source ~/.profile
CUDAドライバのインストールは完了です。
$ nvidia-smi
で、
+-----------------------------------------------------------------------------+ | NVIDIA-SMI 375.66 Driver Version: 375.66 | |-------------------------------+----------------------+----------------------+ | GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC | | Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. | |===============================+======================+======================| | 0 Tesla K80 Off | 0000:00:1E.0 Off | 0 | | N/A 37C P0 76W / 149W | 0MiB / 11439MiB | 93% Default | +-------------------------------+----------------------+----------------------+ +-----------------------------------------------------------------------------+ | Processes: GPU Memory | | GPU PID Type Process name Usage | |=============================================================================| | No running processes found | +-----------------------------------------------------------------------------+
が出てくればOKです。
TensorFlowインストール
使いたいライブラリがr0.12バージョン指定だったのでTensorFlow r0.12をインストールします。必要に応じてバージョンは変えてください。
$ export TF_BINARY_URL=https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-0.12.1-cp27-none-linux_x86_64.whl $ sudo pip install --upgrade $TF_BINARY_URL
動作確認をしておきます。 TensorFlowの動作確認。
$ python ... >>> import tensorflow as tf >>> hello = tf.constant('Hello, TensorFlow!') >>> sess = tf.Session() >>> print(sess.run(hello)) Hello, TensorFlow! >>> a = tf.constant(10) >>> b = tf.constant(32) >>> print(sess.run(a + b)) 42 >>>
CUDAが上手く動いているか確認。
$ python -c 'import os; import inspect; import tensorflow; print(os.path.dirname(inspect.getfile(tensorflow)))' I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcublas.so locally I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcudnn.so locally I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcufft.so locally I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcuda.so.1 locally I tensorflow/stream_executor/dso_loader.cc:128] successfully opened CUDA library libcurand.so locally /usr/local/lib/python2.7/dist-packages/tensorflow
ここまでできればAMIなどを作成してインスタンスを停止、使いたいときに起動という運用にしておけば、いつでも低コストで人工知能の開発ができますね。