Hugging Faceの推論エンドポイントを使用してLLMをデプロイする
Deploy LLM using Hugging Face's inference endpoint.
オープンソースのLLMであるFalcon、(オープン-)LLaMA、X-Gen、StarCoder、またはRedPajamaは、ここ数ヶ月で大きく進化し、ChatGPTやGPT4などのクローズドソースのモデルと特定のユースケースで競合することができるようになりました。しかし、これらのモデルを効率的かつ最適化された方法で展開することはまだ課題です。
このブログ投稿では、モデルの展開を容易にするマネージドSaaSソリューションであるHugging Face Inference EndpointsにオープンソースのLLMを展開する方法と、応答のストリーミングとエンドポイントのパフォーマンステストの方法を紹介します。さあ、始めましょう!
- Falcon 40Bの展開方法
- LLMエンドポイントのテスト
- JavaScriptとPythonでの応答のストリーミング
始める前に、Inference Endpointsについての知識をおさらいしましょう。
Hugging Face Inference Endpointsとは何ですか
Hugging Face Inference Endpointsは、本番環境での機械学習モデルの展開を簡単かつ安全な方法で提供します。Inference Endpointsを使用することで、開発者やデータサイエンティストはインフラストラクチャの管理をせずにAIアプリケーションを作成できます。展開プロセスは数回のクリックで簡略化され、オートスケーリングによる大量のリクエストの処理、ゼロスケールへのスケールダウンによるインフラストラクチャのコスト削減、高度なセキュリティの提供などが可能となります。
LLM展開における最も重要な機能のいくつかは以下の通りです:
- 簡単な展開: インフラストラクチャやMLOpsの管理を必要とせず、本番用のAPIとしてモデルを展開できます。
- コスト効率: ゼロスケールへの自動スケールダウン機能により、エンドポイントが使用されていないときにインフラストラクチャをスケールダウンしてコストを削減できます。エンドポイントの稼働時間に基づいて料金が発生するため、コスト効率が確保されます。
- エンタープライズセキュリティ: 直接のVPC接続を介してのみアクセス可能な安全なオフラインエンドポイントにモデルを展開できます。SOC2 Type 2の認証を受け、BAAやGDPRのデータ処理契約を提供してデータのセキュリティとコンプライアンスを強化します。
- LLMの最適化: LLM向けに最適化されており、ページ化されたAttentionとカスタムトランスフォーマーコード、テキスト生成推論によるFlash Attentionを使用して、高スループットと低レイテンシを実現します。
- 包括的なタスクサポート: 🤗 Transformers、Sentence-Transformers、Diffusersのタスクとモデルのサポートがデフォルトで提供され、スピーカーダイアリゼーションなどの高度なタスクやライブラリの有効化に簡単にカスタマイズできます。
Inference Endpointsの利用を開始するには、次のURLにアクセスしてください: https://ui.endpoints.huggingface.co/
1. Falcon 40Bの展開方法
開始するには、支払い方法が登録されたユーザーまたは組織アカウントでログインする必要があります(こちらで追加できます)。その後、https://ui.endpoints.huggingface.coにアクセスしてInference Endpointsを開きます。
次に、「New endpoint」をクリックします。リポジトリ、クラウド、地域を選択し、インスタンスとセキュリティ設定を調整し、tiiuae/falcon-40b-instruct
を展開します。
Inference Endpointsはモデルのサイズに基づいてインスタンスタイプを提案しますが、モデルを実行するには十分な大きさである必要があります。ここでは4x NVIDIA T4
GPUsを使用します。LLMの最高のパフォーマンスを得るために、インスタンスをGPU [xlarge] · 1x Nvidia A100
に変更します。
注意: インスタンスタイプを選択できない場合は、お問い合わせいただきインスタンスクォータをリクエストする必要があります。
「Create Endpoint」をクリックしてモデルを展開します。10分後にはエンドポイントがオンラインで利用可能になります。
2. LLMエンドポイントのテスト
エンドポイントの概要にはInference Widgetへのアクセスが提供されており、手動でリクエストを送信することができます。これにより、さまざまな入力でエンドポイントを素早くテストし、チームメンバーと共有することができます。これらのウィジェットはパラメータをサポートしていないため、「短い」生成結果となります。
ウィジェットは使用できるcURLコマンドも生成します。自分のhf_xxx
を追加してテストしてください。
curl https://j4xhm53fxl9ussm8.us-east-1.aws.endpoints.huggingface.cloud \
-X POST \
-d '{"inputs":"昔々、あるところに"}' \
-H "Authorization: Bearer <hf_token>" \
-H "Content-Type: application/json"
異なるパラメータを使用して生成を制御するために、ペイロードのparameters
属性でそれらを定義することができます。現時点では、以下のパラメータがサポートされています:
temperature
: モデル内のランダム性を制御します。値を下げると、モデルはより決定論的になり、値を上げるとよりランダムになります。デフォルト値は1.0です。max_new_tokens
: 生成するトークンの最大数です。デフォルト値は20で、最大値は512です。repetition_penalty
: 繰り返しの発生確率を制御します。デフォルトはnull
です。seed
: ランダム生成に使用するシードです。デフォルトはnull
です。stop
: 生成を停止するトークンのリストです。トークンの生成時にリスト内の任意のトークンが生成されると、生成が停止します。top_k
: 最も確率の高い語彙トークンの数をトップKフィルタリングのために保持します。デフォルト値はnull
で、トップKフィルタリングは無効になります。top_p
: ヌクレウスサンプリングのために保持するパラメータの累積確率です。デフォルトはnull
です。do_sample
: サンプリングを使用するかどうか。使用しない場合は貪欲なデコーディングを使用します。デフォルト値はfalse
です。best_of
: best_ofシーケンスを生成し、最も高いトークンの対数確率を持つものを返します。デフォルトはnull
です。details
: 生成に関する詳細情報を返すかどうか。デフォルト値はfalse
です。return_full_text
: 生成された部分のみではなく、フルテキストを返すかどうか。デフォルト値はfalse
です。truncate
: 入力をモデルの最大長に切り捨てるかどうか。デフォルト値はtrue
です。typical_p
: トークンの典型的な確率。デフォルト値はnull
です。watermark
: 生成に使用するウォーターマーク。デフォルト値はfalse
です。
3. JavaScriptとPythonでのストリーム応答
LLMでのテキストのリクエストと生成は時間がかかる場合があり、反復的なプロセスとなります。ユーザーエクスペリエンスを向上させるための素晴らしい方法は、生成されるトークンをユーザーにストリーミングで提供することです。以下に、PythonとJavaScriptを使用してトークンをストリーミングする方法の2つの例を示します。Pythonでは、Text Generation Inferenceのクライアントを使用し、JavaScriptではHuggingFace.jsライブラリを使用します。
Pythonでのストリーミングリクエスト
まず、huggingface_hub
ライブラリをインストールする必要があります:
pip install -U huggingface_hub
エンドポイントURLとクレデンシャルを指定し、使用するハイパーパラメータとともにInferenceClient
を作成できます。
from huggingface_hub import InferenceClient
# HF Inference Endpoints parameter
endpoint_url = "https://YOUR_ENDPOINT.endpoints.huggingface.cloud"
hf_token = "hf_YOUR_TOKEN"
# Streaming Client
client = InferenceClient(endpoint_url, token=hf_token)
# generation parameter
gen_kwargs = dict(
max_new_tokens=512,
top_k=30,
top_p=0.9,
temperature=0.2,
repetition_penalty=1.02,
stop_sequences=["\nUser:", "<|endoftext|>", "</s>"],
)
# prompt
prompt = "What can you do in Nuremberg, Germany? Give me 3 Tips"
stream = client.text_generation(prompt, stream=True, details=True, **gen_kwargs)
# yield each generated token
for r in stream:
# skip special tokens
if r.token.special:
continue
# stop if we encounter a stop sequence
if r.token.text in gen_kwargs["stop_sequences"]:
break
# yield the generated token
print(r.token.text, end = "")
# yield r.token.text
print
コマンドをyield
またはトークンをストリーミングするために使用する関数で置き換えてください。
JavaScriptでのストリーミングリクエスト
まず、@huggingface/inference
ライブラリをインストールする必要があります。
npm install @huggingface/inference
エンドポイントのURLと認証情報、使用するハイパーパラメータを提供してHfInferenceEndpoint
を作成できます。
import { HfInferenceEndpoint } from '@huggingface/inference'
const hf = new HfInferenceEndpoint('https://YOUR_ENDPOINT.endpoints.huggingface.cloud', 'hf_YOUR_TOKEN')
// 生成パラメータ
const gen_kwargs = {
max_new_tokens: 512,
top_k: 30,
top_p: 0.9,
temperature: 0.2,
repetition_penalty: 1.02,
stop_sequences: ['\nUser:', '<|endoftext|>', '</s>'],
}
// プロンプト
const prompt = 'ニュルンベルクで何ができますか?3つのヒントを教えてください'
const stream = hf.textGenerationStream({ inputs: prompt, parameters: gen_kwargs })
for await (const r of stream) {
// 特殊トークンをスキップする
if (r.token.special) {
continue
}
// ストップシーケンスに遭遇したら終了する
if (gen_kwargs['stop_sequences'].includes(r.token.text)) {
break
}
// 生成されたトークンを出力する
process.stdout.write(r.token.text)
}
process.stdout
呼び出しをyield
またはトークンをストリーミングするために使用する関数で置き換えてください。
結論
このブログ記事では、Hugging Face Inference Endpointsを使用してオープンソースのLLMを展開する方法、高度なパラメータでテキスト生成を制御する方法、およびPythonまたはJavaScriptクライアントに対してレスポンスをストリーミングしてユーザーエクスペリエンスを向上させる方法を紹介しました。 Hugging Face Inference Endpointsを使用することで、数回のクリックでモデルを本番用のAPIとして展開し、自動的にゼロまでスケールダウンしてコストを削減し、SOC2 Type 2認証でバックアップされたセキュアなオフラインエンドポイントにモデルを展開することができます。
お読みいただきありがとうございます!ご質問がある場合は、TwitterまたはLinkedInでお気軽にお問い合わせください。
We will continue to update VoAGI; if you have any questions or suggestions, please contact us!
Was this article helpful?
93 out of 132 found this helpful
Related articles