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

シェアする

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

GPUを使えるクラウドとしては、AWS(Amazon), GCP(Google), Azure(Microsoft)などがありますが、私はAWSを利用しています。人気度・知名度としては、おそらく今挙げた順番通りではないでしょうか。いずれにせよ、自分で揃えると非常に高額になってしまう計算資源を必要なときに必要な分だけ利用できるというのは大きなメリットです。

さて、今回、私はAWSを使って画像認識のモデルを学習させたので、そのときに学んだAWSでのディープラーニング環境構築のポイントをご紹介します。

スポンサーリンク

環境構築はDeep Learning AMIを使えば簡単

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

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

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

AMIを利用するには、AWSインスタンスを選ぶ必要があります。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の台数分増えます。私はKerasを使うことが多いのですが、マルチGPUを利用するときはweightsやmodelの保存で結構テクニックが必要なので、マルチGPUで学習させたことがないと手間取るかもしれません

また、GPU以外の箇所がボトルネックになっている場合はGPUを増やしたところで学習速度がそこまで改善せず、コスパが悪化する可能性もあります

さらに、初めてAWSを使う場合はいろいろ手間取ってしまい、その間にマルチGPUインスタンスの利用料金が課金されるとコスト的に痛いので、シングルGPUがおすすめです

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

AWSでP2やP3インスタンスを利用するには利用申請が必要です。(多分G3も)

AWSに登録直後にP2インスタンスなどをLaunchしようとすると下の画像のようなエラーが表示されます。

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

まだ利用実績がないのに高額なインスタンス(p3.16xlargeなど)を申請すると断られます。こんなの茶番だと思っていたのですが、しっかり審査されているようです。

source activateを忘れない

Deep Learning AMIをAWSインスタンスで利用するには、source activate <環境名>コマンドを実行する必要があります

これを忘れると、tensorflowなどデフォルトでAMIに入っているライブラリが利用できません。また、pipなどでtensorflowを入れてしまうと、GPU付きのインスタンスを利用しているにもかかわらず、CPUのみで演算をしてしまうなど、非常にもったいないことになります

コマンドの一覧はこちらに記載されています。

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

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

まとめ

AWSでWebサービスなどの環境を構築するガイドは日本語でも大量にあるのですが、ディープラーニングとなるとなかなか情報を集めるのが大変です。参考になればと思います。

今回は、とりあえず学習のスクリプトをAWSで実行できる段階まで扱いましたが、AWSででぃープラーニングをしているうちに、より効率的に作業をするためのtipsを発見したので、機会があればそちらも紹介したいと思います。

スポンサーリンク

シェアする

フォローする