Edited at

AWS EC2の登録からDockerをインストールしTensorFlowを実行するまで

More than 1 year has passed since last update.


はじめに

静岡Developers勉強会では「人工知能ハンズオン」を2016/4/23に開催します。自PC(Windows 10 Home 64bit)にDockerを使ってGoogleが提供しているオープンソースの人工知能ライブラリ「TensorFlow」を入れて動かすことが出来たのですが、Dockerって64bit版のみで32bit版がありません。

勉強会なので32bit PCしか持っていない人をどうしようかと思ったら、あるじゃないですか? そう、クラウドならね。


AWSの初登録

クラウドで有名かつ無料枠(12ヶ月間)があるのが、Amazon Web Services(アマゾン ウェブ サービス、AWS)ですね。

無料という言葉につられて、早速登録してみました。

※ネットで「AWS TensorFlow」で検索するとGPUの件が多く見つかるのですが、GPU版は少額ですがお金がかかるので今回は見送りました。

参照:AWSのGPUインスタンス作成してStyleNetを学習させる


アカウント作成

AWSを利用するにはアカウントが必要ですが、Amazonで本を購入したことがあるなら既にアカウントがありますよね。

以降はAWSアカウント作成の流れに詳しく記載されているので、そちらを参考にします。なおアカウント作成にあたっては電話番号とクレジットカードが必要となります。自動音声ですが電話がかかってきますので画面に表示されたコードを入力します。

アカウントを作成したら、AWSマネジメントコンソールにアクセスし、必要事項を入力してログインします。


データ・センター領域の選択

データ・センターを「東京リージョン」(=東京を拠点とする領域)を選択します。自分はインスタンス作成後に気がついたのでオレゴンのままでした。


EC2の選択

アマゾン ウェブ サービスの画面には様々なサービスがありますが、先頭にあるコンピュティーングのEC2(クラウド内の仮想サーバー)を選択します。

するとEC2のダッシュボード画面になりますので、「インスタンスの作成」ボタンをクリックします。

参考サイト:EC2インスタンスを作成してログインする。


ステップ 1:Amazon マシンイメージ(AMI)

インスタンスも選択が多くあって迷うんですが、素直に先頭の「Amazon Linux AMI 2016.03 (HVM), SSD Volume Type 64ビット」を選択しました。


ステップ 2:インスタンスタイプの選択

無料利用枠なので「t2.micro」を選択します。


ステップ 3: インスタンスの詳細の設定

特にどこも触らずに、「次の手順: ストレージの追加」を選択します。


ステップ 4: ストレージの追加

特にどこも触らずに、「次の手順: インスタンスのタグ付け」を選択します。


ステップ 5: インスタンスのタグ付け

Nameタグの値にインスタンスにつけたい名前を記入後、「次の手順: セキュリティグループの設定」を選択します。今回は名前を「EC2-TENSORFLOW」にしました。


ステップ 6: セキュリティグループの設定

「新しいセキュリティグループを作成する」で、セキュリティグループ名、説明に付けたい名前を記入します。今回は名前を「SG-TENSORFLOW」にしました。

(自分は今回やらなかったのですが、マイIPを選択することで現在クライアントPCが割り当てられているグローバルIPアドレスが追加されるようです。)


ステップ 7: インスタンス作成の確認

各設定項目の確認です。問題がなければ、「作成」を選択します。

セキュリティグループの設定等は作成後でも変更可能です。


SSHログインに利用するキーペア(パブリックキー(公開鍵)とプライベートキー(秘密鍵))の作成

新しいキーペアの作成を選択、任意のキーペア名を記入後、「キーペアのダウンロード」を選択します。今回は名前を「sshkey-tensorflow」にしました。

すると、「sshkey-tensorflow.pem」がダウンロードされました。

その後、チェックを入れて、「インスタンスの作成」を選択します。


インスタンスの作成

インスタンス作成中となります。しばらく待っても「インスタンスは現在作成中です」のままなので、心配になって「作成ログの表示」を押したら完了してました。表示変わらないのかな間際らしいですね。

右下の「インスタンスの表示」を選択します。


起動完了

インスタンス表示画面へ戻り、インスタンスの状態:「running」でステータスチェック:「2/2のチェックに合格しました」となっています。

これで起動完了となります。パブリックIPアドレスも表示されています。


EC2インスタンスへログイン

起動したEC2インスタンスへSSHログインするためのターミナルソフトとして、Tera Termを使用します。

ホストにパブリックIPアドレスを入力します。



AmazonLinuxの場合、デフォルトは「ec2-user」でログインします。先ほどダウンロードしたSSH秘密鍵「sshkey-tensorflow.pem」を指定して、OKを選択します。



これでログイン完了です。


Dockerのインストール

下記サイトを参考にDockerをインストールしました。

EC2にDockerをインストールしてNginxコンテナを作る

Dockerをインストール

sudo yum install -y docker

Dockerを起動

$ sudo service docker start

Starting cgconfig service: [ OK ]
Starting docker:

ec2-userをdockerグループに追加

$ sudo usermod -a -G docker ec2-user

$ cat /etc/group |grep docker
docker:x:497:ec2-user

グループに追加されていることを確認したら、一度ログアウト(exit)して再度ログインしてください。

dockerグループに所属していれば、sudoなしで ec2-userから Dockerコマンドが使えます。

docker info

  ︙
Kernel Version: 4.4.5-15.26.amzn1.x86_64
Operating System: Amazon Linux AMI 2016.03


DockerにTensorFlowのインストール

ここからはDockerの世界ですので、下記サイトの通りにします。

WindowsユーザーがTensorFlowをインストールしてみた(Docker版)

$ docker run -p 8888:8888 -p 6006:6006 b.gcr.io/tensorflow/tensorflow

         ︙
[I 08:48:55.427 NotebookApp] The Jupyter Notebook is running at: http://[all ip
addresses on your system]:8888/
[I 08:48:55.427 NotebookApp] Use Control-C to stop this server and shut down all
kernels (twice to skip confirmation).


Jupyter Notebookの起動

Webブラウザで「http:(パブリックIPアドレス):8888/」と入力しても、残念ながらJupyter Notebookが起動されませんでした。


セキュリティグループの設定の追加

セキュリティグループの初期設定では、22ポートのみとなっているので、Jupyter Notebook用の8888ポートとTensorBoard用の6006ポートを追加する必要がありました。


TensorFlowの動作確認

これでWebブラウザで「http:(パブリックIPアドレス):8888/」と入力してJupyter Notebookが起動できました。


TensorBoradの動作確認

Webブラウザで「http:(パブリックIPアドレス):6006/」と入力すると「TernsorBorad」が表示されます。



※最初にグラフが「No scalar summary tags were found.」のエラーで表示されなかったのですが、Dockerをリスタートしたら表示されるようになりました。

$ docker ps

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cea774063516 b.gcr.io/tensorflow/tensorflow "/run_jupyter.sh" 31 hours ago Up 31 hours 0.0.0.0:6006->6006/tcp, 0.0.0.0:8888->8888/tcp thirsty_kare
$ docker stop thirsty_kare
$ docker start thirsty_kare


その他

他に行ったのは、pipのバージョンが古かったのでバージョンアップ(pip 8.1.1)しました。

$ pip install -U pip


EC2インスタンスの停止または削除

2017/04/10にAWSから無料期間終了の連絡メールが届きました。

停止でもいいのですが、もう使用することが無いので削除することにします。

アクションの「インスタンスの状態」から「削除」(停止の場合は「停止」)をクリックします。



「インスタンスの削除」の確認画面が表示されるので「はい、削除する」ボタンをクリックします。



削除が終わらないので再表示したら、インスタンスの状態が「terminated」に変わっていました。この状態になったら、しばらく時間を置くと削除されるとのことです。


キーペアの削除

キーペアは残していても課金されることはないですが、完全に削除する意味でキーペアも削除しておきます。

「削除」ボタンをクリックします。「キーペアの削除」の確認画面が表示されるので「はい」ボタンをクリックします。