盆暗の学習記録

データサイエンス ,エンジニアリング,ビジネスについて日々学んだことの備忘録としていく予定です。初心者であり独学なので内容には誤りが含まれる可能性が大いにあります。

機械学習モデルを動かすWeb APIを作ってみる(3):Herokuにデプロイ

前回,前々回とでAPI部分をつくってきました。

機械学習モデルを動かすWeb APIを作ってみる(1):APIの作成 - 盆暗の学習記録

機械学習モデルを動かすWeb APIを作ってみる(2):uWSGIの設定 - 盆暗の学習記録

今回からはAPIのデプロイ(Web上への展開)についてメモしていきます。

f:id:nigimitama:20200215102827j:plain

PaaS(Platform as a Service)を使うと簡単にデプロイできるらしいので,今回はHerokuを使ってみます。

Herokuの準備

  1. Herokuの会員登録を行います。
  2. Heroku Dev CenterでHeroku CLIをダウンロードします。
  3. CLIでログインしておきます。
heroku login

uWSGIを設定

ドキュメントを参考に,herokuに向けた設定を行います。

uWSGIの設定ファイルを以下のように変更します。

[uwsgi]
# WSGI moduleをロード(アプリの.pyファイル名)
module = api

# set default WSGI callable name
callable = app

# スレッドごとにアプリ全体を読み込む(メモリ消費は増えるが,これを設定しないとLGBMが動かない)
lazy-apps = true

# heroku用のポートを使う
http-socket = :$(PORT)

# SIGTERMとSIGQUITの意味を反転させる
die-on-term = true

# memory-reportを有効化
memory-report = true

必要なファイルを作成

Procfile(heroku上で実行されるコマンドを記述するファイル)を作成します。

web: uwsgi uwsgi.ini

runtime.txtを作成し,中にプログラミング言語とバージョンを入れておきます

python-3.8.1

requirements.txtを作成しておき,アプリに必要なライブラリを書いておきます。

pandas
scikit-learn
lightgbm
flask
uwsgi

Herokuへデプロイ

Webアプリがおいてある場所をGitのリポジトリにし,追跡してコミットしておきます。

git init
git add .
git commit -m "first commit"

Herokuにアプリをつくります。

heroku create

Herokuにプッシュします。

git push heroku master

アプリを確認

heroku open

でデプロイしたアプリをブラウザで開いてくれるので,アプリのURLを確認できます。

以前作成したAPIのunittestのURL部分をデプロイしたアプリのURLに書き換えて,テストをしてみます

$ python3 api_test.py
{"predicted":45833222.1903707,"status":"OK"}

.
----------------------------------------------------------------------
Ran 1 test in 0.833s

OK

無事に結果が返ってきました。

herokuのlogを

 heroku logs --tail

で見ても,POSTリクエストに対応したことが確認できました。

参考

Running python webapps on Heroku with uWSGI — uWSGI 2.0 documentation

Python | Heroku Dev Center

今回使用したコード

github.com