最近tensorflow使い始めました 手元のMacBook Proだと学習にとっても時間がかかるので、AWS EC2のGPUインスタンスを使ってみることに.
EC2を安価に使うにはスポットインスタンス♪と思ったのですが、なんと、スポットインスタンスだとCUDAとかがセットアップされたNVIDIAのAMIが選択できないじゃないですか どうやら素のOSの上に自力で環境構築しないといけないっぽい. でも1回環境作ってしまえば再利用は可能.
というわけで、GPU版tensorflowを動かすまでの手順をまとめます. 構築する環境は
Ubuntu 16.04 LTS + CUDA + cuDNN + python3.6 + tensorflow-gpu
です.
EC2インスタンスの作成
EC2コンソールから「スポットインスタンスのリクエスト」でインスタンスを作成します.
- AMI: Ubuntu 16.04 LTS
- インスタンスタイプ: p2.large
- EBS ボリューム: デフォルト8GBなので適当に増やす. 32GBとか.
インスタンスタイプはp2.8xlargeやp2.16xlargeでもいいですが、セットアップはp2.largeで行っておいて、学習時に8xlargeや16xlargeに切り替えてもいいかも.
EC2インスタンスが起動したら各モジュールを最新版にアップグレードし、最低限の開発環境をインストール.
$ sudo apt-get update
$ sudo apt-get upgrade
$ sudo apt-get install libffi-dev libssl-dev gcc make
pyenvを使ってpython環境を整える
まずpyenvをgit cloneする.
$ git clone https://github.com/yyuu/pyenv.git ~/.pyenv
.bashrc に以下追加.
PYENV_ROOT=$HOME/.pyenv
PATH=$PYENV_ROOT/bin:$PYENV_ROOT/shims:$PATH
eval "$(pyenv init -)"
編集した.bashrcを読み込んでおく.
$ source ~/.bashrc
続いてpythonのインストール. 今回はpython 3.6を入れる.
$ pyenv install --list|grep 3.6
3.3.6
3.6.0
3.6-dev
3.6.1
3.6.2rc1
$ pyenv install 3.6.1
$ pyenv global 3.6.1
$ which pip3
/home/ubuntu/.pyenv/shims/pip3 # pyenvが使われているのを確認
$ pip3 install aws # ついでに入れておく
CUDAのインストール
CUDAのダウンロードサイトでdebファイルのダウンロード先を調べる.
- OS:Linux,
- Architecture: x86_64,
- Distribution:Ubuntu,
- Version: 16.04,
- Installer Type: dev(local)
を選べば良い. URLが分かったら, wgetで取得してインストール.
$ wget https://developer.nvidia.com/compute/cuda/8.0/Prod2/local_installers/cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64-deb
$ sudo dpkg -i cuda-repo-ubuntu1604-8-0-local-ga2_8.0.61-1_amd64-deb
$ sudo apt-get update
$ sudo apt-get install cuda
cuDNNのインストール
cuDNNのダウンロードサイトから cuDNN v6.0 Library for Linux を取得してインストールすれば良いのだが、ユーザ登録してログイン後のページからしかダウンロード出来ず、wgetでURL指定で簡単にダウンロード出来ない.
一度macに保存してscpでEC2に送り込むことにした.
# scpでローカルのMacからEC2にdevファイルをコピー. pemファイルのパスとIPは適宜変更.
$ scp -i aws.pem ~/Downloads/cudnn-8.0-linux-x64-v6.0.tgz ubuntu@12.34.56.789:~/
$ tar xzf cudnn-8.0-linux-x64-v6.0.tgz
$ sudo cp -a cuda/lib64/* /usr/local/lib/
$ sudo cp -a cuda/include/* /usr/local/include/
$ sudo ldconfig
tensorflowのインストール
CPU版のtensorflowが入っている場合はuninstallしてからGPU版を入れる. ついでによく使うライブラリも入れておく.
$ sudo apt-get install libcupti-dev
$ pip3 uninstall tensorflow
$ pip3 install tensorflow-gpu
$ pip3 install keras sklearn matplotlib scipy librosa
サンプルを動かして動作確認
今回はkerasのmnist-mlpで動作確認. git cloneでサンプルを取得して実行.
$ git clone https://github.com/fchollet/keras.git
$ cd keras/examples
$ $ python mnist_mlp.py
Using TensorFlow backend.
...
Test loss: 0.118156189926
Test accuracy: 0.9811
$
動いた