本記事は タダの2年目 Advent Calendar 2023 の11日目の記事です。
他の人が書いていたStreamlitで遊んでみようという記事が勉強になったので、別のモック製作系ライブラリであるGradioについての紹介記事、GradioをAWS EC2 Instanceで動かす方法を書こうと思います。
GradioはPythonのライブラリで、使うことによってお手軽にWEBアプリのモックを作成することができます。まだ軽く使った段階なのであまり深くは語れませんが、機械学習系のWEBアプリに適していると言われています。
Streamlitとどう違うのかはそのうち両方使って検証したいですね。
参考:デモ作成ライブラリGradioを使ってみた【Python】
初めに
最初に環境を置いておきます。
AWSのLinuxインスタンスならだいたい動くと思います。
ハードウェア:AWS Ec2 Instance t3.large
OS:Ubuntu 22.04
1.ローカル環境でGradioを動かすには
取りあえずローカル環境でGradioを動かしてみます。
Gradioを使うにはまずライブラリをinstallする必要があります。
$pip install gradio
ライブラリをインストールしたら後はコードを書くだけで基本動きます。
コードの例:AIモデルの予測結果の可視化を楽にしたい? Gradioを使ってみよう!
import gradio as gr
def hello(name: str) -> str:
return f"Hello, {name}!"
hello_interface = gr.Interface(fn=hello, inputs="text", outputs="text")
hello_interface.launch()
上記のコードを実行する。
$python app.py
実行結果
下にアクセスするとWEB UIを確認することができます。
Running on local URL: http://127.0.0.1:7860
たったこれだけで動いて、こんな感じのシンプルなUIを作ってくれます。
しかし、AWS EC2 Instanceで動かす場合一工夫が必要になります。
2.AWS EC2 InstanceでGradioを動かすには
EC2でGradioを動かすにはPythonのコードとEC2のセキュリティグループなどの設定を変更する必要があります。
まずはPythonのコードから。
現状のコードでは、ローカル(実行しているPC)からしかアクセスができないので、サーバー化してやる必要があります。そこで、launch()の中にオプションを入れます。
hello_interface.launch(server_name="0.0.0.0")
このオプションにより、外部のPCからでもGradioにアクセスできるようになります。
次にEC2のセキュリティグループの設定です。
AWSのセキュリティグループの設定にはインバウンドルールとアウトバウンドルールの二種類があります。
Gradioの通信を通すようにその二つのルールを変更しなければいけません。
1.インバウンドルール
Gradioの通信プロトコルはTCPであり、Gradioはデフォルトでは7860のポートを使用します。この使用するポートはこちらで指定できるため、好きなポートを使ってもらって構いません。
従って、インバウンドルールにプロトコルはTCPであること、ポートは7860を使うことを明記してルールを追加します。
2.アウトバウンドルール
こちらは基本的にすべてのトラフィックが許可されてると思いますが、もし制限されている場合はこちらもインバウンドルールと似たような形でルールを追加してください。
もしかしたらマシン自体の設定でファイアウォールを設定している場合がありますので、動かない場合はファイアウォールも確認してみてください。
以上の準備を整えたらEC2で実行したGradioに外部のマシンからアクセスが可能になります。
server_portを書き換えたため、実行結果は次のようになります。
Running on local URL: http://0.0.0.0:7860
勿論、外部のPCからこのURLへアクセスしてもGradioにアクセスすることはできません。
Gradioに外部のマシンからアクセスする際は、
http://(EC2のパブリックIPアドレス):7860
にアクセスしてください。
以上がGradioをAWS EC2 Instanceで動かす方法になります。
ありがとうございました。