楽屋

スポットインスタンスでデータ分析を安価かつ高速に

はじめまして、DATUM STUDIOの岡です。

AWSのEC2サービスに スポットインスタンスというものがあるのをご存知でしょうか。 今回は、このサービスのデータ分析における利用事例と、使い方を紹介いたします。

困っていたこと

統計ソフトRでデータ分析を行うにあたり、ローカル環境だと24時間弱かかる並列処理を行う場面がありました。ローカル環境は以下の通りです。

  • macOS
  • プロセッサ:1.6 GHz Intel Core i5
  • メモリ:8GB

時間を短縮したいがアドホック分析なので、「コード書き換えて高速化しよう!」というより、マシンパワーをあげてなんとかした方が良いと考えました。

解決方法

AWSのEC2で、コア数が多いインスタンスを借りて並列処理しようと考えました。スポットインスタンスというサービスが、普通のインスタンスを借りるより安いらしいので、調べてみました。

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

特徴

  • 未使用の余っているEC2インスタンスがあれば利用可
  • スポット料金が設定されており、いわゆる需要価格なので変動する
  • この料金より高い金額を入札することで、利用可能

メリット

  • 通常のオンデマンドインスタンスより安価

デメリット

  • スポット料金が変動して入札金額を上回る or 未使用のEC2インスタンスがなくなると、起動中でも強制的に落ちる

使ってみよう

まず、スポットインスタンス作成ウィザードを開き、「EC2」→「スポットリクエスト」→「スポットインスタンスのリクエスト」を選択します。

つぎに、インスタンスの設定します。

  • リクエストタイプ: 今回は一度きりの分析処理を行いたいので、「リクエスト」を選択
  • ターゲット容量: 1
  • AMI: 今回はあらかじめRが入ったカスタムAMIを利用しました(画像はデフォルトのまま)。
  • インスタンスタイプ: デフォルトの「c3.large」を削除し、「選択」をクリックしてインスタンスタイプ一覧を開きます。具体的にはこの次で説明します。

インスタンスタイプは、vCPUやメモリから適当なものを選びます。今回は並列処理をしたいため、「32コア & メモリ100GiB以上 & なるべく安く」という条件を設定し、 r4.8xlargeを選択しました。

候補のインスタンスにチェックを入れ、価格設定履歴をクリックします。

価格が安定しているアベイラビリティーゾーンを探します。選択したインスタンスの価格設定履歴が表示されるので「期間」を1週間ぐらいに設定し、直近の価格変動の小さいAZを探します。今回は、「us-west-2b」が安定していました。

AZの確認が終わったら、右上の「×」を押してスポットインスタンス設定ウィザードに戻ります。

誤りなく希望のスポットインスタンスを入札するように、下記を確認しましょう。

  • インスタンスタイプ: 2-2で選択したタイプになっていることを確認
  • 配分戦略: 今回は安定したAZを指定するので「Diversified」に設定
  • ネットワーク: 任意のVPCを選択
  • アベイラビリティゾーン: 価格が安定していたゾーンを設定
  • 最高価格: 今回はスポット料金が$0.3452で、最悪落ちても良いのため最高価格を$1に設定しました。

これ以降は、通常のインスタンス作成と同じなので割愛させていただきます。

使ってみた結果

ローカル環境で24時間かかるはずだった処理が30分に短縮しました。

処理時間 30分と環境構築30分で計1時間作業しましたが、1時間あたりの金額が$0.3452なので、なんと40円程度の費用で23時間も短縮できました。

32コアの並列処理、、、なかなか痛快でした。

まとめ

ハイスペックなマシンを安価にちょっとだけ使いたいときは、スポットインスタンスを利用しましょう。