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を展開する方法と、応答のストリーミングとエンドポイントのパフォーマンステストの方法を紹介します。さあ、始めましょう!

  1. Falcon 40Bの展開方法
  2. LLMエンドポイントのテスト
  3. JavaScriptとPythonでの応答のストリーミング

始める前に、Inference Endpointsについての知識をおさらいしましょう。

Hugging Face Inference Endpointsとは何ですか

Hugging Face Inference Endpointsは、本番環境での機械学習モデルの展開を簡単かつ安全な方法で提供します。Inference Endpointsを使用することで、開発者やデータサイエンティストはインフラストラクチャの管理をせずにAIアプリケーションを作成できます。展開プロセスは数回のクリックで簡略化され、オートスケーリングによる大量のリクエストの処理、ゼロスケールへのスケールダウンによるインフラストラクチャのコスト削減、高度なセキュリティの提供などが可能となります。

LLM展開における最も重要な機能のいくつかは以下の通りです:

  1. 簡単な展開: インフラストラクチャやMLOpsの管理を必要とせず、本番用のAPIとしてモデルを展開できます。
  2. コスト効率: ゼロスケールへの自動スケールダウン機能により、エンドポイントが使用されていないときにインフラストラクチャをスケールダウンしてコストを削減できます。エンドポイントの稼働時間に基づいて料金が発生するため、コスト効率が確保されます。
  3. エンタープライズセキュリティ: 直接のVPC接続を介してのみアクセス可能な安全なオフラインエンドポイントにモデルを展開できます。SOC2 Type 2の認証を受け、BAAやGDPRのデータ処理契約を提供してデータのセキュリティとコンプライアンスを強化します。
  4. LLMの最適化: LLM向けに最適化されており、ページ化されたAttentionとカスタムトランスフォーマーコード、テキスト生成推論によるFlash Attentionを使用して、高スループットと低レイテンシを実現します。
  5. 包括的なタスクサポート: 🤗 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!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

人工知能

ピーター・マッキー、Sonarの開発者担当責任者-インタビューシリーズ

ピーター・マッキーはSonarのDeveloper Relationsの責任者です Sonarは、悪いコードの1兆ドルの課題を解決するプラットフォー...

人工知能

『DeepHowのCEO兼共同創業者、サム・ジェン氏によるインタビューシリーズ』

ディープハウのCEO兼共同創設者であるサム・ジェンは、著名な投資家から支持される急速に進化するスタートアップを率いていま...

人工知能

ギル・ジェロン、Orca SecurityのCEO&共同創設者-インタビューシリーズ

ギル・ゲロンは、オルカ・セキュリティのCEO兼共同設立者ですギルは20年以上にわたりサイバーセキュリティ製品をリードし、提...

人工知能

「アナコンダのCEO兼共同創業者、ピーターウォングによるインタビューシリーズ」

ピーター・ワンはAnacondaのCEO兼共同創設者ですAnaconda(以前はContinuum Analyticsとして知られる)を設立する前は、ピー...

人工知能

「UVeyeの共同設立者兼CEO、アミール・ヘヴェルについてのインタビューシリーズ」

アミール・ヘヴァーは、UVeyeのCEO兼共同創設者であり、高速かつ正確な異常検出により、自動車およびセキュリティ産業に直面...

人工知能

Aaron Lee、Smith.aiの共同設立者兼CEO - インタビューシリーズ

アーロン・リーさんは、Smith.aiの共同創業者兼CEOであり、AIと人間の知性を組み合わせて、24時間365日の顧客エンゲージメン...