streamlitを使って簡単な機械学習アプリのデプロイに挑戦した
だらさんのなんでも Advent Calendar 2020、21日目の記事になります。
2020/12/22 追記
streamlit.io/sharing の認証が無事終わり、デプロイに成功しました!
お手軽にPythonでウェブアプリが作成できるStreamlitで機械学習アプリのデプロイに挑戦しました。
ローカルサーバーではちゃんと動くのですが、残念ながらherokuでのデプロイは出来ませんでした。
デプロイのログを見る限りエラーは発生していないようなのですが、ブラウザでURLを開くとアプリケーションエラーと表示されてしまいます。
streamlit.io/sharing を使うとGitHubと連携させるだけでデプロイできるそうですが、現時点でまだ正式登録待ちです。
検証の過程が役に立つかもと思い、途中ではありますがブログにアップします。
コードはこちら。
環境は以下のとおり。
Windows10
python==3.6.9 (Herokuのデフォルト)
streamlit==0.60.0
numpy==1.18.2
pandas==1.1.5
plotly==4.14.1
scikit-learn==0.23.2
lightgbm ==3.1.1
ローカルサーバー上の画面
作ろうとしたのは、kaggleのHousePriceコンペのデータセットを使ってWeb画面上で簡単な予測モデルを作成するアプリになります。
HousePriceのコンペ自体については下記のサイトをご参考ください。
ややこしいので欠損値を含むカラムは全て削除しています。
左の選択画面から特徴量を6つ選ぶと、train.csvの8割を使ってlightGBMで残り2割のデータのSalesPriceを予測し、実績データと予測データをグラフで比較することができます。
なお、特徴量は6つ全部違うものを選ぶ必要があります。
参考用に、読み込んでいるtrain.csvと、各特徴量とSalesPriceの相関係数を表示しています。
評価指標としてRMSEとR2スコアを表示します。
herokuでのデプロイ検証
先ほど書いたとおり、結果としてHerokuへのデプロイは出来なかったのですが、参考までに検証した事を記載します。
基本的には下記のサイトを参考にしました。
Heroku CLIの導入は下記サイトをご参考ください。
ターミナルからherokuへログインする際、[Can't open browther]となって処理が進まなかったのですが、後ろに --interactive と付けてやればOKです。
heroku login --interactive
herokuへのデプロイの手順は、heroku の HPのDeployタブをクリックすると手順が書いてありますので参考になります。
言語に対応するビルドパックを設定してあげないとエラーになるので設定しましょう。
heroku buildpacks:add heroku/python
setup.sh には、メールアドレスを記載するパターンと、記載しないパターンがあるようです。
GitHub等に公開するのであればメールアドレスは記載したくないところです。
記載しないパターンは下記サイトが参考になりました。
mkdir -p ~/.streamlit
echo "[server]
headless = true
port = $PORT
enableCORS = false
" > ~/.streamlit/config.toml
streamlit.io/sharing
streamlit.io/sharing を使えば GitHub と連携させることで無料でStreamlitから直接アプリをデプロイできるようです。
招待をリクエストすると、毎週招待する旨のメールが届きました。
残念ながらアドベントカレンダーの担当日までにデプロイすることができませんでしたが、Streamlit.io/shareing の認証が下りるのを待ちたいと思います。
以上になります、最後までお読みいただきありがとうございました。