AWS スポットインスタンスでJupyterを起動するまで
背景
Kaggleの Microsoft Malware Prediction に参加しています。分析にはローカルPCを使用していましたが、リソースが足りなくなることが多いため、パブリッククラウドで1番慣れているAWSのスポットインスタンスを使ってみたので、Jupyterを起動するまでの手順について書こうと思います。
AWS スポットインスタンスとは
スポットインスタンスはオンデマンド価格より低価で利用できる未使用の EC2 インスタンスで、需要と供給によって利用料金が変動します。オンデマンドに比べて大幅に割引されますが、いくつかの理由によりインスタンスを中断されることがあります。
手順
スポットインスタンスのリクエスト
EC2のページのスポットインスタンスからスポットインスタンスのリクエストを選択します。まずどんなタスクに使用するかの選択をします。ここではBig data workloadsを選択します。
AMIやコンピュートユニットを選択します。ここでは、既存のインスタンスタイプからr3.xlargeを選択します。様々なインスタンスタイプがあるので、Amazon EC2 料金表などを参考に決めるといいでしょう。
その他もろもろの設定をしてリクエストの作成をする時に割引率が提示されます。この時は81%offの価格で利用できることが分かります。
少し時間がたつとインスタンスが作成されるので、ターミナル(Macの場合)などからsshします。インスタンスにsshするには、インスタンスのセキュリティグループ(ファイアウォールのようなもの)の設定が必要です。
セキュリティグループの設定
インスタンスのセキュリティグループが下記赤枠から確認できます。
対象のセキュリティグループのインバウンドルールにクライアントのIPを設定します。 個々の環境によって異なるかと思いますが、下記のようにMy IPを選択すれば今使っている端末のグローバルIPが自動で設定されるようです。
SSH接続する
作成したインスタンスにSSH接続します。SSH接続するためのコマンドは接続をクリックすると表示されます。
$ 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 ~]$
ここからは各自自由にJupyterを起動するまでの手順を進めてください。
今回自分の場合は、ローカル環境でDockerを使って環境構築して開発していたものをGithubリポジトリで管理していたので、git cloneをして、docker runをしました。
Dockerのインストールは Get Docker CE for Ubuntu を参考に進めます(Ubuntuの場合)。
AMI作成
スポットインスタンスは停止をすることができないため、計算が完了したら削除をしないといけません。よって、2度目以降に同じ環境を構築するためにAMIを作成しておきます。
AMIを作成しておけば、再度スポットインスタンスを作成するときに、テンプレートとしてそのAMIを指定することで同じ環境を構築することができます。
参考:インスタンスと AMI