TensorFlowを使った推論器をGoogle App EngineかHerokuにデプロイしたかった話

最近、TensorFlow(Keras)を使って機械学習のアプリケーションを作る機会が増えてきた。
いどうとしょかん – コスプレ画像からなんのフレンズか判定する
Flaskを使ってWebサービス化して、どんどん公開していきたいのだが、ホスティングに苦戦している。気軽に公開していけるように、Google App EngineかHerokuを使ってホスティングしようと思っていたのだが、残念ながら今の時点ではこの二つのサービスを使ってホスティングするのは難しそうだった。

Google App Engine

Google App EngineにはStandard EnvironmentとFlexible Environmentの二つが用意されている。両方ともPython + Flaskを使ったウェブアプリケーションを動かすことができるのだが、Standard Environmentの場合はPython 2系しか使うことができない。またNumPyなど、一部のライブラリのインストールに制限があり、残念ながら試した限りでは最新のTensorFlow(1.2.1)を動かすことは無理そうであった。
Flexible Environmentの場合は、ライブラリをインストールして動作させることは問題なさそうなのだが、残念ながら無料枠が用意されていない。そして、Standard Environmentと異なり、常に最低1インスタンスが起動し続ける状況になるため、最低でも1ヶ月あたりCPU使用料だけでも$35前後かかる計算になってしまう。デプロイとスケールが気軽にできる点は魅力的だが、手軽に試すには値段がネックになってしまう。

Heroku

Procfileなどの設定が必要なものの、HerokuにTensorFlow + Flaskアプリをデプロイするのは、比較的簡単だ。無料枠あるいはHobby枠($7/月)でも動作させることができる。ただし、Herokuの場合もいくつか問題がある。
まず、Herokuの場合はアプリケーションサーバー上にファイルを保存することができない。アップロードされたファイルを記録しておいたり、一旦ファイルに書き出して処理をしたいような場合に、Heroku上で処理を完結させることができない。
加えて、プロセスの起動に制限(60秒)がある。画像分析などで、非常に大きいモデルと学習済みデータを使っていると、最初のプロセスの起動が60秒以内に完了せず、起動に失敗してしまう。この問題は残念ながら解決が難しい。

結論

というわけで、残念ながら2017年8月現在、多少ボリュームのあるTensorFlow + FlaskアプリをPaaSで動かすのは簡単ではなさそうだ。おとなしくVPSを使うしかないか。。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です