ゴールデンウィークなのでGoogle App Engineに機械学習のモデルをdeployして遊んでみた (using TensorFlow 2.1)

2020.05.04

こんにちは、ゴールデンウィークはしっかりステイホームしているMr.Moです。

GWに何をやろうかなーと思っていたら目の前にApp Engineと機械学習のモデルがあったので遊んでみました!

Google App Engineとは

image.png

下記に詳しい記事があるのでご参照ください!

なぜGAEなのか?

App Engine無しでは生きていけない体になっているからです。(笑)
あとはやっぱり無料で動かせないかと思いまして...

最低限必要なもの

  • Google Cloud Platformにログインできるアカウント
  • 機械学習のモデル

とりあえずやってみよう!

前提としてPython3.7の環境で動かしていきます。Python3.7でTensorflowは動くようになってるのであっさり上手くいくんじゃないかなーと思ってますね。

まずはStandard環境で試してみる!

さっそくStandard環境gcloud app deployしてみました。 まずチャレンジしたapp.yamlrequirements.txtは下記です。

  • app.yaml
runtime: python37
entrypoint: gunicorn -b :$PORT main:app
  • requirements.txt
Flask==1.1.1
python-dotenv==0.10.3
line-bot-sdk==1.16.0
gunicorn==20.0.4
tensorflow==2.1.0
Pillow==7.1.1

するとエラーが出てしまい...

image.png

いったんFlexibleで様子見...

序盤すぎるところでエラーが出て心が折れたのですぐに(深く考えず)Flexibleに切り替えて試した設定は下記になります。

  • app.yaml
runtime: custom
env: flex
readiness_check:
  app_start_timeout_sec: 1200
automatic_scaling:
  min_num_instances: 1
  max_num_instances: 1
  • requirements.txt

(先程と同じ)

  • Dockerfile
FROM gcr.io/google-appengine/python

# Create a virtualenv for dependencies. This isolates these packages from
# system-level packages.
# Use -p python3 or -p python3.7 to select python version. Default is version 2.
RUN virtualenv -p python3.7 /env

# Setting these environment variables are the same as running
# source /env/bin/activate.
ENV VIRTUAL_ENV /env
ENV PATH /env/bin:$PATH

# Copy the application's requirements.txt and run pip to install all
# dependencies into the virtualenv.
ADD requirements.txt /app/requirements.txt
RUN pip install -r /app/requirements.txt

# Add the application source code.
ADD . /app

# Run a WSGI server to serve the application. gunicorn must be declared as
# a dependency in requirements.txt.
CMD gunicorn -b :$PORT main:app

デプロイが成功し、動いたものの下記のようにログを見ると良くなさそうな出力が出ており...

image.png

んー?なんかおかしいですね...

image.png

ちょっと調べてみる

ちょっと調べたらcpuの時は明示的にtensorflow-cpuにしないといけないと分かり(何もつけないのがcpuになると思っていた)

Snip20200503_5.png

改めてStandardで!!

最終的に下記の設定に落ち着きました!
インスタンスクラスをF2に上げないと動かなかったので、完全無料で動かすというわけにはいかなかったですね...(けど14時間は無料とも言える!?)

  • app.yaml
runtime: python37
instance_class: F2
entrypoint: gunicorn -b :$PORT main:app
env_variables:
      TF_CPP_MIN_LOG_LEVEL: "2"
automatic_scaling:
  min_instances: 0
  max_instances: 1
  • requirements.txt
Flask==1.1.1
python-dotenv==0.10.3
line-bot-sdk==1.16.0
gunicorn==20.0.4
tensorflow-cpu==2.1.0
Pillow==7.1.1

そして誕生した 迷子を探すBot

こうして、うちの子供がデパートとかで迷子になった時に使えそうなLINE Botが爆誕しました。(第三者でも写真を撮れば機械学習のモデルがうちの子を判定してくれるっぽいやつです)
早く新型コロナウイルス関連が落ち着いてデパートとかに気軽にいけるようになると良いですね!

image.png

まとめ

公園に行きたがる二人のキッズを説得しながら隙を見て検証作業をしたので結構大変でしたね^^;
App Engineは個人の開発でわりとずっと使ってますが、すごく良いサービスだと思います。
(ただ最近はCloud Runに浮気気味かもしれません...)

取りとめのない内容でしたが、ゴールデンウィークを有効活用できましたー!
ちなみに今なら下記の情報の通りGoogle Cloud Platform(GCP)のトレーニングが無料で利用できるみたいですよー、皆様もゴールデンウィークにステイホームしながら是非!