Hugging Face での LLM 向けテキスト生成推論ツールキットを極める

Hugging Face での LLM 向けテキスト生成推論ツールキットを極める

はじめに

テキスト生成は、機械が人間らしいテキストを解釈・生成する方法を変革する画期的な能力として登場しました。この人気の高まりにより、LLM を扱うプロセスを効率化・強化するために設計された多数のツールが開発されています。

大規模言語モデルは急速に拡大し、ほぼ毎週のように新しいバージョンが登場しており、それに伴いこのテクノロジーをサポートするホスティングオプションも増加しています。数あるツールの中でも、Hugging Face の Text Generation Inference(TGI)は際立っており、ローカルマシン上で LLM をサービスとして実行することを可能にします。

このガイドでは、Hugging Face TGI がなぜ重要な革新なのか、そしてそれを使用して、人間の文章と見分けがつかなくなりつつあるテキストを生成する高度な AI モデルを開発する方法について詳しく説明します。

Hugging Face Text Generation Inference とは?

Hugging Face Text Generation Inference(TGI)は、大規模言語モデルをデプロイしてサーブするために Rust と Python で書かれたフレームワークです。これは、この目的のために設計されたプロダクション対応のツールキットです。

Hugging Face は TGI を開発・配布しており、HFOILv1.0 ライセンスの下で、製品またはサービスの主要機能ではなく補助ツールとして機能する限り、商用利用が許可されています。主な課題は以下の通りです。

Hugging Face Text Generation Inference(TGI)の主な機能

  1. 高性能テキスト生成
    — TGI は、テンソル並列化(大規模モデルを複数の GPU に分散)や動的バッチ処理(サーバー内でプロンプトを即座にグループ化)などの技術を採用し、StarCoder、BLOOM、GPT-NeoX、Llama、T5 などの人気のオープンソース LLM のパフォーマンスを最適化します。

  2. 効率的なリソース使用
    — TGI は、継続的バッチ処理、最適化されたコード、テンソル並列化を使用して、リソース使用を最小限に抑えながら複数のリクエストを同時に処理します。

  3. 柔軟性と安全性
    — TGI は、透かし、ロジットワーピング(特定のトークンのロジットにバイアス値を注入して修正)、停止シーケンスなど、責任ある制御された LLM 使用を保証するためのさまざまな安全・セキュリティ機能をサポートしています。

Hugging Face は、LLaMA、Falcon7B、Mistral などの人気モデルを含む一部の LLM のアーキテクチャを最適化し、TGI でより高速に動作するようにしています。サポートされているモデルの完全なリストは、ドキュメントに記載されています。

Hugging Face TGI を使う理由は?

Hugging Face は、自然言語機能を備えた AI を開発するための主要なプラットフォームとなっています。数多くの主要なオープンソースモデルをホストしており、NLP 革新の強力な拠点となっています。従来、これらのモデルはローカルで実行するには大きすぎるため、クラウドベースのサービスに依存する必要がありました。

しかし、QLoRa や GPTQ などの量子化技術の最近の進歩により、一部の LLM はローカルコンピューターを含む日常的なデバイスでも管理可能になりました。

Hugging Face TGI は、ローカルマシン上で LLM をサービスとして有効にするために特別に設計されています。このアプローチは、モデルをバックグラウンドで即座に応答できる状態に保つことで、LLM を起動するという課題に対処し、プロンプトごとに長い待ち時間を回避します。オンデマンドでテキストを生成できるトップ言語モデルのコレクションを備えたエンドポイントを想像してみてください。

TGI の際立った点は、その実装のシンプルさです。さまざまな合理化されたモデルアーキテクチャをサポートしており、デプロイが迅速かつ簡単です。

さらに、TGI はすでにいくつかのライブプロジェクトで使用されています。いくつかの例を以下に示します。

- Hugging Chat:オープンアクセスモデル向けのオープンソースインターフェース。
- OpenAssistant:LLM を訓練するためのオープンソースコミュニティイニシアチブ。
- nat.dev:LLM を探索・比較するためのプラットフォーム。

ただし、注目すべき制限があります。TGI は、M1 シリーズ以降を含む ARM ベースの GPU Mac とまだ互換性がありません。

Hugging Face TGI のセットアップ

まず、Hugging Face TGI エンドポイントをセットアップします。

Hugging Face TGI をローカルにインストールして実行するには、まず Rust をインストールします。その後、Python 3.9 以降のバージョンを使用して Python 仮想環境をセットアップします(例:conda を使用)。

#Rust のインストール
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

#Python 仮想環境の作成
conda create -n text-generation-inference python=3.9
conda activate text-generation-inference

さらに、Protoc のインストールも必須です。Hugging Face は、最適な互換性のためにバージョン 21.12 の使用を推奨しています。このインストールを実行するには、sudo 権限が必要になることに注意してください。

PROTOC_ZIP=protoc-21.12-linux-x86_64.zip
curl -OL https://github.com/protocolbuffers/protobuf/releases/download/v21.12/$PROTOC_ZIP
sudo unzip -o $PROTOC_ZIP -d /usr/local bin/protoc
sudo unzip -o $PROTOC_ZIP -d /usr/local 'include/*'
rm -f $PROTOC_ZIP

最初に、スクラッチからインストールする手順について説明しますが、これは簡単ではないかもしれません。このプロセス中に問題が発生した場合は、スキップして Docker イメージを直接使用することもできます。その方が簡単です。両方のシナリオを取り上げます。

すべての前提条件が満たされたら、TGI のセットアップに進みます。まず GitHub リポジトリをクローンします。

git clone https://github.com/huggingface/text-generation-inference.git

次に、ローカルマシン上の TGI ディレクトリに移動し、以下のコマンドを使用してインストールします。

cd text-generation-inference/
BUILD_EXTENSIONS=False make install

次に、Docker を使用する場合と使用しない場合の TGI の使用方法を見ていきましょう。デモには、Apache 2.0 ライセンスの Falcon-7B モデルを使用します。

Docker を使用せずにモデルを起動する

インストールプロセスによって、新しいコマンド“text-generation-launcher”が生成され、これが TGI サーバーを起動します。Falcon-7B モデルを使用してエンドポイントを有効にするには、次のコマンドを実行するだけです。

text-generation-launcher --model-id tiiuae/falcon-7b-instruct --num-shard 1 --port 8080 --quantize bitsandbytes

各入力パラメータの内訳は次のとおりです。

  • model-id:これは、Hugging Face Hub にリストされているモデルの特定の名前を指します。今回の Falcon-7B の場合は“tiiuae/falcon-7b-instruct”です。
  • num-shard:使用可能な GPU の数に合わせてこのパラメータを調整します。デフォルト値は 1 です。
  • port:サーバーがリクエストを待ち受けるポートを指定します。デフォルトのポートは 8080 です。
  • quantize:VRAM が 24 GB 未満の GPU を使用する場合、メモリオーバーロードを回避するためにモデルの量子化が必要です。上記のコマンドでは、即時の量子化のために“bitsandbytes”を選択しています。もう 1 つのオプション“GPTQ”(“gptq”)も利用可能ですが、その動作はあまり知られていないかもしれません。

TGI アプリケーション

Text Generation Inference(TGI)サーバーをアプリケーションに統合するには、いくつかの方法があります。サーバーが稼働したら、/generate エンドポイントに POST リクエストを送信して結果を取得することで、サーバーと対話できます。

TGI で継続的なトークンストリーミングを選択する場合は、次のセクションで示すように、代わりにエンドポイントを使用します。これらのリクエストは、curl、Python、TypeScript など、お好みのツールを使用して行うことができます。Python スクリプトを使用して TGI が提供するモデルにクエリを実行するには、次の text-generation ライブラリをインストールする必要があります。次の pip コマンドを実行するだけで簡単にインストールできます。

pip install text-generation

TGI サーバーを起動した後、モデルを提供するエンドポイントの URL を指定して InferenceClient() のインスタンスを作成します。次に、text_generation() を呼び出して、Python を使用してエンドポイントにリクエストを送信できます。

from text_generation import Client
client = Client("http://127.0.0.1:8080")
client.text_generation(prompt="Your prompt here!")

InferenceClient でストリーミングを有効にするには、stream=True を設定するだけです。これにより、サーバー上でトークンが生成されるとリアルタイムで受信できるようになります。ストリーミングを使用する方法は次のとおりです。

for token in client.text_generation("Your prompt here!", max_new_tokens=12, stream=True):
    print(token)

TGI を介したモデルへのプロンプト

エンドポイントにデプロイされたモデル(この場合は Falcon-7B)と対話することになることに注意してください。TGI を通じて、選択した LLM からの応答を取得するためのライブエンドポイントを確立します。

その結果、Python を使用すると、ローカルデバイス上でポート 8080 を介してアクセス可能なクライアントを介して、プロンプトを LLM に直接送信できます。したがって、対応する Python スクリプトは次のようになります。

from text_generation import Client
client = Client("http://127.0.0.1:8080")
print(client.generate("Translate the following sentence into spanish: 'What does Large Language Model mean?'", max_new_tokens=500).generated_text)

環境にインストールしなくても、モデルから応答を受け取ります。Python を使用する代わりに、次の例に示すように CURL を使用して LLM にクエリを実行することもできます。

curl 127.0.0.1:8080/generate \
  -X POST \
  -d '{"inputs":"Code in Javascript a function to remove all spaces in a string and then print the string twice.","parameters":{"max_new_tokens":500}}' \
  -H 'Content-Type: application/json'

TGI を試した後、その印象的な速度が実証されました。Falcon-7B(トークン制限 500)では、数秒しかかかりません。対照的に、transformers ライブラリを使用した一般的な推論アプローチには約 30 秒かかります。

novita.ai との統合(novita.ai の LLM を使用)

バージョン 1.4.0 以降、TGI は novita.aiLLM API と互換性のある API を導入しています。この新しい Messages API により、顧客とユーザーは novita.ai モデルからオープンソース LLM へシームレスに移行できます。この API は、novita.ai のクライアントライブラリや、LangChain や LlamaIndex などのサードパーティツールとの直接統合を目的として設計されています。

TGI の Messages サポートにより、その Inference Endpoints は novita.ai LLM API と完全に互換性があります。この互換性により、ユーザーは novita.ai モデルを使用する既存のスクリプトを、TGI エンドポイントでホストされているオープン LLM に簡単に置き換えることができます。

このアップグレードにより、シームレスな切り替えが容易になり、オープンソースモデルの広範な利点に即座にアクセスできるようになります。これには以下が含まれます。

モデルとデータに関する完全な制御と透明性。レート制限に関する懸念の解消。独自の要件を満たすようにシステムを調整する柔軟性。

TGI を novita.ai のチャット補完プロトコルに統合する方法の例を以下に示します。

from openai import OpenAI

client = OpenAI(
    base_url="https://api.novita.ai/v3/openai",
    # NovitaAI API キーを取得するには、次を参照:https://novita.ai/get-started/Quick_Start.html#_3-create-an-api-key
    api_key="<YOUR NovitaAI API Key>",
)

model = "meta-llama/llama-3-8b-instruct"
stream = True # or False
max_tokens = 512

chat_completion_res = client.chat.completions.create(
    model=model,
    messages=[
        {
            "role": "system",
            "content": "Act like you are a helpful assistant.",
        },
        {
            "role": "user",
            "content": "Hi there!",
        }
    ],
    stream=stream,
    max_tokens=max_tokens,
)

if stream:
    for chunk in chat_completion_res:
        print(chunk.choices[0].delta.content or "", end="")
else:
    print(chat_completion_res.choices[0].message.content)

明らかなように、novita.ai ライブラリを使用して、エンドポイントと Hugging Face パスワードを指定できます。この統合の詳細については、Hugging Face TGI のドキュメントを参照してください。

TGI 使用時の実用的なヒント

LLM の基本概念

HuggingFace TGI に飛び込む前に、大規模言語モデルについて十分に理解しておくことが重要です。トークン化、アテンション機構、Transformer アーキテクチャなどの主要な概念に精通してください。これらの基本は、モデルを調整し、テキスト生成結果を強化するために不可欠です。

モデルの準備と最適化 — Hugging Face を理解する

特定のニーズに合わせてモデルを準備し最適化する方法を学びます。これには、適切なモデルの選択、トークナイザーのカスタマイズ、品質を損なわずにパフォーマンスを向上させるための技術の適用が含まれます。

HuggingFace の動作方法と、NLP 開発に HuggingFace Hub を使用する方法に精通してください。良い出発点は、チュートリアル“An Introduction to Using Transformers and Hugging Face”です。

モデルは特定の目的に合わせた最適化が必要になることが多いため、ファインチューニングの概念を理解することも不可欠です。ガイド“An Introductory Guide to Fine-Tuning LLMs”を使用してモデルをファインチューニングする方法を学ぶことができます。

生成戦略

greedy search、beam search、top-k sampling など、テキスト生成に対するさまざまなアプローチを調査します。各方法には長所と短所があり、生成されるテキストの一貫性、創造性、関連性に影響を与えます。

結論

Hugging Face の TGI ツールキットは、個人が AI テキスト生成を深く探求することを可能にします。人間らしいテキストを要求する高度な NLP アプリケーション向けに LLM をデプロイおよびホストするためのユーザーフレンドリーなツールキットを提供します。

大規模言語モデルを自己ホストすると、データのプライバシーとコスト管理が提供されますが、強力なハードウェアが必要です。それでも、この分野の最近の進歩により、ローカルマシン上で直接、より小規模なモデルを利用できるようになりました。

novita.ai、無限の創造性のためのワンストッププラットフォーム。100 以上の API にアクセスできます。画像生成、言語処理、音声強化、動画操作まで、従量課金制で安価、GPU メンテナンスの手間から解放され、独自の製品を構築できます。ぜひ無料でお試しください。

おすすめの記事

LLM と GPT の違いは何ですか?

LLM リーダーボード 2024 の予測が明らかに

Novita AI LLM 推論エンジン:最大のスループットと最も安価な推論を実現