💁‍♂️

【初心者でもできる】HuggingFaceにGradioで作成したアプリをデプロイする方法

2022/10/02に公開
3

はじめに

以前、機械学習アプリを超爆速で実装できるフレームワークgradioをご紹介しました。
https://zenn.dev/robes/articles/fcbda5d2dc1362
gradioはGoogleColaboratory上でも作成できて、かつ公開もできるなど、超便利なのですが、いかんせん、公開期間は72時間限定だったりして、当然、不便なところもあります。
そんなgradioで作ったwebアプリを永続的に公開するための最適なプラットフォームとして、HuggingFaceのSpacesがあります。
今回、いろいろ調べながら、何とかHuggingFaceSpacesへのデプロイに成功しましたので、そのデプロイ方法について残していきたいと思います。
 

 

準備

HuggingFaceにデプロイするためには、まず、HuggingFaceのアカウントを作成する必要があります。
こちらでアカウントの作成を行なってください。
https://huggingface.co/

アカウントを作成し、サインアップした後、ナビゲーションメニューからspacesを選択し、create new spaceをクリックします。


create new spaceを押した後
赤く囲ったところを記入したり、選択します。

 

最も簡単なデプロイ方法

Files and versions を選択すると、なにやらgithubのレポジトリのような画面が現れます。ここにアプリに必要なファイルをあげればいいわけです。
ファイルをあげるのに最も簡単な方法は、右にあるAddfileから、ファイルを新規作成するか、ファイルをアップロードするになります。
モデルを記述したapp.pyrequirements.txtを、ここで作成すればデプロイ完了となります。

デプロイに成功すると、以下のようにRunningとでます。失敗するとerrorとなりますのでView logsで原因を調べます。

 

gitでデプロイする方法

ローカルレポジトリから、このspacesにgitでデプロイする方法もあります。
Appというメニューをクリックするとやり方の全てが書かれています。

1.ローカルレポジトリにgit cloneする

git clone https://huggingface.co/spaces/aino813/chABSA

2.app.pyファイルを作成する

あくまで簡単な例ですが、ローカルレポジトリにapp.pyファイルを作成し、以下を記述します。
gradioだけであればrequirements.txtは必要ありませんが、モデルによっては、requirements.txtファイルを作成しましょう。

import gradio as gr

def greet(name):
    return "Hello " + name + "!!"

iface = gr.Interface(fn=greet, inputs="text", outputs="text")
iface.launch()

3.git pushする

git add app.py
git commit -m "Add application file"
git push

レポジトリにファイルが上がっているか確認します。
 

ファインチューニングしたモデルを使用する場合

私が苦労したのは、ファインチューニングしたモデルをあげることでした。
ここでは私のデプロイ方法を備忘もかねてご紹介します。スマートなやり方ではありません。

1.gitでディレクトリとjsonファイルをデプロイする

ディレクトリは、HuggingFaceのレポジトリで作成することができません(私は作成方法を見つけられませんでした)。したがって、ローカルレポジトリで作成してデプロイする必要があります。ここで、厄介なのが、モデルのサイズが大きいと、gitではあげられないことです。
そこで、gitを使って、ディレクトリとjsonファイルだけをデプロイします。

2.モデルはHuggingFaceのレポジトリに直接アップロードする

gitであげられない場合でも、Addfileから直接アップロードすることは可能です。ディレクトリをデプロイした後、そのディレクトリ内に、モデルをアップロードさせます。
 

デプロイしたアプリ

BERTを用いてビジネス文書をネガポジ判定するアプリを実装しました。

 

さいごに

いかがでしょうか。
gradioについて日本語で解説されたサイトはまだまだ少ないと思います。
この記事が、初心者の方のお役に少しでも立てれば幸甚です。

Discussion

おいしいおいしい

osn_Lofi様、とても参考になる記事ありがとうございます。
ファインチューニングしたgpt-2をデプロイする方法を探しており、以前投稿されていたGPT-2のファインチューニングの記事と一緒に参考にさせていただきました。

huggingfaceでのディレクトリの作成を試している際に気付いたことがありましたので共有させていただきます。

私の方でもhuggingfaceの画面から直接ディレクトリを作成する方法は見つけられませんでした。
しかし、ローカルに
models--+--pytorch_model.bin
|
+--config.json
という構造のディレクトリをあらかじめ作っておき、
Add files→Upload filesで出てくる登録画面にmodelディレクトリごとドラック&ドロップしたところ、
上記のディレクトリ構造がそのままデプロイできました。
上記の方法でアップロードしたディレクトリをfrom_pretrainedで読み込みましたが、現在のところ問題は起こっておりません。

そのため、hugging faceでのデプロイの際はローカルであらかじめpytorch_model.binとconfig.jsonの入ったディレクトリをあらかじめ作成しておき、
それを丸ごとアップロードしてしまうのがより簡単かもしれません。
すでにosn_Lofi様の方でお気づきになっており、行き違いになっていた場合は何卒ご容赦ください。

私の環境でたまたま上手くいった可能性もありますが、本件がご参考になれば幸いです。

osn_Lofiosn_Lofi

おいしい様、貴重なコメントいただきありがとうございます。
参考にしていただいて嬉しい限りです。

ローカルで作ったディレクトリをドラック&ドロップで直接アップロードできるんですね!
とてもスマートなやり方だと思います。
私の方こそ、大変、勉強になりました!

引き続き、どうぞ、よろしくお願いします