Twitterで @berobero さん、 @teramonagi さんあたりと、AWSでGPGPUなMCMCについて話をしていた。

そして気がついたら第3回肉ソンが開催されたので、EC2慣れてない人向けに、GPUがつかえるインスタンスの起動(クラスタ組まずに1台構成)まで持って行く方法を、肉を食いながらまとめてみた。

前提

・AWSのアカウントがある

・起動したいRegionでKeyPairを作成している。初めての方はここら辺を参考に

インスタンスタイプについて

AWSにはGPGPU用のインスタンスとして、g2.2xlargeとcg1.4xlargeがある。昔はもう一つあった気がするがどっか行った。

cg1.4xlargeは前世代で、今では使えるリージョンも限られててTokyo Regionで利用できないので、今回はg2.2xlargeを利用する。

g2.2xlargeのGPUは1536コア。ちょっぱやである。

ちなみにg2.2xlargeはTokyo Regionで$0.650 / 1時間なので実際に利用はお財布と相談してください。スポットインスタンスを使うともっと安くなるけど、今回は説明するのがアレなので普通にオンデマンドインスタンスを使う。

AMIについて

NVIDIAが提供しているAMIを使うと既にドライバが入っていて楽チンなので、今回はこれを利用することにする。

NVIDIAのGPUインスタンス用AMIは現時点ではWindows ServerとAmazonLinux(CentOSベース)がある。好きな方を選ぶ。


俺はubuntuがいいんじゃボケが、とかいう人は他のAMIを使う。ただし、g2.2xlargeもcg1.4xlargeも仮想化方式がHVMなので、AMIはHVM対応のものを選ぶ必要があるので注意。

インスタンス起動

まず、AWS Marketplaceへ行く。ログインしてなかったらする。

検索窓に「NVIDIA GRID GPU Driver」あたりをぶっ込む。検索結果のうち、NVIDIAのアイコンなAMIがそれ。

ちなみにNVIDIA以外のAMIを使いたい場合は左メニューの検索条件のインスタンスタイプでg2.2xlargeを選択して絞ると探し易い。

このうち、使いたいOSのAMIを選択する & continueをクリッククリック。


起動方法は2種類ある。スポットインスタンスも使いたいとか、ストレージの設定をいじりたい人は「Manual Launch」で起動する。とりあえず起動したいなら、「1-Click Launch」から起動する。

今回は説明がアレなので「1-Click Launch」前提で話を進める。


「Region」でインスタンスを起動させたいRegionを選択。EC2はリージョン毎に料金が異なる。Oregonあたりが安いけど、RTT高くなって操作がアレになる。Tokyoは逆。

VPC Settingの説明もアレなので、とりあえずそのまま。

Security Groupはとりあえずログインして使うだけならこのままで大丈夫。後でも変えれる。

Key Pairは作っておいたものを指定する。

右側にあるAccept Termsなんちゃらをクリックして起動。

インスタンスログイン

「1-Click Launch」で、かつAmazon Linuxを利用する場合、インスタンス起動後の画面にAWSのManagement ConsoleのEC2ページへのリンクがあるのでこれで遷移する。もしくは自力で遷移する。

Windows Serverを選んだ場合はこのリンクがないような気がするので、AWSのManagement ConsoleのEC2ページへ自力で遷移する。

自力で遷移する場合、起動時に指定したリージョンと画面のリージョンを合わせることを忘れずに。


インスタンスの一覧画面に遷移できたら、ここから先程起動したインスタンスを選択する。

インスタンスを選択すると、下に詳細情報が表示される。この中からグローバルIP(Public IPってやつ)を特定する。

インスタンスのInstance StateとStatus Checksが大丈夫になるまで待つ。Windows Serverの場合、インスタンスのlaunchにAmazon Linuxよりも時間がかかる気がする。ちなみにこのページのオートリロードは信用ならないので、手動でブラウザリロードするのがおぬぬめ。

ステータスがOKになったら下記手順でログイン。


Amazon Linuxの場合

さきほど特定したIPに対して、起動時に指定したKeyPairを利用してSSHでログインできる。ちなみにAmazon Linuxはログインユーザにec2-userを使う。ログイン後にsudo -iでrootになれる。

1
$ssh -i .ssh/指定したKeyPairファイル ec2-user@上で特定したPublicIP

Windows Serverの場合

リモートデスクトップでAdministratorユーザで接続する。

ここで利用するパスワードは、Management ConsoleのEC2ページで該当インスタンスを右クリック、「Get Windows Password」を選択して、インスタンス起動時に指定したKey Pairをぶっこむ。そうするとパスワードが表示されるはず。


以上でログイン完了。

最後に必ず確認すること

EC2は時間課金なので、インスタンスの停止を忘れると破産します。

特にGPU系のインスタンスは比較的高価なので、終わったらインスタンスは忘れずに停止させる。

あとめんどくさかったので書かなかったけど、ストレージ(EBS)料金、ストレージ(EBS)へのI/O、アウトバウンドなトラフィック、固定IPでもインスタンス料金ほどではないけど課金されるので注意する。

なのでインスタンスをTerminate(削除)せずに、stop(停止)するだけだと、ストレージ(EBS)の料金がかかってしまうので注意。

また、インスタンスを削除しても、オプションでストレージ(EBS)を残す指定をしていたり(デフォルトではインスタンス削除時に自動で削除されるので今回の手順であれば大丈夫なはず)、

固定IPをリリースせずにいたりすると(デフォルトでは固定IPじゃないので今回の手順だと大丈夫なはず)、

ストレージ料金や固定IP費はかかり続けるのでこれも注意が必要。

個人的意見

開発->テスト->修正->テストというルーチンをまわす作業は時間を食いがちなので、企業ならともかく個人利用の場合、時間課金であるEC2は開発環境とかにはあまり向かないと思います。

個人的には手元にGPGPUが使える手頃なマシンを用意して、そこで開発。そして、いざ計算!という段階でEC2の高性能なGPUを振り回す、というアプローチが個人的にはいい気がします。

気が向いたら、MCMCとかDeepLearning動かす話をいつか書きます。

Have a nice GPGPU !!!