人工知能
PowerInfer: コンシューマー級GPUを使用した高速大規模言語モデル

生成的大規模言語モデルは、優れたコンテンツ作成能力を備え、AI革命の最前線に立っています。ただし、これらのモデルは大量の計算リソースを必要とし、運用コストも高くなります。これは、モデルが数百億のパラメータで構成されているためです。さらに、生成AIモデルは、スムーズに動作するために、数千のGPUに依存しています。高額な運用コストは、生成AIモデルが個人用デバイスに効果的に展開されていない主な理由です。
この記事では、PowerInferについて説明します。PowerInferは、単一のコンシューマー級GPUを搭載した標準コンピュータ用に設計された高速LLM推論エンジンです。PowerInferフレームワークは、LLM推論の固有のローカリティを利用しようとします。つまり、任意の時点で、限られた数の「ホット」ニューロンが一貫して活性化していますが、残りの「コールド」ニューロンは、特定の入力または要件に応じて活性化します。このアプローチにより、PowerInferフレームワークは、生成AIが望ましい出力を生成するために必要な計算リソースを削減できます。
PowerInferフレームワークの詳細について説明します。メソッド、パイプライン、実用的な応用結果について掘り下げていきます。では、始めましょう。
PowerInfer: コンシューマー級GPUを使用した高速大規模言語モデル
生成的大規模言語モデル、例えばChatGPTやDALL-Eは、洗練された生成および自然言語処理タスクで知られています。これらのモデルは、高度な計算リソースを必要とし、通常、先進的なGPUを備えたデータセンターで展開されます。高い計算リソースの必要性は、これらのモデルをデータセンターに限定し、よりアクセスしやすいローカルプラットフォーム、例えばパーソナルコンピュータに展開する必要性を強調しています。
大規模言語モデルのアクセス性を高めることで、推論およびコンテンツ生成のコストを削減し、データのプライバシーを強化し、モデルをカスタマイズできるようになります。さらに、データセンターの展開は、高いスループットを優先しますが、ローカルのLLM展開は、小さなバッチサイズのため、低遅延に焦点を当てることができます。
しかし、これらのモデルをローカルデバイスに展開することは、モデルが大量のメモリを必要とするため、重大な課題をもたらします。大規模言語モデルは、自己回帰トランスフォーマーとして機能し、トークンごとにテキストを生成し、各トークンはモデル全体、つまり数百億のパラメータにアクセスする必要があります。これには、低遅延の出力生成のために多数の高性能GPUが必要です。さらに、ローカルの展開は、通常、個々のリクエストを順番に処理し、並列処理の可能性を制限します。
生成AIフレームワークの複雑なメモリ要件に対処するために、既存のソリューションは、モデルオフロードや圧縮などの方法を使用しています。蒸留、プルーニング、量子化などのテクニックは、モデルサイズを削減しますが、標準的なコンシューマー級GPUには依然として大きすぎます。モデルオフロードは、トランスフォーマーレイヤーをCPUとGPUの間でパーティション化し、CPUとGPUのメモリ間で分散レイヤー処理を可能にします。ただし、この方法は、遅いPCIeインターコネクトとCPUの限られた計算能力によって制限され、高い推論遅延につながります。
PowerInferフレームワークは、LLM推論の特性とハードウェア構造の不一致が、LLM推論のメモリ問題の主な原因であると主張しています。理想的には、頻繁にアクセスされるデータは、高帯域幅の限られた容量のGPUに格納され、頻繁にアクセスされないデータは、低帯域幅の高容量CPUに格納されるべきです。ただし、各LLM推論イテレーションのパラメータの大量のデータは、単一のGPUのワーキングセットに収まることができず、ローカリティの不効率な利用につながります。
大規模言語モデルの推論プロセスは、高いローカリティを示し、各イテレーションで限られた数のニューロンが活性化します。PowerInferフレームワークは、このローカリティを利用して、GPUでホットニューロンを管理し、CPUでコールドニューロンを管理します。オフライン段階で、ホットニューロンをGPUに事前に読み込み、ランタイム中に活性化されたニューロンを特定します。このアプローチにより、コストのかかるPCIeデータ転送を最小限に抑え、GPUとCPUがそれぞれのニューロンを独立して処理できるようになります。
しかし、LLMをローカルデバイスに展開することは、課題に直面しています。オンライン予測器は、活性化されたニューロンを特定するために重要ですが、GPUメモリを大量に消費します。PowerInferフレームワークは、層の活性化偏りと疎性に基づいて、小さな予測器を構築する適応方法を使用し、サイズを削減しながら精度を維持します。さらに、LLMフレームワークは、特殊な疎な演算子を必要とします。PowerInferフレームワークは、ランタイム中の密な形式への変換を必要とせずに、GPUとCPUで直接ニューロンとその重みを計算するニューロン認識可能な演算子を使用します。
最後に、活性化されたニューロンをCPUとGPUの間で最適に配置することは、課題です。PowerInferフレームワークは、オフライン段階でニューロンの配置ポリシーを生成し、各ニューロンのLLM推論結果への影響を測定し、整数線形問題として定式化します。
アーキテクチャとメソッド
以下の図は、オフラインコンポーネントとオンラインコンポーネントを持つPowerInferフレームワークのアーキテクチャを示しています。

大規模言語モデルのローカリティ特性の変動により、オフラインコンポーネントはLLMフレームワークの活性化疎性をプロファイリングし、ホットニューロンとコールドニューロンを区別することができます。一方、オフライン段階では、推論エンジンはCPUとGPUの両方に2種類のニューロンを読み込み、ランタイム中にLLMリクエストを低遅延で提供します。
オフライン段階: ポリシーソルバーとLLMプロファイラー
オフライン段階では、LLMプロファイラコンポーネントは、一般的なデータセットから派生したリクエストを使用して、推論プロセスから活性化データを収集します。最初のステップでは、フレームワーク内のすべての層のニューロンの活性化を監視し、次にポリシーソルバコンポーネントを使用してニューロンをホットまたはコールドとして分類します。ポリシーソルバーの主な目的は、より頻繁に活性化するニューロンをGPU層に割り当て、残りをCPU層に割り当てることです。2番目のステージでは、ポリシーソルバコンポーネントは、ニューロンの影響メトリクスとハードウェアの仕様を使用して、層間のワークロードをバランスさせ、整数線形プログラミングを使用してGPUのニューロンの影響メトリクスを最大化します。
オンライン段階: ニューロン認識可能なLLM推論エンジン
オフライン段階が正常に実行された後、フレームワークはオンライン段階を実行します。プロセスの3番目のステップでは、オンラインエンジンは、オフラインのポリシーソルバーの出力に基づいて、ユーザーリクエストを処理する前に、ホットニューロンとコールドニューロンをそれぞれの処理ユニットに割り当てます。ランタイム中で、オンラインエンジンは、CPUとGPUの計算を管理するために、CPUとGPUのエグゼキューターを作成します。エンジンは、活性化されたニューロンを予測し、非活性化されたニューロンをスキップします。活性化されたニューロンは、GPUで処理するために事前に読み込まれます。一方、CPUは、GPUと統合するために、ニューロンの結果を計算して転送します。オンラインエンジンは、疎なニューロン認識可能な演算子をCPUとGPUの両方で使用するため、行と列のベクトルに個別に焦点を当てることができます。

適応型疎性予測器
PowerInferフレームワークのオンライン推論エンジンが計算負荷を削減する主な概念は、エンジンが活性化されるニューロンだけを処理することです。従来的には、各トランスフォーマーレイヤーで、フレームワークはMLPと自己注意ブロックのニューロンの活性化を予測するために2つの異なる予測器を使用します。結果として、推論計算は、予測される活性化ニューロンに限定されます。ただし、ローカル展開では、リソースが限られているため、モデルサイズと予測精度のバランスを取ることが難しいです。これらの予測器は、活性化されたニューロンを予測するために頻繁に展開されるため、GPUに格納してアクセスを高速化する必要があります。ただし、フレームワークは通常、多くの予測器を展開し、LLMパラメータを格納するために必要なメモリを占有します。
さらに、予測器のサイズは、内部の偏りとLLM層の疎性の2つの要因によって一般的に決定されます。

これらの要因を最適化するために、PowerInferフレームワークは、各トランスフォーマーレイヤーの予測器に対して、固定サイズではないイテレーティブトレーニング方法を使用します。トレーニング方法の最初のステップでは、モデルサイズの基準を、モデル疎性プロファイルに基づいて確立し、内部活性化偏りを考慮して、精度を維持しながらモデルサイズをイテレーティブに調整します。
ニューロンの配置と管理
前述のように、オフラインのポリシーソルバコンポーネントがニューロンの配置ポリシーを決定する一方で、オンライン推論エンジンコンポーネントは、生成されたポリシーに従って、モデルをGPUとCPUのメモリに読み込みます。各層、つまり重み行列のある層またはない層に対して、PowerInferフレームワークは、ニューロンがホット活性化されるかどうかによって、ニューロンをCPUまたはGPUに割り当てます。シーケンスでセグメント化されたニューロンの正確な計算を確実に行うために、必要です。PowerInferフレームワークは、GPUメモリとCPUメモリの両方に、個々のニューロンを元の行列内の位置に関連付ける2つのニューロンテーブルを生成します。
ニューロン認識可能な演算子
大規模言語モデルの活性化疎性が観察されることから、不活性化されたニューロンとその重みは、行列乗算演算によってバイパスできます。つまり、疎な演算子を使用する必要があります。代わりに、PowerInferフレームワークは、ランタイム中に密な形式への変換を必要とせずに、GPUとCPUで直接ニューロンとその重みを計算するニューロン認識可能な演算子を使用します。ニューロン認識可能な演算子は、従来の疎な演算子と異なり、単一の行列内で個々の行と列のベクトルに焦点を当てています。
ニューロンの配置ポリシー
PowerInferフレームワークのオフラインコンポーネントは、CPUとGPUの計算能力を活用するために、ニューロンの配置ポリシーを生成します。このポリシーは、各層内のニューロンの配置を制御し、個々の処理ユニットの計算ワークロードを決定するのに役立ちます。ポリシーソルバーは、ポリシーの生成時に、各ニューロンの活性化頻度、通信オーバーヘッド、各処理ユニットの計算能力などの要因を考慮します。
結果と実装
PowerInferフレームワークの汎用性を、さまざまなハードウェア構成のデバイスで実証するために、実験は、Intel i9-13900Kプロセッサ、NVIDIA RTX 4090 GPU、192 GBのホストメモリを搭載した2つの異なるパーソナルコンピュータで実行されました。一方、もう一方のコンピュータは、Intel i7-12700Kプロセッサ、NVIDIA RTX 2080Ti GPU、64 GBのホストメモリを搭載しています。
PowerInferフレームワークのエンドツーエンドのパフォーマンスは、バッチサイズ1、デフォルトの展開設定で、llama.cppと比較されます。次に、フレームワークは、実際の世界の対話入力と出力の長さの変動に基づいて、ChatGPTとAlpacaのデータセットからプロンプトをサンプリングします。次の図は、さまざまなモデルに対する生成速度を示しています。

観察すると、PowerInferフレームワークは1秒あたり8.32トークンを生成し、最大16トークン/秒に達し、llama.cppフレームワークを大幅に上回っています。さらに、出力トークンの数が増加すると、PowerInferフレームワークのパフォーマンスも向上し、生成フェーズが全体の推論時間に大きな影響を与えます。

さらに、上の画像からも観察できるように、PowerInferフレームワークは、最大7トークン/秒、平均5トークン/秒のピーク生成率で、低エンドPCでもllama.cppフレームワークを上回っています。

上の画像は、2つのフレームワークのGPUとCPUの間でのニューロン負荷の分布を示しています。PowerInferフレームワークは、GPUのニューロン負荷のシェアを20%から70%まで大幅に増加させています。

上の画像は、2つのフレームワークの異なる仕様のコンピュータでのパフォーマンスを比較しています。観察すると、PowerInferフレームワークは、llama.cppフレームワークと比較して、一貫して高い出力トークン生成速度を提供しています。
最終的な考え
この記事では、PowerInferについて説明しました。PowerInferは、単一のコンシューマー級GPUを搭載した標準コンピュータ用に設計された高速LLM推論エンジンです。PowerInferフレームワークは、LLM推論の固有のローカリティを利用しようとします。つまり、任意の時点で、限られた数の「ホット」ニューロンが一貫して活性化していますが、残りの「コールド」ニューロンは、特定の入力または要件に応じて活性化します。PowerInferフレームワークは、適応型予測器とニューロン認識可能な演算子を使用して、ニューロンと計算の疎性を活性化するように設計された、高速な干渉システムです。












