650 億個のパラメータを備え、8 つの GPU で大規模モデルのパラメータを微調整できます。Qiu Xipeng チームの最新論文がここにあります。

 データホエール乾物 

発行者: Qiu Xipeng チーム、編集者: Heart of the Machine

フルパラメータの微調整では推論と同じくらい多くのビデオ メモリが使用され、大規模なモデルはもはや大手テクノロジー企業にとって単なるおもちゃではありません。

650 億のパラメータを使用して、8 つの GPU ですべてのパラメータを微調整できます。大規模モデルの方向では、テクノロジー大手が大規模なモデルをトレーニングしている一方で、学術コミュニティはモデルの最適化に努めています。最近、コンピューティング能力を最適化する方法が新たな高みに達しました。

大規模言語モデル (LLM) は、自然言語処理 (NLP) の分野に革命をもたらし、創発やひらめきなどの並外れた能力を実証しました。ただし、特定の一般的な機能を備えたモデルを構築したい場合は、数十億のパラメーターが必要となり、NLP 研究の敷居が大幅に高まります。LLM モデルのチューニングのプロセスでは、通常、8×80GB GPU デバイスなどの高価な GPU リソースが必要となるため、小規模の研究室や企業がこの分野の研究に参加することが困難になります。

最近、LoRA やプレフィックスチューニングなどのパラメータ効率の良い微調整技術 (PEFT) が研究されており、限られたリソースで LLM を調整するためのソリューションを提供します。ただし、これらの方法は、パラメータ効率の高い微調整よりも強力な方法として認識されているフルパラメータ微調整に対する実用的な解決策を提供しません。

復旦大学のQiu Xipeng氏のチームが先週提出した論文「リソースが限られた大規模言語モデルのためのフルパラメータ微調整」の中で、研究者らは新しいオプティマイザであるLOw-Memory Optimization(LOMO)を提案した。

LOMO と既存のメモリ節約技術を統合することにより、新しい方法は標準的な方法 (DeepSpeed ソリューション) と比較してメモリ使用量を 10.8% 削減します。したがって、新しい方法では、それぞれ 24GB のメモリを搭載した 8 台の RTX 3090 を搭載した 1 台のマシンで 65B モデルのフルパラメータ微調整を実行できます。

5e9648a2f95c7f8280c44a8790676c77.jpeg

論文リンク: https://arxiv.org/abs/2306.09782

この研究では、著者らは LLM のメモリ使用量の 4 つの側面 (アクティベーション、オプティマイザーの状態、勾配テンソル、パラメーター) を分析し、次の 3 つの側面でトレーニング プロセスを最適化します。

  1. 私たちはオプティマイザーの機能をアルゴリズムの観点から再検討した結果、LLM の全パラメーターを微調整する際に SGD が優れた代替手段であることがわかりました。SGD は中間状態を保存しないため、これにより作成者はオプティマイザ状態の一部全体を削除できます。

  2. 新しく提案されたオプティマイザ LOMO は、勾配テンソルのメモリ使用量を O(1) に削減します。これは、最大の勾配テンソルのメモリ使用量と同等です。

  3. LOMO を使用した混合精度トレーニングを安定させるために、著者らは勾配正規化、損失スケーリングを統合し、トレーニング中に一部の計算を完全精度に変換します。

新しい手法では、メモリ使用量がパラメータ使用量にアクティベーションと最大勾配テンソルを加えたものと等しくなります。フルパラメータ微調整のメモリ使用量は極限まで高められており、これは推論の使用量に相当します。これは、順方向 + 逆方向プロセスのメモリ フットプリントが順方向プロセスのみのメモリ フットプリントよりも小さくなってはいけないためです。LOMO を使用してメモリを節約しながら、パラメータ更新プロセスは依然として SGD と同等であるため、新しい方法では微調整プロセスが影響を受けないことが保証されることは注目に値します。

この研究では LOMO のメモリとスループットのパフォーマンスを評価し、LOMO を使用すると、研究者が 8 つの RTX 3090 GPU で 65B のパラメーターを使用してモデルをトレーニングできることが示されました。さらに、ダウンストリーム タスクでの LOMO のパフォーマンスを検証するために、LOMO を適用して SuperGLUE データセット コレクション上の LLM のすべてのパラメーターを調整しました。この結果は、数十億のパラメータを使用して LLM を最適化する LOMO の有効性を示しています。

メソッドの紹介

この文書では、メソッドのセクションで LOMO (LOW-MEMORY OPTIMIZATION) について詳しく紹介します。一般に、勾配テンソルはパラメータ テンソルの勾配を表し、そのサイズはパラメータと同じであるため、メモリ オーバーヘッドは比較的大きくなります。一方、PyTorch などの既存の深層学習フレームワークは、すべてのパラメーターの勾配テンソルを保存します。この段階で、勾配テンソルを保存する理由は 2 つあります。それは、オプティマイザーの状態を計算することと、勾配を正規化することです。

この研究ではオプティマイザーとして SGD を使用しているため、勾配に依存するオプティマイザーの状態はなく、勾配正規化の代替手段がいくつかあります。

彼らは LOMO を提案しました。アルゴリズム 1 に示すように、LOMO は勾配計算とパラメーター更新を 1 つのステップで融合し、それによって勾配テンソルの保存を回避します。

以下の図は、逆伝播フェーズとパラメータ更新フェーズでの SGD と LOMO を比較しています。Pi はモデル パラメーター、Gi は Pi に対応する勾配です。LOMO は、勾配の計算とパラメーターの更新を 1 つのステップに融合し、勾配テンソルを最小限に抑えます。

77929e88083b4492c6ba3ceba3b8401a.png

LOMOに対応するアルゴリズムの擬似コード:

57e48f2efe9864e92c0baabe5f28742e.png

具体的には、この研究はバニラ勾配降下法を、cc646a6c66d3d2257ecd0b33e2be0ce2.png最初に勾配を計算し、次にパラメータを更新する 2 段階のプロセスとして表しています。フュージョンバージョンは です af8b7ec7bd96e1d8841f3220fa892b74.png 。

この研究の重要なアイデアは、勾配テンソルがメモリに保存されないように、勾配を計算するときにパラメータを即座に更新することです。このステップは、バックプロパゲーションにフック関数を挿入することで実現できます。PyTorch はフック関数を挿入するための関連 API を提供しますが、現在の API では正確な即時更新を実現できません。代わりに、この研究では最大 1 つのパラメーターの勾配をメモリに保存し、バックプロパゲーションとして各パラメーターを 1 つずつ更新します。私たちの方法では、勾配のメモリ使用量が、すべてのパラメータの勾配を保存することから、1 つのパラメータの勾配のみを保存するように削減されます。

LOMO のメモリ使用量のほとんどは、パラメータ効率の高い微調整手法の使用量と一致しており、LOMO とこれらの手法を組み合わせても、勾配メモリの使用量はわずかに増加するだけであることが示唆されています。これにより、より多くのパラメータを PEFT メソッド用に調整できるようになります。

実験結果

実験部分では、研究者らはメモリ使用量、スループット、ダウンストリームのパフォーマンスという 3 つの側面で提案された方法を評価しました。詳しい説明は省略しますが、すべての実験は 7B から 65B までの LLaMA モデルで実行されました。

メモリ使用量

研究者らはまず、さまざまな設定の下で、トレーニング中のモデルの状態とアクティベーションのメモリ使用量を分析しました。表 1 に示すように、LOMO オプティマイザーを使用すると、AdamW オプティマイザーと比較してメモリ フットプリントが大幅に削減され、102.20 GB から 14.58 GB に減少し、14.58 GB に削減されました。メモリ使用量の大幅な削減は、主に、勾配とオプティマイザの状態に必要なメモリが削減されたことに起因します。したがって、トレーニング中、メモリはほとんどがパラメータによって占有され、これは推論中のメモリ使用量と同等です。

500ee6b4cb2e27e0ffba4f38d9f2f8be.png

図 2 に示すように、AdamW オプティマイザーが LLaMA-7B トレーニングに使用される場合、メモリのかなりの部分 (73.7%) がオプティマイザーの状態に割り当てられます。AdamW オプティマイザーを SGD オプティマイザーに置き換えると、オプティマイザー状態によって占有されるメモリの割合を効果的に減らすことができ、それによって GPU メモリの使用量を削減できます (102.20GB から 51.99GB に)。LOMO を使用すると、パラメータの更新とその逆の処理が 1 つのステップにマージされ、オプティマイザ状態のためのメモリ要件がさらに排除されます。

e30f4a6cac2dd74b7a80f19b9dfc408c.png

スループット

研究者らは、LOMO、AdamW、SGD のスループット パフォーマンスを比較しました。実験は 8 つの RTX 3090 GPU を搭載したサーバーで実行されます。

7B モデルの場合、LOMO のスループットは AdamW と SGD を約 11 倍上回る大きな利点を示します。この大幅な改善は、単一の GPU で 7B モデルをトレーニングできる LOMO の機能に起因しており、これにより GPU 間の通信オーバーヘッドが削減されます。AdamW と比較して SGD のスループットがわずかに高いのは、SGD が運動量と分散の計算を除外しているためであると考えられます。

13B モデルに関しては、メモリの制約により、既存の 8 つの RTX 3090 GPU で AdamW を使用してトレーニングすることはできません。この場合、LOMO にはモデルの並列処理が必要ですが、スループットの点では依然として SGD を上回っています。この利点は、LOMO のメモリ効率の高い性質と、同じ設定でモデルをトレーニングするのに必要な GPU が 2 つだけであるという事実に起因しており、これにより通信コストが削減され、スループットが向上します。さらに、SGD は 30B モデルをトレーニングするときに 8 つの RTX 3090 GPU でメモリ不足 (OOM) に悩まされますが、LOMO は 4 つの GPU のみで良好にパフォーマンスします。

最後に、研究者らは 8 つの RTX 3090 GPU を使用して 65B モデルのトレーニングに成功し、4.93 TGS のスループットを達成しました。このサーバー構成と LOMO を使用すると、1,000 個のサンプル (各サンプルには 512 個のトークンが含まれる) でのモデルのトレーニング プロセスに約 3.6 時間かかります。

下流のパフォーマンス

大規模な言語モデルの微調整における LOMO の有効性を評価するために、研究者らは広範な一連の実験を実施しました。彼らは LOMO を他の 2 つの方法と比較しました。1 つは微調整を必要としないゼロショットであり、もう 1 つは現在非常に人気のあるパラメーター効率の高い微調整技術である LoRA です。

82398bce7049fbe1cfa5326da4104bfc.png

表 3 の結果は次のことを示しています。

  • LOMO のパフォーマンスは Zero-shot よりも大幅に優れていました。

  • 通常、LOMO はほとんどの実験で LoRA よりも優れたパフォーマンスを発揮します。

  • LOMO は、650 億のパラメーターを持つモデルに効率的に拡張します。

LOMO と LoRA は本質的に互いに独立しています。このステートメントを検証するために、研究者らは LLaMA-13B を使用して BoolQ および MultiRC データセットで実験を実施しました。結果を図 3 に示します。

彼らは、LoRA の結果がどれほど高くても、LOMO が一貫して LoRA のパフォーマンスを向上させることを発見しました。これは、LOMO と LoRA で採用されているさまざまな微調整方法が補完的であることを示しています。具体的には、LOMO は事前トレーニングされたモデルの重みを微調整することに重点を置き、LoRA は他のモジュールを調整します。したがって、LOMO は LoRA のパフォーマンスに影響を与えず、代わりに下流タスクのモデル調整を容易にします。

e33be65ab5952381ab6a9df305ff9caa.png

詳細については元の論文を参照してください。

c6a5d5690607d2465d098f7fb2323bc5.png

乾物学習、3回分

おすすめ

転載: blog.csdn.net/Datawhale/article/details/131356015