北京大学の研究者は、FastServeを紹介しました:大規模な言語モデルLLMsのための分散推論サービスシステム
Researchers at Peking University introduced FastServe, a distributed inference service system for large-scale language models (LLMs).
大規模言語モデル(LLM)の改善により、さまざまな分野での機会が生まれ、新しい波の対話型AIアプリケーションがインスピレーションを与えています。最も注目すべきものの1つはChatGPTで、ソフトウェアエンジニアリングから言語翻訳までの問題を解決するために、人々がAIエージェントと非公式にコミュニケーションを取ることを可能にします。 ChatGPTは、その驚異的な能力のために、史上最も急成長しているプログラムの1つです。MicrosoftのNew Bing、GoogleのBard、MetaのLLaMa、StanfordのAlpaca、DatabricksのDolly、UC BerkeleyのVicunaなど、多くの企業がLLMやChatGPTのような製品をリリースするトレンドに追従しています。
LLMの推論は、ResNetなどの他の深層ニューラルネットワーク(DNN)モデルの推論とは異なる特徴を持っています。LLM上に構築された対話型AIアプリケーションは、機能するために推論を提供する必要があります。これらのアプリの対話的なデザインは、LLM推論のジョブ完了時間(JCT)を迅速に行う必要があり、ユーザーエクスペリエンスを魅力的にするためです。たとえば、データをChatGPTに送信した場合、消費者は即座の応答を期待しています。ただし、LLMの数と複雑さのため、推論サービングインフラは大きな負荷を受けています。企業は、LLM推論操作を処理するために、GPUやTPUなどのアクセラレータを備えた高価なクラスタを設置しています。
DNNの推論ジョブは通常、確定的で非常に予測可能です。つまり、モデルとハードウェアが推論ジョブの実行時間を大部分に決定します。たとえば、同じResNetモデルを特定のGPU上で使用しても、さまざまな入力写真の実行時間はわずかに異なります。一方、LLMの推論位置はユニークな自己回帰パターンを持っています。LLMの推論作業は複数のラウンドを経ます。各イテレーションは1つの出力トークンを生成し、それが次のイテレーションでの次のトークンに追加されます。初めには不明な出力の長さは、実行時間と入力の長さの両方に影響を与えます。ResNetなどの決定論的モデル推論タスクの大部分は、ClockworkやShepherdのような既存の推論サービングシステムによって対応されています。
- 「飛躍的進展:UCCの研究者が量子コンピューティングの未来における重要な鍵を発見」
- 「量子飛躍:UCCの研究者が量子コンピューティングの未来の鍵を発見」
- 「LLM-AUGMENTERに会いましょう:Microsoft Researchのアーキテクチャーによる、LLMをメモリ、知識、外部のフィードバックで拡張する手法」
これらのシステムは、正確な実行時間のプロファイリングに基づいてスケジューリングの決定を行いますが、実行時間が可変のLLM推論には効果的ではありません。LLM推論の最も先進的な方法はOrcaです。Orcaはイテレーションレベルのスケジューリングを提案し、各イテレーション後に現在の処理バッチに新しいジョブを追加するか、完了したジョブを削除することができます。ただし、Orcaは先入れ先出し(FCFS)を使用して推論ジョブを処理します。スケジュールされたタスクは完了するまで連続して実行されます。推論ジョブの制約されたGPUメモリ容量と低いJCT要件のため、処理バッチを任意の数の入力関数で拡張することはできません。完了まで実行されるまでのブロックの問題はよく知られています。
LLMはサイズが大きく、絶対的な意味で実行に時間がかかるため、LLM推論操作ではこの問題が特に深刻です。特に出力の長さが長い場合、大規模なLLM推論ジョブは完了に時間がかかり、後続の短いジョブを妨げます。北京大学の研究者たちは、FastServeと呼ばれるLLM向けの分散推論サービングソリューションを開発しました。FastServeは、LLM推論のイテレーションレベルのスケジューリングと自己回帰パターンを利用して、各出力トークンのレベルで事前処理を可能にします。FastServeは、キュー内の別のジョブによって予定されたタスクを続行するか、中断するかを選択できます。これにより、FastServeはJCTと先行ブロッキングを削減し、先制的なスケジューリングを介しています。
FastServeの基盤となるのは、ユニークなスキップジョインのマルチレベルフィードバックキュー(MLFQ)スケジューラです。MLFQは、情報がない環境で平均JCTを最小化するためのよく知られた手法です。各作業は最も高い優先度キューで開始され、一定の時間内に完了しない場合は次の優先度キューに降格されます。LLM推論は、セミ情報が無関係であり、出力の長さが事前にはわからないということを意味します。これがLLM推論と従来の状況の主な違いです。入力の長さは、初期の出力トークンを作成するための実行時間を決定し、LLM推論の自己回帰パターンのため、その実行時間は後続のトークンよりもはるかに長くかかる場合があります。
入力が長く、出力が短い場合、初期の出力トークンの実行時間が大部分を占めます。彼らは、この特性を伝統的なMLFQにスキップジョインを追加するために使用します。到着タスクは、最初の出力トークンの実行時間をラインの降格閾値と比較して、適切なキューに参加します。常に最も高い優先度キューに入るのではなく、参加したキューよりも優先度の高いキューはバイパスされ、降格が最小限に抑えられます。MLFQによる先制的なスケジューリングは、中断されたが完了していないジョブを一時的な状態で保持するため、追加のメモリオーバーヘッドを加えます。LLMは、各Transformerレイヤーごとにキー値キャッシュを保持し、中間状態を保存します。バッチサイズが超過しない限り、FCFSキャッシュにはスケジュールされたジョブの中間状態を保持する必要があります。ただし、MLFQで開始された追加のジョブは、優先度の低いキューに降格されます。MLFQの中断されたが完了していないすべてのジョブは、キャッシュによって保持される中間状態を持つ必要があります。LLMのサイズとGPUの制限されたメモリスペースを考慮すると、キャッシュがオーバーフローする可能性があります。キャッシュがいっぱいの場合、スケジューラは新しいジョブの開始を単純に遅延させることができますが、これにより再び先行ブロッキングが発生します。
代わりに、彼らは生産的なGPUメモリ管理システムを開発し、スケジュールされたときに低優先度のキュー内のプロセスの状態を前もってアップロードし、キャッシュがほぼいっぱいになったときに状態をオフロードします。効率を高めるために、パイプライン処理と非同期メモリ操作を使用しています。FastServeは、テンソルとパイプライン並列処理などの並列化技術を使用して、1つのGPUに収まらない巨大なモデルのために多数のGPUを使用した分散推論サービスを提供します。パイプラインのブロックを減らすために、スケジューラは同時に複数のジョブのバッチを実行します。キーと値のキャッシュは、キーと値のキャッシュマネージャによって組織化され、GPUとホストメモリの間のメモリスワッピングの管理も行います。彼らは、NVIDIA FasterTransformerをベースにしたFastServeシステムのプロトタイプを実際に実装しました。結果は、FastServeが最先端のOrcaソリューションと比較して、平均およびテールのジョブ完了時間をそれぞれ最大5.1と6.4向上させることを示しています。
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