Gemma Inference with vLLMとDataflowの活用方法
大規模言語モデル(LLM)であるGemmaは、翻訳、さまざまなテキストコンテンツの作成、情報提供を行うことができる強力で多目的なツールです。しかし、特にストリーミングユースケースでこれらのLLMを本番環境に展開することは、しばしば重大な課題となります。このブログ記事では、vLLMとDataflowという2つの最先端ツールを使って、最小限のコードでLLMを効率的に大規模展開する方法を探ります。
vLLMとは何か?
vLLMは、高スループットと低レイテンシを実現するために特別に設計されたオープンソースライブラリです。vLLMは連続的バッチ処理を利用してLLMの提供を最適化します。
従来のバッチ処理は、モデルが入力を処理する際に多くの時間を要します。通常、GPUは複数の計算を同時に行うことが得意です。バッチ処理を行うことで、GPUは利用可能な全コアを活用し、一度に大量のデータを処理できます。しかし、従来のバッチ処理にはいくつかの欠点があります。特に、異なる処理時間がかかる場合、スローなリクエストが全体の処理時間を左右してしまい、GPUのリソースが無駄に消費されます。
たとえば、「メキシコの首都は?」と「メキシコとアメリカの文化的な違いや類似点は?」という2つのリクエストを考えてみましょう。1つ目の質問は短い答えが期待されますが、2つ目は長い答えが求められます。これにより、2つ目の質問が終わるまで待機する必要が生じ、全体の処理が遅くなるのです。
一方、vLLMの「連続的バッチ処理」は、リクエストが実行中でもバッチを更新することが可能です。これは、LLMが応答の次のトークンを生成する際のループプロセスを利用しています。具体的には、生成中に次のトークンを生成し、終了した部分だけを即座に返すことができるのです。このように、vLLMはインファレンスのスループットを大幅に向上させることができます。
DataflowでのvLLMの利用法
StreamingパイプラインにvLLMインスタンスをデプロイすることは、従来は複雑でした。通常は次のようなステップが必要です:
- パイプラインの中心に単一のvLLMサーバーを立ち上げる必要があります。
- 全てのワーカープロセスがそのサーバーと通信できるようにする必要があります。
- vLLMサーバーの障害に対して耐久性のあるサービスを監視・本番化する必要があります。
このようなプロセスは、時間がかかり、エラーが発生しやすく、専門的な知識が必要です。これに対し、Dataflowはモデルマネージャーによってこのプロセスを簡素化します。この機能は、パイプライン内でのモデルの管理とデプロイの複雑さを抽象化します。Dataflowは、利用可能なコアごとにワーカープロセスを自動的にプロビジョニングします。これにより、多くのMLユースケースに最適なトポロジーを実現します。
Dataflowのモデルマネージャーを使用すると、ユーザーはパイプライン内にデプロイされるモデルの正確なコピー数を管理することができます。RunInferenceトランスフォームを適用すると、Dataflowはユーザーの意図を理解し、パイプライン用に最適なトポロジーを構築し、モデルの最適な数をデプロイします。必要なのは構成パラメータを指定するだけです。
vLLMを使用する場合、Dataflowのモデルマネージャーが専用のインファレンスプロセス内に単一のvLLMインスタンスを起動します。そのため、ワーカープロセスは効率的にリクエストをこのインスタンスに送信し、インファレンスを行うことができます。
性能向上の実績
vLLMを使用すると、DataflowパイプラインにおけるLLMインファレンスの性能が大幅に向上します。具体的には、T4 GPUを持つ単一のワーカーで2つのパイプラインを比較しました。各パイプラインは、P3データセットからプロンプトを読み込み、google/gemma-2bモデルに対して実行し、その結果をログに記録しました。
ナイーブなバッチ処理戦略を使用した場合、10,000プロンプトを処理するのに59.137 vCPU時間かかりましたが、vLLMによる連続的バッチ処理を使用した場合は、わずか2.481 vCPU時間で処理できました。これは**23倍以上**の改善です!
次のステップ
vLLMとDataflowの力を組み合わせることで、ストリーミングアプリケーションにおけるLLMの効率的なデプロイとスケールが簡単に実現できます。興味のある方は、以下のノートブックを試してみてください:
Gemmaモデルやその機能についての詳細は、Gemmaの公式ドキュメントをご覧ください。vLLMおよびその最適化技術については、vLLMの公式ドキュメントも是非訪れてみてください。
このように、vLLMとDataflowは大規模言語モデルを効果的に活用するための素晴らしいリソースです。ぜひ、彼らの可能性を探索してみてください。