LoginSignup
1
2

More than 5 years have passed since last update.

Udacity向けAWS GPUインスタンスの作り方(学生なら$100貰えるよ)

Last updated at Posted at 2017-10-17

初心者向けに、Amazon Web Service上でGPUインスタンスを作るやり方をスクリーンショット多めでまとめました。

この記事はUdacityの自動運転ナノデグリー(Self-Driving Car Engineer Nanodegree)受講者向けに執筆したため、
<ドンピシャで役立つ読者>
・Udacityの自動運転ナノデグリーを受講している
・GPU付きPCを持ってない or 非力なPCしか持ってない

ですが基本的な操作は一緒なので、
<まあまあ役立つ読者>
・最近よく聞くAWSだかEC2だかを使ってクラウドPCを借りてみたい
・学校用メアドを持っている(学生特典\$100/\$40分が貰える)

となります。

目的

この記事で達成する事は、

(0. 学生特典を申請し)

  1. AWSアカウントを新規作成して
  2. 学生特典の\$100/\$40を獲得し
  3. AWS上にGPUインスタンス(≒仮装クラウドPC)を立ち上げ
  4. AWS上でjupyter notebookを起動し
  5. 自分のPCのブラウザを通してプログラミングする

です。

Udacityの自動運転ナノデグリーを進めるにあたって、ディープラーニングのソースコードをGPUで試したくなります。そこでGPU付きPCを新たに買ったり自作したりするのではなく、AWS上にあるGPUインスタンス(≒仮装クラウドPC)を借りてやってみようという記事です。AWSでGPUインスタンス(≒仮装クラウドPC)作る利点は、

  • 数万円レベルの初期投資がかからない
  • ネット環境がさえあれば既に持ってるノートPCのスペックがカスでも大丈夫
  • つまりカフェとかでもUdacityできる
  • 現代っぽい

です。

更にこの記事でもやり方紹介しますが、学生なら\$100/\$40分貰えるのでUdacity自動運転ナノデグリーのTerm1の間くらいなら無料でAWS GPUインスタンスを使えるのではないでしょうか。\$100 or \$40の違いは、自分の所属してる学校等がAWSの加盟校なのかによります。ちなみに先生など教える側であれば、\$200/\$75らしいです(2017年9月現在)。

0. 学生特典を申請

※ ~~@〇〇.ac.jp で終わるような学校用メアドを持っていないと\$100/\$40は貰えないので、持ってない方は 1. AWSアカウントを新規作成まで読み飛ばしてください。

0-1. aws educateに申請

aws educateで必要事項を入力し、

1'. normal aws educate.png

必要事項を入力したら(Promo Codeはとりあえず今は空欄でOKです)、

2'. normal aws educate 2.png

AWSアカウントID(12桁)を求められるので、AWSアカウントを持ってない人はここで他の一般の人と同じやり方で新規作成します。もちろん既にAWSアカウントを持っている人は自分のAWSアカウントID(12桁)を入力すればOKです。

3'. normal aws educate 3.png

この画面は後でまた使うため、タブは消さずに取っておいて下さい!!もし消してしまったら、恐らく大学名から入力し直しです。

※ ASW学生特典申請には2種類あって、①普通の一般的なAWSアカウントを後から「このアカウントは学生です」って申請する方法(to enter an AWS Account ID)と、②もう最初っから「AWS学生用アカウント下さい!」って申請する方法(to select an AWS Educate Starter Account)があります。どっちを選ぶべきかというと、クレカを持ってれば①、持ってなければ②、です。①は最大限の特典を貰えかつ卒業後も引続き同じアカウントを使い続けることができる代わりにクレカを必要とし、②は特典のお得感は少し減るし卒業すると使えなくなるがクレカを必要としません。

1. AWSアカウントを新規作成

AWS自体のアカウントを作ります。

1-1. Amazon.co.jpとは別の、AWS用アカウントを作成

新規作成を選択し、

6. Create a new AWS account.png

もし日本のAmazon.co.jpのアカウントしか持ってない方は上の私は新規ユーザーです。で新しくAWS用のアカウントを作成します。もし米国のAmazon.comのアカウントを持っている方は同じアカウントをAWS用としても流用できるので、下の私は既存のユーザーですを選び、いつもと同じパスワードを入力します。

※ ここで使用するメアドはAWS自体のアカウント用なので、aws educateに申請した学校用メアドじゃなくても大丈夫です。

7. Sign in to Amazon.com(American account).png

1-2. AWSアカウント用の必要事項を入力

次に、AWSを使用するにあたっての追加の必要事項を入力します。このステップでクレカ情報等を入力します。Amazon公式のページに登録の流れがスクショ付きで解説されています。

8. input personal account.png

また途中で本人確認のため、電話機に自動音声の電話がかかってきます。したがってご自身の携帯電話もしくは固定電話をご用意ください。

9. Launch Management Console.png

これでAWSアカウント自体は登録完了です。早速AWSのトップページ、マネージメントコンソールを開いてみましょう。

2. 学生特典の$100/$40を獲得

0-1. aws educateに申請での画面に戻って、途中だったaws educateの申請を完了させます。

2-1. AWSアカウントID(12桁)の取得と入力

マイアカウントへ進み、

10. login to AWS console.png

AWSアカウントID(12桁)の数字をコピーし、

11. AWS my account.png

0-1. aws educateに申請での画面に戻って、AWSアカウントID(12桁)の数字を貼り付けます。

11'. Input the AWS Account ID.png

2-2. メアド認証をして、Promo Codeを入力

aws educateに登録した学校用メアドの方に以下のようなメールが届き、メール本文にある数字でメアドの認証を行います。

12. Email Verification - AWS Educate Application.png

メアド認証後、これで無事aws educateへの申請が完了です。

13. Complete applying AWS educate.png

数日後Promo Codeを記載したメールが届くので、AWSコンソールのクレジット画面にてそのPromo Codeを入力すると、学生特典の\$100/\$40が貰えます!

3. AWS上にGPUインスタンスを立ち上げ

※ ここら辺から、Udacity色が強くなってきます。

いよいよAWS上にGPUインスタンスを立ち上げます。インスタンスっていう言葉は簡単にいうと、クラウド(AWS)上にある仮装PCのことです。AWSにはGPU特化型インスタンス(≒仮装クラウドPC)の他にも、様々なタイプのが用意されています。

3-1. GPUインスタンスのリミット数を上げてもらう

AWSアカウント作成とase educateへの申請を無事終えた訳ですが、なぜか初期状態ではGPUインスタンスをすぐには作れません。AWS側で特殊な準備が必要なのかわかりませんが、「GPUインスタンス使わせてくれ〜」という申請をわざわざしなければいけません。

AWSコンソールのリミット画面へ行き、Request limit increase(リミット増加リクエスト)をクリックします。

16. Instance limits.png

ここでは、2017年9月現在最新GPUインスタンスであるg3系、の中でも最安プランのg3.4xlargeインスタンスを選択してますが、g2系かg3系なら何でも良いと思います。g3.の後に続く数字が大きくなればなるほどスペックは高くなりますが、当然お値段も上がります。Udacityの自動運転ナノデグリーのTerm1では一世代前のg2.2xlargeを例に解説していたので、g3系最安プランのg3.4xlargeでも性能は十分だと思われます。

次に必要事項を入力します。

  • Region(地域):自分の使いたいGPUインスタンスがある地域
  • Limit(リミット):"Increase Limit"を選択
  • New limit value(リミット数):作りたいGPUインスタンス個数を好きなだけ申請
  • Use Case Description(使用目的):"I would like to use GPU instances for deep learning."の一言で十分

17. Submit a Limit Increase Request.png

申請すると、以下のような確認画面が出てきます。

18. comfirmation of Submit a Limit Increase Request.png

そして1分後には申請が降りました(笑)

19. approved Limit Increase Request.png

3-2. GPUインスタンスを作る

今までは下準備で、ここからが本作業です。

20. Services ---> EC2.png

EC2 ダッシュボードへ行き、Launch Instance(インスタンス作成)をクリックします。

21. EC2 Dashboard ---> Launch Instance.png

まず最初に画面右上からRegion(地域)を選択してください。自分の住んでいる場所に近い方が好ましいです。条件は、
・g2系もしくはg3系インスタンスがある
・"udacity-carnd"という名前のコミュニティAMI(≒OS)がある
です。ちなみに"Asia Pacific (Tokyo)"なら上記全ての条件を満たしています。

Region(地域)を選択したら、画面左側からCommunity AMIs(コミュニティ版 AMI)を選択して"udacity-carnd"と検索します。

AMIは簡単にいうとインスタンス(≒仮装クラウドPC)に入れるOSのことで、例えばWindows ServerやAmazonオリジナルのLinuxが用意されています。ここでは、Udacity側が自動運転ナノデグリー用に特別に作成したAMIを使わせて頂くことにします。そういったAMIは、Community AMIs(コミュニティ版 AMI)の中から検索して見つけます。

22. Change the reagion ---> Community AMIs ---> udacity-carnd.png

3-1. GPUインスタンスのリミット数を上げてもらうで申請したGPUインスタンスを探して選択し、Review and Launch(レビュー)をクリックします(Launchと書いてありますが、まだ起動しないので大丈夫です)。

23. GPU graphics ---> g3.4xlarge.png

GPUインスタンスの詳細情報確認の画面に移るので、"Security Groups"欄のEdit security groups(セキュリティグループの編集)をクリックしてセキュリティについて設定します。

25. Security Groups ---> Edit security groups.png

  • Assign a security group(セキュリテイグループの割り当て):"Create a new security group(セキュリティグループの新規作成)"を選択
  • Security group name(セキュリティグループの名前):適当にわかりやすい名前
  • Type(タイプ):"Custom TCP Rule(カスタムTCP)"を選択
  • Port Range(ポート番号):"8888"
  • Source(ソース):"Anywhere(どこからでも)"を選択

Port Range(ポート番号)はjupyter notebookの場合、一般的に"8888"がよく使われます。

※ Udacityの例ではSource(ソース)に"Anywhere(どこからでも)"を選択してますが、外部の変な人から自分のAWSにアクセスされるのが怖い方は違うのを選択しても大丈夫だと思われます。

そしてReview and Launch(レビュー)をクリックします。

26. Create a new security group ---> Custom TCP Rule ---> 8888 ---> Anywhere.png

これで設定はほぼ完了です。設定項目を確認したら、画面右下のLaunch(立ち上げ)をクリックします。

28. Review Instance Launch (after setting security groupes).png

普通はここでsshする為の公開鍵と秘密鍵の設定をするのですが、Udacityが自動運転ナノデグリー用に作成したAMI(≒OS)では授業中に配布されたパスワードを入力してログインする為、鍵は必要ありません。なのでProceed without a key pair(鍵の設定なしで進む)を選択し、I acknowledge that...(私はこのAMIのパスワードを知らない限りログインできないことを承知しています)にチェックマークを入れ、Launch Instance(インスタンス立ち上げ)をクリックします。

31. Proceed without a key pair ---> I acknowledge that.png

これで遂にやっとGPUインスタンスが作れました!

32. Launch Status.png

  • Instance Status(インスタンスステータス)が "pending" から→ "running" に
  • Status Checks(ステータスチェック)が "Initializing" から→ "2/2 checks..." に

なるまで数分間待ちます。

33. Instance State = pending.png

3-3. 間違って消してしまわないよう設定する

さてこれで晴れてGPUインスタンスを使えるようになったのですが、使い始める前に大事な設定を一つしておきましょう。

インスタンスを終了するにはStopTerminateの2種類の方法があります。

  • Stop:いわゆる普通のシャットダウンに当たるので普段はこっちを選ぶ
  • Terminate:インスタンス(≒仮装クラウドPC)ごと削除、つまりデータが吹っ飛びます

なので間違えてTerminateしないように、「Terminate前に今一度確認の警告を鳴らす」という設定をします。なぜかデフォルトでONじゃないんですよねこれが。
(僕は間違えてTerminateしてしまったので最初から作り直しました…その残骸がスクショに写ってますね汗)

設定したいインスタンスを右クリックし、Instance Setting(インスタンスの設定)Change Termination Protection(ターミネートプロテクションの設定)へ進みます。

35. Instance Settings ---> Change Termination Protection.png

Yes, Enable(はい、有効化します)をクリックして、設定完了です。

36. Yes, Enable.png

もし間違ってTerminateしようとすると、以下の画面でYesが押せなくなります。もし本当にTerminateしたくなった場合は、同じやり方で今度はプロテクションをDisable(無効化します)にして外してあげる必要があります。

36'. Terminate protection.PNG

Stopすれば基本機能が止まるので時間制で加算される使用料金も止まりますが、ストレージは止まらない為ストレージ(ディスク容量)代が微量ですがかかるらしいです。Terminateすればストレージ(ディスク容量)代はかかりませんが、その代わりデータが吹っ飛びます

※ 使ってない間ストレージ(ディスク容量)代もかけたくないし & データも消されたくないという方は、毎回作業終わりにscpとかでAWS上のデータを自分のPCにダウンロードしてTerminateする→3-2. GPUインスタンスを作るからやり直す→またscpとかで今度は自分のPCからAWS上にデータをアップロードして作業開始、という作戦が良いのではないでしょうか。

4. AWS上でjupyter notebookを起動

sshで自分のPCから→AWSのインスタンス(≒仮装クラウドPC)に接続し、AWS上でjupyter notebook本体を起動させます。jupyter notebookとは、ブラウザ上でPython等の出力結果を逐一確認しながらプログラミングできる便利ツールです。

4-1. sshで自分のPCから→AWSに接続する

自分のPCでターミナルを起動し、

自分のPC名: $ ssh carnd@〇〇.〇〇.〇〇.〇〇(インスタンスのIPv4 Public IP)

と入力し、何か聞かれたらyesと入力してエンターを押します。

37'. IPv4 Public IP.png

〇〇.〇〇.〇〇.〇〇(インスタンスのIPv4 Public IP)はインスタンスを起動するたびに変わります。

37. ssh carnd@IP address.png

授業中に配布されたパスワードを入力し、以下のように

carnd@ip-〇〇.〇〇.〇〇.〇〇: $ 

と表示されてコマンド入力待ちの状態になったら接続成功です。

38. ssh successfully.png

ここから先のコマンドは、AWSのインスタンス上でのコマンドです。

4-2. 自動運転ナノデグリーに必要な物をコピーしてくる

AWSの動作確認用として、LeNetプログラムを動かしてみたいと思います。AWSのインスタンス上で以下のようにコマンドを入力してGitHubからコピーしてきます。

carnd@ip-〇〇.〇〇.〇〇.〇〇: $ git clone https://github.com/udacity/CarND-LeNet-Lab.git

39. git clone.png

次に、自動で作成されたフォルダに移動します。

carnd@ip-〇〇.〇〇.〇〇.〇〇: $ cd CarND-LeNet-Lab/

39'. cd.png

4-3. AWS上で jupyter notebook本体を起動する

AWSのインスタンス上で以下のようにコマンドを入力します。

carnd@ip-〇〇.〇〇.〇〇.〇〇: $ source activate carnd-term1

40. source.png

すると、carnd@ip-〇〇.〇〇.〇〇.〇〇: $の前に(carnd-term1)と付きます。
ちゃんとファイルがあるか確認し、

carnd@ip-〇〇.〇〇.〇〇.〇〇: $ ls

40'. ls.png

いざ、AWSのインスタンス上でjuypter notebookを起動します!
(Udacity側が気を利かせて独自AMIに最初からjupyter notebookをインストールしてくれてます)

carnd@ip-〇〇.〇〇.〇〇.〇〇: $ juypter notebook LeNet-Lab-Solution.ipynb

40''. jupyter notebook.png

出力画面の最後の方で「起動できるブラウザが見つからなかったよ」っと怒られてますが、大丈夫です。AWSのインスタンスは液晶ディスプレイのないPCのようなものであり、そんなPCにWebブラウザなんてインストールされていなくてもおかしくありません。

5. 自分のPCのブラウザを通してプログラミング

とは言えjupyter notebookってのはWebブラウザ上で使用するものですし、じゃあどうするのかというと、自分のPCのWebブラウザからAWSのインスタンス上で起動したjupyter notebookを使用します。

5-1. 自分のPCからAWS上のjupyter notebookにアクセス

自分のPCでWebブラウザを立ち上げ、URLバーに〇〇.〇〇.〇〇.〇〇(インスタンスのIPv4 Public IP):8888と入力します。

41. access the jupyter notebook from web browser on local PC.png

〇〇.〇〇.〇〇.〇〇(インスタンスのIPv4 Public IP)がAWSのインスタンス(≒仮装クラウドPC)の住所で、:8888はその中のjupyter notebookの部屋番号を示しています。

以下のように自分のPCのWebブラウザで(AWSのインスタンス上で起動してる)jupyte notebookの画面が表示されたら成功です。
LeNet-Lab-Solution.ipynbをクリックして、

42. access the jupyter notebook successfully & run LeNet-Lab-solution.ipynb.png

画面上部のCellRun allをクリックしてPythonプログラムを走らせます。

43. Cell ---> Run all .png

以下のような結果が出力されれば、成功です!

44. result of In[3].png

45. result of In[10].png

46. result of In[11].png

5-2. AWS上のインスタンスを停止する

最終出力を確認できたら、4-3. AWS上で jupyter notebook本体を起動するで「起動できるブラウザが見つからなかったよ」とちょっと怒られたターミナル画面が残ってると思いますので、そこでCtrl + cを同時に押して(AWSのインスタンス上で起動してる)jupyter notebookを停止します。

何か聞かれたらyと入力してエンターを押します。

47. quit jupyter notebook.png

次にAWSのインスタンス上で以下のコマンドを入力して、AWSへの接続を切ります。

carnd@ip-〇〇.〇〇.〇〇.〇〇: $ exit

48. exit AWS instance.png

再度、

自分のPC名: $

のようにコマンド待ちの状態に戻ったら、AWSへの接続は遮断されています。最後に、AWSマネージメントコンソール上でインスタンスをStopします(Terminateじゃないですよ!)

停止したいインスタンスを右クリックし、Instance StateStopの順にクリックします。

49. Instance State ---> Stop.png

Instance Statestoppedになり、インスタンスは無事停止されます。

50. Inctance stopped.png

普通に使っている分にはちゃんとデータは保存されます。次回起動した際に前回jupyter notebookで編集したプログラムがなくなってる(汗)!ということは今の所起きたことがありません。


以上

1
2
0

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
1
2