だらさんのなんでも Advent Calendar 2020、21日目の記事になります。
こちらの記事と同じ内容になります。
お手軽に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のコンペ自体については下記のサイトをご参考ください。
https://nehori.com/nikki/2019/12/25/kaggle-2/
https://nehori.com/nikki/2019/12/31/post-14406/
ややこしいので欠損値を含むカラムは全て削除しています。
左の選択画面から特徴量を6つ選ぶと、train.csvの8割を使ってlightGBMで残り2割のデータのSalesPriceを予測し、実績データと予測データをグラフで比較することができます。
なお、特徴量は6つ全部違うものを選ぶ必要があります。
参考用に、読み込んでいるtrain.csvと、各特徴量とSalesPriceの相関係数を表示しています。
評価指標としてRMSEとR2スコアを表示します。
先ほど書いたとおり、結果としてHerokuへのデプロイは出来なかったのですが、参考までに検証した事を記載します。
基本的には下記のサイトを参考にしました。
https://qiita.com/Nate0928/items/632e7d54c2f9c17e242b
Heroku CLIの導入は下記サイトをご参考ください。
https://qiita.com/tetsu-sh/items/f6fcbb6b85df04e5cf3f
https://note.com/on_bass/n/n0495484a2b2b
ターミナルからherokuへログインする際、[Can't open browther]となって処理が進まなかったのですが、後ろに --interactive と付けてやればOKです。
heroku login --interactive
https://qiita.com/shosho/items/41183091769a8693a8a5
herokuへのデプロイの手順は、heroku の HPのDeployタブをクリックすると手順が書いてありますので参考になります。
言語に対応するビルドパックを設定してあげないとエラーになるので設定しましょう。
heroku buildpacks:add heroku/python
https://devcenter.heroku.com/articles/python-support
setup.sh には、メールアドレスを記載するパターンと、記載しないパターンがあるようです。
GitHub等に公開するのであればメールアドレスは記載したくないところです。
記載しないパターンは下記サイトが参考になりました。
mkdir -p ~/.streamlit
echo "[server]
headless = true
port = $PORT
enableCORS = false
" > ~/.streamlit/config.toml
https://github.com/streamlit/streamlit/issues/1636
streamlit.io/sharing を使えば GitHub と連携させることで無料でStreamlitから直接アプリをデプロイできるようです。
https://www.streamlit.io/sharing
招待をリクエストすると、毎週招待する旨のメールが届きました。
残念ながらアドベントカレンダーの担当日までにデプロイすることができませんでしたが、Streamlit.io/shareing の認証が下りるのを待ちたいと思います。
以上になります、最後までお読みいただきありがとうございました。
Crieitは誰でも投稿できるサービスです。 是非記事の投稿をお願いします。どんな軽い内容でも投稿できます。
また、「こんな記事が読みたいけど見つからない!」という方は是非記事投稿リクエストボードへ!
こじんまりと作業ログやメモ、進捗を書き残しておきたい方はボード機能をご利用ください。
ボードとは?
コメント