Colabでウェブアプリを実行する

2021/05/02に公開

Google Colaboratry は機械学習向けの実験環境で、とても便利なんですが、そこで構築したモデルやツールのデモなどで、Colaboratry 上でウェブアプリや API を一時的に公開したいことがあります。

そんな時、今までは ngrok などの外部サービスを使って、半ば強引にポートを公開していたのですが、実はそんなことする必要がないことを知りました。

https://colab.research.google.com/drive/1KxWdqqdBleno4przwP_9xmCWtwOQC9Eq?usp=sharing

サーバーの立ち上げ

まずは公開したいサーバーを立ち上げます。バックグラウンドで実行して欲しいので、 nohup& を使ってやります。

PORT = 8000
PATH = ''

# 検証用に適当なサーバーを立ち上げておく
!nohup python3 -m http.server $PORT > server.log 2>&1 &

方法1: 別タブで開く

1つ目は、 google.colab.kernel.proxyPort を使って、URLを取得する方法です。
出力された URL をクリックするだけです。

from google.colab import output
output.serve_kernel_port_as_window(PORT, path=PATH)

こんな感じになります。

表示上は https://localhost:8000/ となっていますが、実際には proxy へのリンクとなっていて、localhost にアクセスするわけではありません。

方法2: ノートブックの出力に埋め込む

別タブで開きたくない場合は

code
from google.colab import output

output.serve_kernel_port_as_iframe(PORT, path=PATH)

こんな感じになります。

まとめ

Google Colaboratry 上で、ウェブアプリを実行して公開する方法をまとめました。
Colab には TensorBoard 拡張が用意されていて、方法2 のように TensorBoard をノートブックの出力に埋め込めるのですが、試行錯誤するたびにスクロールが発生してイライラすることがありました。 方法1 がこれだけ簡単なのであれば、今後はこちらを使うことの方が増えそうです。

Discussion