Cosnomi
Cosnomi

医療×IT / 医学生 / Web(React, Flask) / 機械学習(画像認識, Keras)

Twitter / GitHub / Keybase

AWSでディープラーニングの環境構築をした

Nov. 18, 2018機械学習AWS

ディープラーニングのために GPU を買って動かし続けるのも選択肢の一つではありますが、高速に、長時間連続して学習させたいときはクラウドを利用するのも便利です。

GPU を使えるクラウドとしては、AWS(Amazon), GCP(Google), Azure(Microsoft)などがありますが、私は AWS を利用しています。どれを使うにせよ、自分で揃えると非常に高額になってしまう計算資源を必要なときに必要な分だけ利用できるというのは大きなメリットです。

さて、今回はその中でもAWS上でのディープラーニング環境構築のポイントをご紹介します。

環境構築は Deep Learning AMIを用いる

AWS の用意しているDeep Learning AMIを使えば、AWS でディープラーニング環境を構築するのは非常に簡単です。AMI自体の利用料金は無料で、かかるのは AWS のインスタンス利用料金のみです。

この AMI にはTensorFlow や Keras などが最初から入っており、GPU を利用するためのCUDAも設定されているため、実行したいスクリプトが既にあれば 1 分とかからずに学習を開始できます。ensorFlow 以外にも、Caffe や Theano なども使えるそうです。

おすすめは p2 インスタンス

AWS では多くの種類のインスタンスがありますが、おすすめは P2 インスタンスです。Deep Learning AMI では、推奨 GPU インスタンスとしてG3, P2, P3挙げられています。P3 は他の 2 つより高性能ですが料金は高く、初めて AWS を使うには少しおすすめできません。

では、G3 と P2 の違いは何でしょうか。それぞれの説明文を見てみましょう。

まずは G3 インスタンスから

Amazon EC2 G3 instances are the latest generation of Amazon EC2 GPU graphics instances that deliver a powerful combination of CPU, host memory, and GPU capacity. G3 instances are ideal for graphics-intensive applications such as 3D visualizations,

(拙訳)

Amazon EC2 G3 インスタンスは EC2 GPU グラフィックインスタンスの最新世代で、CPU, ホストメモリ、GPU の性能を強力に連携させます。G3 インスタンスはグラフィックを多用するアプリケーションに理想的です。例えば 3D の視覚化, …

一方、P2 は

Amazon EC2 P2 Instances are powerful, scalable instances that provide GPU-based parallel compute capabilities. For customers with graphics requirements, see G2 instancesfor more information.

(拙訳)

Amazon EC2 P2 インスタンスは強力でスケーラブルなインスタンスで、GPU を利用した並列計算が可能です。グラフィック性能が必要なユーザーは、G2 インスタンスのページを御覧ください。

よって、AWS 側の想定用途をまとめると、

G3: 3D などのグラフィック

P2: GPU を利用した計算

ということになります。しかしながら、New G3 Instances in AWS – Worth it for Machine Learning? によるとRNN では G3 がコスパが良いようです

どちらもコストはあまり変わらないので好きな方を選べばいいと思います。

最初はシングル GPU で

P2、G3、P3 はいずれもGPUの数が異なる複数のバージョンがあります。P2 の場合、p2.xlargeではシングル GPU、p2.8xlargeでは8 台の GPU、p2.16xlargeでは16 台の GPUを利用可能です。 料金は単純に GPU の台数分、n倍されて増えます。

私は Keras を使うことが多いのですが、マルチ GPU を利用するときは weights や model の保存で結構テクニックが必要で、マルチGPUの性能をフル活用するのは難しいです。また、GPU 以外の箇所がボトルネックになっている場合は GPU を増やしたところで学習速度がそこまで改善せず、コスパが悪化する可能性もあります。以上のことから、実験段階のうちはシングルGPU(hoge.xlarge)が良いかと思います。

インスタンスの利用申請が必要

AWS で P2 や P3 インスタンスを利用するには利用申請が必要です。(多分 G3 もです)AWS に登録直後に P2 インスタンスなどを Launch しようとすると下の画像のようなエラーが表示されます。

デフォルトでこれらのインスタンスの台数制限は 0 になっており、これを増やすにはサポートに連絡する必要があります。基本的にフォームを埋めるだけです。適当に、「ディープラーニングで使用するので、GPU が使えるインスタンスを利用したい」などと書けばいいと思います。人間が審査しているようで実際に利用を開始できるのは申請後3~4日程度です。

まだ他のインスタンス(p2.xlargeなど)の利用実績がないのに高額なインスタンス(p3.16xlarge など)を申請すると断られます img 5bf18866a4aa0

source activate を忘れない

インスタンスの利用申請が通り、SSHクライアントでインスタンスに接続できたとします。

Deep Learning AMI を AWS インスタンスで利用するには、source activate <環境名>コマンドを実行する必要があります。これを忘れると、tensorflow などデフォルトで AMI に入っているライブラリが利用できません。また、pip などで tensorflow を入れてしまうと、GPU 付きのインスタンスを利用しているにもかかわらず、CPU のみで演算をしてしまい、非常にもったいないです。

<環境名>の一覧はこちらに記載されています。

私の場合は、TensorFlow(+Keras2) with Python3 を使いたいので、

source activate tensorflow_p36

となります。これは、インスタンスを起動する度に必要です。

まとめ

p2.xlargeなどGPUが使えるコスパの良いインスタンスで、Deep Learning AMIを用いて環境を構築すると良い。その環境を利用する際には、source activate <env_name>を実行する必要がある。


コメントフォームは設置していませんので、ご意見・ご感想などはTwitter(@cosnomi)などへお願いします。