4
0

More than 5 years have passed since last update.

Kerasを乗せたDockerのイメージをECSでAPIとして利用するために、どのようなインスタンスを選択するべきか

Posted at

あくまでも個人で実際に試した内容であり、これから環境を構築するという方に対しての一つの情報になればいいなと思っています。

環境

  • API

    • アプリサーバ(Docker)
      • flask v0.12.1
      • gunicorn v19.7.1
      • keras v2.0.3
    • Webサーバー
      • nginx
  • 負荷分散

    • Application load balancer

今回やったこと

  • c4.xlargeを4台立ち上げて、タスクを4つ作成
  • c4.4xlargeを1台立ち上げて、タスクを1つ作成
インスタンスタイプ vCPU メモリ
c4.xlarge 4 7.5
c4.4xlarge 16 30

ECSでのリソースの割り当ては以下

  • c4.xlargeを使う場合の設定

スクリーンショット 2017-04-14 16.44.31.png

  • c4.4xlargeを使う場合の設定

スクリーンショット 2017-04-14 16.45.00.png

gunicornがkerasを積んだニューラルネットワークの計算を行うもの、nginx_gunicornはnginx

(微妙なリソースの割り当て割合の差とか出ていますが...)

負荷をかけてみる

Tsungを使って、予測するURLに負荷をかけてみました。
Tsungを積んだDockerで負荷テストを行う

テスト内容は、180秒で2秒間に1回ユーザーが新規にアクセスをするといった感じ

  • c4.xlarge * 4

graphes-HTTP_CODE-total_tn.png

  • c4.4xlarge * 1

graphes-HTTP_CODE-total_tn.png

結論を言うと、今回はスケールアップした方が負荷に対して強かった。

少しグラフの見方があっているかわからないので、正しい確証ないのですがcloudwatchなどと照らし合わせて考えると、c4.xlargeで待ちうける場合、ある時点からレスポンスの時間が低下し始めタイムアウトが発生しエラーが右肩上がりに増える。

感想

最適なリソースの割り当てが、どうするべきかまだDocker運用もニューラルネットワーク用の数値計算ライブラリの運用もペーペーなので、最適解があれば教えて欲しいです

4
0
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
4
0