AWS EC2 -Deep Learning AMI-
以前Azure Virtual MachineのNシリーズを使ってディープラーニングを試してみました。 今回はAWS EC2でGPUマシンを動かしてみます。
はじめに
インスタンスの選択
2017年12月現在、GPUを搭載しているインスタンスは以下の通りです(東京リージョン)。

P2, P3とG2, G3の違い
Pxインスタンスは「汎用 GPU コンピューティングアプリケーション用に設計」、Gxインスタンスは「グラフィック集約型アプリケーション用に最適化」されているようです。 今回のようなディープラーニングなどの計算にはPxインスタンスが良いようです。 とりあえず一番安いp2.xlargeを使いましょう。 (t2.microのちょうど100倍の料金にビビる)
インスタンスの制限
EC2にはサービスの制限があり、インスタンスタイプごとに作成できる数の上限が定められています。
特に上限を申請していない個人のアカウントならPxインスタンスは上限が0になっているかと思います。
つまり起動できません。
制限はAWSマネジメントコンソールからEC2を開き、「制限」の項目を見るとわかります。
0の場合は先に進んでも意味がないので、「制限緩和のリクエスト」を行いましょう。
リンクをクリックするとサポートセンターに飛ぶので、以下のように上限の解放を要求しましょう。
申請理由は適当に「GPU使いたいから」とでも書けばいいと思います。
申請から10時間くらいで対応してくれました。
AMIの選択
AMI、Amazon Machine Imageを選択します。EC2インスタンスに乗っけるOSの選択です。 加えてAMIの中には特定の用途に向けて諸々のソフトウェアがプリインストールされているものがあります。 今回Amazon Deep Learning AMIsを使います。 このAMIではCUDAやcuDNNの設定、TensorfloやKerasなどのライブラリのインストール、Python環境の設定がすでに行われています。 便利。 では実際に起動までやってみます。
EC2立ち上げ
AWSマネジメントコンソールにログインして「サービス」からEC2を検索、開きます。
「インスタンスの作成」を選択。
AWS Marketplaceで「Deep Learning AMI」と検索すると
「Deep Learning AMI (Ubuntu)」と「Deep Learning AMI (Linux)」が見つかりました。
どちらでもいいですが今回はUbuntuを使用します。
インスタンスはp2.xlargeを選択します。
続きはザーッといつも通りのEC2作成です。
EC2全般のセットアップについてはこちらを参考にしてください。
しばらく待ってSSHで接続してみます。
SSH接続してPython環境構築
デフォルトでanacondaが入っています。これで良い人はそのまま使えば良いと思います。 確かPython 3.6.3でした。 環境切り替えたり、anaconda使わないのにストレージ占領しすぎと思ったので消しました。 pyenv、virtualenvあたり入ってないので入れます。
pyenvインストール
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bash_profile
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bash_profile
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n eval "$(pyenv init -)"\nfi' >> ~/.bash_profile
echo 'export PYTHONPATH=$PYTHONPATH:/usr/local/lib/python2.7/site-packages/' >> ~/.bash_profile
source ~/.bash_profile
Pythonパスを上記のようにしておかないと、システムにインストールされているPythonを見に行ってしまいます。
pipインストール
sudo apt-get update && sudo apt-get -y upgrade
sudo apt-get install python-pip
pip install --upgrade pip
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev
virtualenvインストール
sudo pip install virtualenv
仮想環境設定
例えば、Python 3.6.3の仮想環境を作りたいと思ったら、
$ pyenv install 3.6.3
$ cd WORKING_DIR
$ pyenv local 3.6.3
$ which python
PYTHON_DIR
$ virtualenv VIRTUALENV_DIR --python=PYTHON_DIR
$ source VIRTUALENV_DIR/bin/activate
こんな感じです。 WORKING_DIR、VIRTUALENV_DIRは適宜読み替えてください。 WORKING_DIRはユーザのホームディレクトリ下に作って、 VIRTUALENV_DIRは~/virtualenvみたいなの作るとわかりやすいのではないでしょうか。