前回,前々回とでAPI部分をつくってきました。
機械学習モデルを動かすWeb APIを作ってみる(1):APIの作成 - 盆暗の学習記録
機械学習モデルを動かすWeb APIを作ってみる(2):uWSGIの設定 - 盆暗の学習記録
今回からはAPIのデプロイ(Web上への展開)についてメモしていきます。
PaaS(Platform as a Service)を使うと簡単にデプロイできるらしいので,今回はHerokuを使ってみます。
Herokuの準備
- Herokuの会員登録を行います。
- Heroku Dev CenterでHeroku CLIをダウンロードします。
- 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