AWS スポットインスタンスでJupyterを起動するまで

f:id:taigok:20190122213253p:plain

背景

Kaggleの Microsoft Malware Prediction に参加しています。分析にはローカルPCを使用していましたが、リソースが足りなくなることが多いため、パブリッククラウドで1番慣れているAWSのスポットインスタンスを使ってみたので、Jupyterを起動するまでの手順について書こうと思います。

AWS スポットインスタンスとは

スポットインスタンスはオンデマンド価格より低価で利用できる未使用の EC2 インスタンスで、需要と供給によって利用料金が変動します。オンデマンドに比べて大幅に割引されますが、いくつかの理由によりインスタンスを中断されることがあります。

参考:AWS ドキュメント スポットインスタンス

手順

スポットインスタンスのリクエス

EC2のページのスポットインスタンスからスポットインスタンスのリクエストを選択します。まずどんなタスクに使用するかの選択をします。ここではBig data workloadsを選択します。

f:id:taigok:20190103111250p:plain

AMIやコンピュートユニットを選択します。ここでは、既存のインスタンスタイプからr3.xlargeを選択します。様々なインスタンスタイプがあるので、Amazon EC2 料金表などを参考に決めるといいでしょう。

f:id:taigok:20190103112123p:plain

その他もろもろの設定をしてリクエストの作成をする時に割引率が提示されます。この時は81%offの価格で利用できることが分かります。

f:id:taigok:20190103112502j:plain

少し時間がたつとインスタンスが作成されるので、ターミナル(Macの場合)などからsshします。インスタンスsshするには、インスタンスのセキュリティグループ(ファイアウォールのようなもの)の設定が必要です。

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

インスタンスのセキュリティグループが下記赤枠から確認できます。

f:id:taigok:20190106193717j:plain

対象のセキュリティグループのインバウンドルールにクライアントのIPを設定します。 個々の環境によって異なるかと思いますが、下記のようにMy IPを選択すれば今使っている端末のグローバルIPが自動で設定されるようです。

f:id:taigok:20190106195249j:plain

SSH接続する

作成したインスタンスSSH接続します。SSH接続するためのコマンドは接続をクリックすると表示されます。

f:id:taigok:20190106193406j:plain

f:id:taigok:20190106200039j:plain

$ chmod 400 spot-instance-key.pem 

$ ssh -i "spot-instance-key.pem" root@ec2-54-248-31-178.ap-northeast-1.compute.amazonaws.com

# SSH完了
[ec2-user@ip-172-31-14-83 ~]$

これでスポットインスタンスへのSSHが完了しました。

ここからは各自自由にJupyterを起動するまでの手順を進めてください。
今回自分の場合は、ローカル環境でDockerを使って環境構築して開発していたものをGithubリポジトリで管理していたので、git cloneをして、docker runをしました。 Dockerのインストールは Get Docker CE for Ubuntu を参考に進めます(Ubuntuの場合)。

AMI作成

スポットインスタンスは停止をすることができないため、計算が完了したら削除をしないといけません。よって、2度目以降に同じ環境を構築するためにAMIを作成しておきます。
AMIを作成しておけば、再度スポットインスタンスを作成するときに、テンプレートとしてそのAMIを指定することで同じ環境を構築することができます。

参考:インスタンスと AMI