やりたいこと
MLアプリをStreamlit上で実装した後に、外部に公開するいい方法を探していました。
KDDの論文をまとめた際は、herokuで公開していましたが、無料枠が限られていることもあり、代替案を探していました。
実装と公開を一つのサービス上からまとめて制御できたらいいなと思っていたところ、ngrokで公開までできることを知り調査しました。
Google Colabと組み合わせて非常に簡単に外部公開ができるとのことなので、 以下の記事を参考に動作確認してみました。
コードの内容
Stlreamlitをインストールします。Colab内のIPythonの依存関係の都合で、 Streamlitの最新バージョンをインストールすると問題があったため、v1.0まで下げてインストールしました。
!pip install streamlit==1.0 -q
wgetでngrokをダウンロードします。colabに合わせてOSとシステムのプロセッサに合わせてダウンロードする必要があります。 unzipでダウンロード後のファイルを解凍します。
!wget https://bin.equinox.io/c/4VmDzA7iaHb/ngrok-stable-linux-amd64.zip
!unzip -qq ngrok-stable-linux-amd64.zip
ngrokをバックグラウンド起動させます。 streamlitのデフォルトのポート番号である8051を指定します。
streamlitのポートとコンフィグについてはこちらの公式ページを参照すると詳しいです。
こちらを実行すると、外部に公開するリンクが返ってきます。
get_ipython().system_raw('./ngrok http 8501 &')
!curl -s http://localhost:4040/api/tunnels | python3 -c "import sys, json; print(json.load(sys.stdin)['tunnels'][0]['public_url'])"
streamlitのhelloデモを実行します。実行した後に、一つ上のセルで返ってきたリンクにstreamlitが作る画面にアクセスできます。
!streamlit hello
これだけでアプリの実装と外部公開ができてしますので、非常に強力な方法だと感じました。プロトタイプの作成だけでなく、公開の敷居も下がったので、Stremalitを学ぶ価値が高まったように感じました。