「vLLMの解読:言語モデル推論をスーパーチャージする戦略」

『vLLMの解読:言語モデル推論をスーパーチャージする戦略』

イントロダクション

大規模言語モデル(LLM)は、コンピュータとの対話方法を革新しました。しかし、これらのモデルを本番環境に展開することは、メモリ消費量と計算コストの高さのために課題となることがあります。高速なLLM推論とサービングのためのオープンソースライブラリであるvLLMは、PagedAttentionと呼ばれる新しいアテンションアルゴリズムと連携して、これらの課題に対処します。このアルゴリズムは効果的にアテンションのキーと値を管理し、従来のLLMサービング方法よりも高いスループットと低いメモリ使用量を実現します。

学習目標

この記事では、以下の内容について学びます:

  • LLM推論の課題と従来のアプローチの制約を理解する。
  • vLLMとは何か、そしてどのように機能するのか理解する。
  • vLLMを使用したLLM推論のメリット。
  • vLLMのPagedAttentionアルゴリズムがこれらの課題を克服する方法を発見する。
  • vLLMを既存のワークフローに統合する方法を知る。

この記事はData Science Blogathonの一環として公開されました。

LLM推論の課題

LLMは、テキスト生成、要約、言語翻訳などのタスクでその価値を示しています。しかし、従来のLLM推論手法でこれらのLLMを展開することはいくつかの制約を抱えています:

  • 大きなメモリフットプリント:LLMは、パラメータや中間アクティベーション(特にアテンションレイヤーからのキーと値のパラメータ)を保存するために大量のメモリを必要とし、リソースに制約のある環境での展開が困難です。
  • スループットの限定:従来の実装では、大量の同時推論リクエストを処理するのが難しく、スケーラビリティと応答性が低下します。これは、大規模言語モデルが本番サーバーで実行され、GPUとの効果的な連携が行えない影響を受けます。
  • 計算コスト:LLM推論における行列計算の負荷は、特に大規模モデルでは高額になることがあります。高いメモリ使用量と低いスループットに加えて、これによりさらにコストがかかります。

vLLMとは何か

vLLMは高スループットかつメモリ効率の良いLLMサービングエンジンです。これは、PagedAttentionと呼ばれる新しいアテンションアルゴリズムと連携して、アテンションのキーと値をより小さな管理しやすいチャンクに分割することで効果的に管理します。このアプローチにより、vLLMのメモリフットプリントが削減され、従来のLLMサービング手法と比べて大きなスループットを実現することができます。テストでは、vLLMは従来のHuggingFaceサービングよりも24倍、HuggingFaceテキスト生成インファレンス(TGI)よりも2〜5倍高速になりました。また、連続的なバッチ処理とCUDAカーネルの最適化により、インファレンスプロセスをさらに洗練させています。

vLLMのメリット

vLLMは従来のLLMサービング手法よりもいくつかの利点を提供します:

  • 高いスループット:vLLMは、最も人気のあるLLMライブラリであるHuggingFace Transformersよりも最大24倍の高いスループットを実現できます。これにより、より少ないリソースでより多くのユーザーに対応することができます。
  • 低いメモリ使用量:vLLMは、従来のLLMサービング手法と比べて非常に少ないメモリを必要とするため、ソフトハードウェアのプラットフォームに展開する準備ができています。
  • OpenAI互換のAPI:vLLMは、既存のLLMアプリケーションと簡単に統合できるOpenAI互換のAPIを提供します。
  • Hugging Faceモデルとのシームレスな統合:vLLMは、さまざまなモデルと使用することができるため、LLMサービングのための必須ツールとなります。

vLLMの始め方

vLLMの始め方は非常に簡単です。まず、以下に示すようにVLLMライブラリをインストールします。

pip install vllm

上記のコマンドでvllmライブラリがインストールされるはずです。次のステップでは、推論を開始するためのモデルを選択します。

from vllm import LLM, SamplingParams# ラージ言語モデルを選択するllm = LLM(model="gpt2-xl")# パラメータを設定sampling_params = SamplingParams(temperature=0.8, top_p=0.90,max_tokens = 50)

vLLM ライブラリ

まず、vllm ライブラリから2つのクラスをインポートします。

  • LLM: このクラスはモデルのダウンロードに使用されます。現在、vllm は gpt、llama、vicuna、bloom など、さまざまなモデルファミリーのモデルをサポートしています。
  • SamplingParams: これはモデルのパラメータを定義するクラスです。温度(モデルの創造性)、top_p(合計確率が0.9になる最上位のトークン)、max_tokens(モデルが生成できるトークンの最大数)など、他のモデルパラメータを含みます。

次に、LLM オブジェクトをインスタンス化します。ここでは、1.5 billion パラメータのgpt2-xlモデルを選択します。その後、temperaturemax_tokenstop_pなどのモデルの設定を行います。

したがって、このコードを実行すると、HuggingFace Hub から事前学習済みの gpt-xl モデルをダウンロードし、モデルをGPUにロードします。次に、プロンプトを作成してモデルを推論し、応答生成にかかる時間をテストします。

%%time# プロンプトを定義するprompt = "Machine Learning is"# 回答を生成するanswer = llm.generate(prompt,sampling_params)# 回答変数から生成されたテキストを取得するanswer[0].outputs[0].text

プロンプト

ここでは、「Machine Learning is」というプロンプトを与え、このプロンプトSampingParamsとともにLLMオブジェクトの.generate()クラスに渡します。これにより、回答が生成されます。回答には、RequestOutput型の要素のリストが含まれています。リストの各要素には、生成されたテキストやその他の情報が含まれています。しかし、ここでは生成された出力のみに興味があり、outputs[0].textを使用して回答からアクセスします。生成された応答は以下の通りです。

生成にかかる時間はミリ秒単位で表示され、非常に速いことが分かります。また、音声出力も得られます(gpt2-xl は平均的なモデルであり、素晴らしい応答は生成しません。無料の GPU に適合するため、デモの目的で使用しています)。さて、モデルにプロンプトのリストを与えて応答の生成にかかる時間を確認してみましょう。

%%time# プロンプトを定義するprompt = [    "Quantum Computing とは何ですか?",    "電子と陽子の違いは何ですか?",    "Machine Learning とは何ですか?",]# 回答を生成するanswers = llm.generate(prompt,sampling_params)# 回答変数から生成されたテキストを取得するfor i in range(3): print("\nプロンプト:",prompt[i],"\n生成結果:",answers[i].outputs[0].text) print()

上記のコードは自明です。プロンプトのリストを作成し、3つのプロンプトを指定してLLMクラスの.generate()関数に渡しています。その後、LLM クラスは回答のリストを生成します。そのリストをトラバースし、各応答からテキストをプリントしています。以下は出力です。

上記の gpt2-xl 大型言語モデルによって生成された応答を確認することができます。反応はあまり良くなく、文の途中で切れていますが、これは gpt2-xl が最高のパフォーマンスを発揮しないモデルであるため予想される結果です。ここでは大型言語モデルが応答を生成するためにかかった時間が表示されています。3つすべての質問に対して応答を作成するのに1秒かかりました。これは優れた推論速度であり、計算リソースを増やすことでさらに改善できます。

vLLMを通じたLLMの提供

このセクションでは、vLLMライブラリを使用してLLMを提供する方法を紹介します。このプロセスは簡単です。vLLMを使用すると、OpenAI APIプロトコルと非常に似たサーバーを作成することが可能です。このサーバーをインターネットからアクセス可能にする方法を説明します。以下のコマンドを実行して進めてください。

curl ipv4.icanhazip.com

上記のコマンドでは、curlコマンドを使用してウェブサイトipv4.icanhazip.comにアクセスします。これにより、マシンのIPv4パブリックアドレスが返されます。このパブリックアドレスは、後でLLMをオンラインで利用できるようにするために使用されます。

コードの実装

次に、以下のPythonコマンドを実行してLarge Language Modelを提供します。

python -m vllm.entrypoints.openai.api_server \    --host 127.0.0.1 \    --port 8888 \    --model bigscience/bloomz-560m \    & \    npx localtunnel --port 8888

上記では、vllmライブラリのapi_server.pyファイルを実行しています。このファイルには次のオプションが指定されています。

  • Host: これはAPIのホストを指定するためのものです。ここではローカルホストの127.0.0.1を使用します。このLLMを提供するホストは、このローカルホストにのみ到達できます。しかし後で、外部インターネットに公開します。
  • Port: アプリケーションを実行したり、大規模な言語モデルを提供するためのポートを指定します。ランダムなポートを割り当てることができますが、ここではポート番号8888を選択しています。
  • Model: ここではvLLMで提供するモデルを指定します。先述の通り、vLLMはGPT、Llama、Mistralなどの多くのモデルファミリーをサポートしています(こちらでリストを確認できます)。この例では、560万パラメータのモデルであるbloomz-560mを使用します。

Local Tunnelの使用

ここまで、vLLMがモデルをhuggingfaceハブからダウンロードし、GPUに読み込み、実行する部分です。ホストの値をlocalhostに設定することで、提供されるLarge Language Modelへの外部からの呼び出しを制限します。これにより、内部からのアクセスのみが可能になります。インターネットに公開するために、ローカルトンネルを使用します。

リンクをクリックして、以下のように表示される新しいサイトにリダイレクトされます。

この新しいサイトでは、前に抽出したパブリックIPを提供する必要があります。そして、提出ボタンをクリックします。この手順の後、Bloomの大規模言語モデルは最終的にオンラインで利用可能になります。そして、それにアクセスするためには、前に使用したcurlコマンドと同じものを使うことができます。

OpenAI API

さて、オンラインで提供しているLLMにアクセスするために、OpenAI APIスタイルを活用することができます。以下の例で試してみましょう。

ここでは、APIテスト用の無料オンライントールを提供しているHopscotchウェブサイトを使用しています。ここでは、ローカルトンネルによって提供されるURLを入力しています。補完API URL(OpenAIの補完URLに類似)を明示的に指定しています。ボディには以下のキーと値を提供しています。

  • Model: ここで呼び出しているモデルはbloomモデルです。
  • Prompt: これはユーザープロンプトになります。
  • Max_tokens: 大きな言語モデルが生成するトークンの最大数です。
  • Temperature: モデルの創造性を設定する値で、1が最も高く、0が最も低いです。

リクエストはAPIにデータを送信するためPOSTメソッドを使用します。コンテンツタイプはapplication/jsonで、JSONデータを送信します。Promptの出力は次の通りです:

出力形式は、生成されたテキストがchoiceオブジェクト内に存在するOpenAI APIの出力形式に非常に似ています。生成された応答は「世界最大のバナナ生産国です」となっており、これは真実ではなく、ブルーム-560は性能の良いLLMではないため予想されます。主な目的は、vLLMが大規模な言語モデルをシンプルに提供する方法を確認することです。これにより、OpenAIとvLLMのコードを類似したAPI形式で簡単に切り替えることができます。

結論

vLLMは、LLMの推論をよりメモリ効率化し、高いスループットを実現できる強力なツールです。vLLMを使用することで、リソースの制限に悩むことなく、大規模な言語モデルを本番環境に展開することができます。APIはOpenAIに非常に似ているため、OpenAIと連携している開発者は他のモデルにすばやく切り替えることができます。

この記事の主なポイントは次の通りです:

  • vLLMは高スループットでメモリ効率の良いLLMサービングエンジンであり、これらの課題に対処できます
  • 効果的に注意機構のキーと値を管理する新しいアテンションアルゴリズムであるPagedAttentionの概念を活用しています
  • vLLMを使用すると、従来のLLMサービング方法よりも高いスループットを実現できます
  • Hugging Faceモデルと互換性があり、OpenAI互換のAPIを提供します
  • vLLMはOpenAIスタイルのAPIを介してLLMをサービスとして提供するために使用できます

よくある質問

この記事に表示されているメディアはAnalytics Vidhyaの所有ではなく、著者の裁量で使用されています。

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

人工知能

クリエイティブ性を高めるためのChatGPTプロンプト

「良いアイデアが思いつかない? あなたの創造力をChatGPTにアウトソースしましょう」

人工知能

Rows AI:エクセルスプレッドシートの終焉か?

Rows AIは、非常に複雑なデータ分析のための信じられないほどのスプレッドシートを数分で構築することができます

機械学習

バーゼル大学病院が、「TotalSegmentator」を発表:体のCT画像の主要な解剖構造を自動的にセグメント化するための深層学習セグメンテーションモデル

過去数年間、実施されるCTスキャンの数と利用可能なデータ処理能力は増加してきました。ディープラーニングの進展により、画...

データサイエンス

LangChain:LLMがあなたのコードとやり取りできるようにします

生成モデルは皆の注目を集めています現在、多くのAIアプリケーションでは、機械学習の専門家ではなく、API呼び出しの実装方法...

データサイエンス

大規模な言語モデルについて企業が知っておくべきこと

大規模な言語モデルは、ビジネスコミュニケーション、コンテンツ作成、データ分析を変革しますビジネスにおける主な機能と利...

機械学習

「RecMindと出会ってください:推薦タスクのための推論、行動、およびメモリを組み合わせた大規模言語モデル技術によって駆動される自律型の推薦エージェント」

人工知能とディープラーニングの人気が高まるにつれて、ほぼすべてのアプリケーションがAIの能力を利用して作業を進めていま...