LLM-Pruner技術の公開:推論速度を2倍に

LLM-Pruner技術の公開:推論速度を2倍に

大規模言語モデル推論を100倍高速化するスパース手法。LLM-Pruner技術の秘密を探り、推論速度を2倍にして高速な結果を得る方法を解説します。

はじめに

GPU上での大規模言語モデル(LLM)のパフォーマンスに影響を与える3つの主要な要素はよく知られています:(1)GPUの計算能力、(2)GPUの入出力(I/O)、(3)GPUのメモリ容量です。今日のLLMでは、推論段階における主要なボトルネックは要素(2)であることに留意する価値があります。

このブログでは、最新の研究論文とエンジニアリング実践に基づき、コンシューマー向けグラフィックカード上でのLLM推論の高速化を、プルーニングまたはスパース性を通じて実現する可能性に焦点を当てます。

まず、[1]のLLM推論レイテンシ指標の分析を参照すると、以下の3つの結論が導き出されます:

  • LLMのプロンプト処理段階とトークン生成段階では、モデルパラメータの読み込みに伴うI/Oレイテンシのため、トークン生成段階の方がはるかに時間がかかります。
  • LLM推論では、AttentionモジュールとMLPモジュールの両方がボトルネックとなり、MLPモジュールがI/Oレイテンシの約3分の2を占めています。
  • All Reduce(GPU間通信)の割合は比較的低く、主な最適化の方向性はトランスフォーマーアーキテクチャ自体にあることを示しています。

詳細なデータについては、以下の図を参照してください:

推論効率を向上させるために、量子化、推論デコーディング、蒸留、スパース性など、さまざまな手法が探求されてきました。このブログではスパース性に焦点を当て、詳細に紹介します。

スパース性の紹介。

モデルプルーニング(モデルスパース性とも呼ばれる)は、モデル量子化とは異なり、各重みパラメータを圧縮するのではなく、特定の重みパラメータを直接「削除」しようとする手法です。モデルプルーニングの原理は、モデルの精度を維持しようとしながら、「重要でない」重みを削除することでモデルのパラメータ数と計算負荷を削減することです。

論文[17]では、重みプルーニングの方法が初めて紹介されています:特定のしきい値以下のすべての重みをプルーニングし、その後、精度が目標レベルに達するまでファインチューニングを行います。この論文の著者らは、LeNet、AlexNet、VGGNetを用いてプルーニングの有効性を検証しました。

L1正則化とL2正則化に関する別の結論は、L1正則化はファインチューニングなしで優れたパフォーマンスを発揮し、L2正則化はファインチューニングありで優れたパフォーマンスを発揮することを示唆しています。また、ネットワークの初期層はプルーニングに対してより敏感であるため、反復的なプルーニングアプローチが推奨されます。さらに、実験に基づいて、著者らはLottery Ticket仮説を提案しています。

Lottery Ticket仮説とは、事前学習されたネットワークに対して、元のネットワークのトレーニングラウンドを超えることなく、元のネットワークと同等の精度を達成できるサブネットワークが存在するというものです。このサブネットワークは、宝くじに当たるようなものです。

モデルの精度を回復するためには、通常、プルーニング後にモデルを再トレーニングする必要があります。モデルプルーニングの典型的な3段階パイプラインは、トレーニング、プルーニング、ファインチューニングのステップで構成され、プルーニングの前後でネットワークの接続性が変化します。下図を参照してください。

一方、ディープラーニングモデルでスパース化できる対象に応じて、ディープニューラルネットワークのスパース性には主に重みスパース性、活性化スパース性、勾配スパース性があります。

以上がスパース性の簡単な紹介です。次に、「LLMがスパース性を通じてどのように推論を高速化するか」という重要な命題を3部構成で共有します。第1部では「大規模モデルがどのようにプルーニングされるか」について説明します。第2部では「活性化スパース性を使用して推論を高速化する方法」をカバーし、第3部では「スパース性コンパイラがLLM推論に与える影響」について深く掘り下げます。

この包括的なガイドでは、novita.aiチームのZacharyが執筆した第1部「LLM-Pruner技術の公開:推論速度を2倍に」を探求します。

LLMのプルーニング方法

LLMはしばしば数千億パラメータの規模を持ち、従来の再トレーニングや反復プルーニング手法は非現実的です。そのため、反復プルーニングやLottery Ticket仮説[2,3]などの手法は、より小規模なモデルにのみ適用可能です。

プルーニングは、ビジョンやより小規模な言語モデルやタスクに効果的に適用できます。しかし、最適なプルーニング手法では、プルーニングされた要素の削除によって生じる精度低下を回復するために、モデルの広範な再トレーニングが必要です。そのため、GPTスケールのモデルを扱う場合、コストも法外に高くなります。再トレーニングなしでモデルを圧縮するワンショットプルーニング手法もいくつか存在しますが、その計算コストが高すぎて、数十億パラメータのモデルには適用できません。

最近、LLM向けのプルーニング技術にブレークスルーがありました。これらをこのブログで順に説明します。

SparseGPT

SparseGPT[12]は、LLMシナリオにおける最初のワンショット精密プルーニング手法であり、100〜1000億パラメータ規模のモデルに効果的に動作します。SparseGPTの動作原理は、プルーニング問題を大規模なスパース回帰インスタンスに単純化します。階層的圧縮問題を解決するための新しい近似スパース回帰ソルバーに基づいており、その効率性は、最大のGPTモデル(175Bパラメータ)を単一GPUで数時間で実行するのに十分です。さらに、SparseGPTはファインチューニングを必要とせずに高精度を達成し、プルーニング後の精度低下は無視できるレベルです。例えば、公開されている最大の生成言語モデル(OPT-175BおよびBLOOM-176B)で実行した場合、SparseGPTはワンショットテストで50〜60%のスパース性を達成し、パープレキシティやゼロショットテスト精度で測定される精度低下は最小限です。

エンジニアリングコードについては、プロジェクトを参照してください:https://github.com/IST-DASLab/sparsegpt

図1は実験結果を示しており、2つの重要なポイントを強調しています。第一に、図1(左)に示されているように、SparseGPTはOPTファミリーの175Bパラメータバリアントにおいて、最大60%の均一レイヤーワイズスパース性をプルーニングでき、精度低下は最小限です。対照的に、このスケールで動作する既知の唯一のワンショットベースラインであるマグニチュードプルーニングは、10%のスパース性までしか精度を維持できず、30%を超えるスパース性では完全に崩壊します。

第二に、図2(右)に示されているように、SparseGPTはより厳格ではあるがハードウェアフレンドリーな2:4および4:8の半構造化スパースパターンに正確にスパース性を強制することもできます。これらのパターンは、特に小規模モデルにおいて、高密度ベースラインと比較して追加の精度低下を伴うことが多いものの、計算速度の向上はこれらのスパースパターンから直接推測できます。さらに、この手法によって誘導されるスパース性は、量子化によって得られる追加の圧縮とうまく融合できます。

LLM-Pruner

LLM-Pruner[13]は、勾配情報に基づいて非本質的な結合構造を選択的に削除する構造化プルーニング手法であり、LLMの機能の大部分を保持しながらスパース性を最大化します。LLM-Prunerは、LoRAを通じて、わずか3時間と50Kデータでプルーニングされたモデルのパフォーマンスを効率的に回復します。

LLM-Prunerは、LLMの構造化プルーニングに特化して設計された最初のフレームワークであり、その利点は以下のようにまとめられます:(i)タスクに依存しない圧縮。圧縮された言語モデルはマルチタスクソルバーとしての能力を保持します。(ii)元のトレーニングコーパスの要求が低減。圧縮には公開されている5万サンプルのみが必要で、トレーニングデータ獲得の予算を大幅に削減します。(iii)高速圧縮。圧縮プロセスは3時間以内に完了します。(iv)自動構造化プルーニングフレームワーク。すべての構造的依存関係がグループ化され、手動設計は不要です。

LLM-Prunerの有効性を評価するために、LLaMA-7B、Vicuna-7B、ChatGLM-6Bの3つの大規模言語モデルで広範な実験が行われました。圧縮されたモデルは、9つのデータセットを使用して、プルーニングされたモデルの生成品質とゼロショット分類パフォーマンスを評価しました。

以下の表を参照すると、LLaMA-7BをLLM-Prunerで20%プルーニングし、259万サンプルを使用した場合、モデルパフォーマンスの低下は最小限である一方、推論速度が18%向上したことがわかります。

259万サンプルを使用したLLM-Prunerの結果

Wanda

Wanda[14]は、重みと活性化に基づくプルーニング手法であり、事前学習済みLLMにスパース性を誘導することを目的とした、新しく、シンプルで効果的なアプローチです。LLMにおける最近の顕著な特徴値の観察に触発され、Wandaは各出力に対応する入力活性化を最小量子化値で乗算することにより重みをプルーニングします。特に、Wandaは再トレーニングや重みの更新を必要とせず、プルーニングされたLLMはそのまま使用できます。LLaMAおよびLLaMA-2でのWandaの評価は、確立されたマグニチュードプルーニングベースラインに対する優位性を検証し、高密度な重み更新を伴う最近の手法と比較して競争力があることを示しています。

エンジニアリングコードについては、プロジェクトを参照してください:https://github.com/locuslab/wanda

プルーニングされたLLaMAおよびLLaMA-2モデルのWikiTextパープレキシティ。Wandaは、重み更新を一切導入せずに、以前の最良手法であるSparseGPTと競争力のあるパフォーマンスを発揮します。

上の図を参照すると、WandaとSparseGPTはモデルプルーニングにおいて同等のパフォーマンスを示しています。

従来のプルーニング手法の欠点

  • ハードウェアサポート:非構造化スパース性によるクロックタイムの高速化の達成は、現代のハードウェアにおける既知の困難さから困難です。例えば、SparseGPTのような最近の開発では、ゼロショットプルーニングによって60%の非構造化スパース性を達成していますが、顕著なクロックタイムの高速化効果はもたらされていません。
  • デプロイメントの課題:インコンテキスト学習などのコンテキストでモデルスパース性を通じて特定の要件を満たすことは課題があります。多くの研究がタスク固有のプルーニングの有効性を示していますが、各タスクに対して異なるモデルを維持することは、LLM自体の位置づけと相反し、デプロイメントの障害となります。

結論

まとめると、SparseGPT、LLM-Pruner、Wandaなどの革新的なプルーニング手法は、高性能を維持しながら大規模モデルをプルーニングするための新しい視点と技術的手段を提供します。しかし、ハードウェアサポートや実用的なアプリケーションにおける課題に対処するためには、さらなる研究と探求が必要です。次のブログ記事では、第2部「活性化スパース性を使用して推論を高速化する方法」を探求します。

参考文献

[1]Deja Vu: Contextual Sparsity for Efficient LLMs at Inference Time

[4]The Hardware Lottery

[6]Rethinking the Role of Scale for In-Context Learning: An Interpretability-based Case Study at 66 Billion Scale

[12]SparseGPT: Massive Language Models Can Be Accurately Pruned in One-Shot

[13]LLM-Pruner: On the Structural Pruning of Large Language Models

[14]A Simple and Effective Pruning Approach for Large Language Models

[17]Learning both Weights and Connections for Efficient Neural Networks

novita.ai は、10,000モデルに対応するStable Diffusion APIおよび数百の高速で最も安価なAI画像生成APIを提供しています。🎯 最速生成2秒、従量課金制、標準画像1枚あたり最低$0.0015、独自モデルの追加可能、GPUメンテナンス不要。オープンソース拡張機能は無料で共有できます。

おすすめの記事

  1. 大規模言語モデル推論を100倍高速化する量子化手法