Hugging FaceのInference Endpointを使って推論サーバを構築する
Transformerの推論モデルを自作のソフトウエアから使う方法は、いくつかの選択肢があります。以前の記事では、AWSのLamdaにモデルをデプロイする方法を紹介しました。
昨日、Hugging Faceからメールが届き、新しくInference Endpointというサービスを開始したということなので、早速、試してみたいと思います。
Inference Endpointの構築
Inference Endpointの利用には、Payment information(クレジットカード情報)の登録が必要になります。利用する場合には、Edit profileからbillingをクリックして登録できます。
アカウントの登録が完了したら、こちらのページから、[Deploy your first model]をクリックします。
Model Repositoryに、利用するモデルを入力します。privateモデルは使えない様です。
Select a Cloud Providerで、利用するプロバイダを選択します。現時点(2022年10月13日)ではGoogle cloudは選択できません。Azureは選択はできますが、うまくビルドすることができませんでした。特にこだわりがなければAWSで良いかと思います。AWSのアカウントがなくても利用できます。
Select Endpoint Security Level で、Protectedを選択すると、Tokenによる認証が必要になります。通常の利用ではこれで問題ないかと思います。Privateを選択すると、インターネットからの利用ができなくなります。企業内利用などの場合でセキュリティを高めたい場合には、こちらを選択しますが、AWSのアカウントIDの入力が求められます。
基本的には、以上の3箇所の入力だけで Endpointができてしまいます。
Advanced configurationをクリックすると、以下のような設定が可能となります。ちなみに、Instance typeと、Replica autoscalingは、後で、Updateすることもできる様です。
設定は、本当に数秒で完了します。buildも数分で完了したかと思います。
Inference Endpointの利用
今回は ”rinna/japanese-gpt2-small”を使ってEndpointを作成しています。このモデルは、Text Generationモデルで、入力した文字列に続く文章を生成してくれます。
それでは、実際に使えるかどうか、Google Colaboratoryで試してみます。
import json
import requests
API_URL= <Inference Endpointの URL>
access_token =<HuggingFaceのアカウントのAPI Token>
headers = {"Authorization": f"Bearer {access_token}",
"Content-Type": "application/json"}
def query(payload):
data = json.dumps(payload)
response = requests.request("POST", API_URL, headers=headers, data=data)
return json.loads(response.content.decode("utf-8"))
input= {"inputs":"トンネルを抜けると、"}
query(input)
- 実行結果
[{'generated_text': 'トンネルを抜けると、道なりに左カーブし、坂下の林道を下っていく。 そのままカーブを左に曲がり、2つ目の細い道を抜けると左側に日赤の研修所入口の看板がある。 日赤'}]
うまく実行できた様です。
おまけ)コストについて
Inference Endpointsのコストは、利用するCPU/GPUやautoscalingの設定によって変わってきます。最小構成では、$0.06/hour(GPUの場合は$0.6/hour)ですから、$1.44/dayとなります。以前のInference APIでは$1/day(GPUの場合は$5/day)でピン留めできましたので、使い方によっては、少し高くなってしまっているかもしれません。
しかしながら、このお手軽さは大変魅力的です。例えば、GPUで実験したい場合などは、今までは日単位の課金だったのが、分単位になるということで、個人ユーザにとっても利用価値があるものと考えます。