LoginSignup
15
18

More than 5 years have passed since last update.

AWS EC2のスポットインスタンスでGPU版tensorflowを動かす

Last updated at Posted at 2017-07-26

最近tensorflow使い始めました:smile: 手元のMacBook Proだと学習にとっても時間がかかるので、AWS EC2のGPUインスタンスを使ってみることに.
EC2を安価に使うにはスポットインスタンス♪と思ったのですが、なんと、スポットインスタンスだとCUDAとかがセットアップされたNVIDIAのAMIが選択できないじゃないですか:scream: どうやら素の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
$

動いた:sunglasses:

15
18
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
18