ファインチューニングLLM パラメータ効率の改善 (PEFT) — LoRA および QLoRA — パート1

美容とファッションのエキスパートがおすすめする、ファインチューニングLLM パラメータの効率改善方法(PEFT)〜LoRAとQLoRA〜 パート1

AIと自然言語処理(NLP)の絶え間なく進化する世界では、Large Language Models(LLMs)とGenerative AIは、さまざまなアプリケーションで強力なツールとなっています。これらのモデルから期待される結果を得るためには、Prompt Engineering、Fine-Tuning、Creating a new modelという3つのアプローチが広く分類され、一つのレベルから次のレベルに進むにつれて、リソースやコストの要件が著しく増加します。

本ブログ記事では、これらのアプローチを探求し、高いパフォーマンスを維持しながら最小限のインフラストラクチャでモデルをFine-Tuningするための効率的な手法であるParameter Efficient Fine-Tuning(PEFT)に焦点を当てます。

既存モデルを使用したPrompt Engineering

Large Language Modelsから期待される結果を実現するためには、丁寧なプロンプトエンジニアリングが必要です。このプロセスでは、適切なプロンプトと入力を作成してモデルから期待される応答を引き出すことになります。プロンプトエンジニアリングは、一般的な応答のみが必要なさまざまなユースケースにおいて、特に重要なテクニックです。

新しいモデルを作成する

最も高いレベルでは、新しいモデルを作成するには、特定のタスクやドメインに合わせてモデルをゼロからトレーニングする必要があります。このアプローチは最も高度なカスタマイズを提供しますが、著しく計算パワー、大量のデータ、時間を要求します。

既存モデルのFine-Tuning

モデルの適用領域に特化したユースケースでモデルの適応が必要な場合、Fine-Tuningは不可欠です。Fine-Tuningを使用することで、既存の事前学習済みの基盤モデルを活用し、特定のタスクやドメインに適応させることができます。ドメイン固有のデータでモデルをトレーニングすることで、特定のタスクにおいて高いパフォーマンスを発揮するようにカスタマイズすることができます。

ただし、このプロセスはリソースを多く消費するため、トレーニングの一環として数百万のパラメータを変更する必要があります。モデルのFine-Tuningには大量のトレーニングデータ、膨大なインフラストラクチャ、労力が必要です。

LLMsの完全なFine-Tuningのプロセスでは、事前トレーニングで得た知識が失われる「災害的忘却」のリスクがあります。

さまざまなドメイン固有のタスクに対して単一のモデルに完全なFine-Tuningを適用すると、特定のタスクに適した大規模なモデルが作成され、モジュール性が欠けることが多くなります。必要なのは、すべてのパラメータを変更せずに、インフラストラクチャリソースやデータを少なく要求するモジュラーアプローチです。

それには、Parameter Efficient Fine Tuning(PEFT)などの手法があります。これらの手法を使用すると、最適なリソースとコストでモジュラーなFine-Tuningを実行することができます。

Parameter Efficient Fine Tuning(PEFT)

PEFTは、広範なリソースとコストを必要とせずにモデルをFine-Tuningするための手法です。PEFTは、モデルの適用領域に特化したタスクを扱う際に適しています。PEFTを使用することで、事前学習済みモデルから貴重な知識を保持しながら、少ないパラメータでターゲットのタスクに適応するバランスを取ることができます。Parameter efficient fine-tuningを実現するさまざまな方法があります。その中でも、Low-Rank Parameters(LoRA)とQLoRAが最も広く使用されている方法です。

Low-Rank Parameters

これは、最も広く使用されている手法の1つで、一連のパラメータが低次元空間でモジュール的にネットワークに追加されます。ネットワーク全体を修正するのではなく、これらのモジュラーな低ランクネットワークのみを修正して結果を得ます。

次に、LoRAとQLoRAという最も人気のある手法の詳細に深入りしてみましょう。

Low-Rank Adaptation(LoRA)

Low-Rank Adaptationは、ドメイン固有のタスクに対してモデルをFine-Tuningするためのモジュラーアプローチを提供し、転移学習の能力を提供します。LoRA技術は、リソースを少なく使用しメモリ効率も良いです。

以下の図では、次元/ランク分解を示しており、メモリのフットプリントを大幅に削減しています。

私たちは、既存のFeed-ForwardネットワークにLoRAアダプタを追加することでこれを適用します。元のFeed-Forwardネットワークは凍結し、トレーニングにはLoRAネットワークを使用します。詳細については、以下の図を参照してください。

  • LoRAは、既存のニューラルネットワークレイヤーを強化し拡張するアダプタとして実装することができます。これにより、オリジナルのパラメータ(重み)は凍結状態に保たれます。学習可能なパラメータは、本体のネットワークとは次元(dxrおよびrxd)およびランクが異なる低ランク重みベクトルを使用します。ここで、’d’はオリジナルの凍結されたネットワークパラメータベクトルの次元を表し、’r’は選択された低ランクまたは低次元を示します。’r’の値は常に小さく、’r’が小さいほど、モデルのトレーニングプロセスが迅速にかつ簡略化されます。’r’の適切な値を決定することは、LoRAにおいて重要な意思決定です。より低い値を選択すると、モデルのトレーニング時間とコストが短縮されますが、最適な結果が得られない場合があります。逆に、’r’の値を高くすると、トレーニング時間とコストは増えますが、より複雑なタスクを処理できるモデルの能力が向上します。
  • オリジナルモデルの事前学習されたパラメータ(W)は凍結されます。トレーニング中はこれらの重みは変更されません。
  • 新しい一連のパラメータがネットワークWAおよびWBに同時に追加されます。これらのネットワークは低ランクの重みベクトルを使用し、これらのベクトルの次元はdxrおよびrxdで表されます。ここで、’d’は元の凍結されたネットワークパラメータベクトルの次元を示し、’r’は選択された低ランクまたは低次元を示します。’r’の値は常により小さく、’r’がより小さいほど、モデルのトレーニングプロセスが迅速かつ簡略化されます。’r’の適切な値を決定することは、LoRAにおいて重要な意思決定です。より低い値を選択すると、モデルのトレーニング時間とコストを節約できますが、最適な結果が得られない可能性があります。一方、より高い値の’r’を選択すると、トレーニング時間とコストが増えますが、より

    このアプローチがメモリフットプリントの削減やインフラ要件の最小化にどのように貢献するかを探ってみましょう。フィードフォワードネットワーク内に512×512のパラメータ行列があるシナリオを考えると、合計262,144のパラメータがトレーニングを受ける必要があります。これらのパラメータをトレーニングプロセス中に凍結し、ランク2のLoRAアダプタを導入すると、以下の結果が得られます:WAには512*2のパラメータがあり、WBにも512*2のパラメータがあるため、合計2,048のパラメータになります。これらはドメイン固有のデータでトレーニングを受ける特定のパラメータです。これは計算効率の大幅な向上を示し、バックプロパゲーションプロセス中に必要な計算回数を大幅に減らす重要な機構です。このメカニズムは加速トレーニングの実現に重要な役割を果たします。

    このアプローチの最大の利点は、トレーニングされたLoRAアダプタを独立して保持し、個別のモジュールとして使用できることです。このようにドメイン固有のモジュールを構築することで、高いモジュラリティを実現することができます。また、元の重みを変更しないことで、壊滅的な忘却の問題を回避することにも成功しています。

    では、QLoRAを使用して最適化をさらに向上させるために実装できる追加の強化策について詳しく見てみましょう。

    量子化された低ランク適応(QLoRA)

    QLoRAは、高解像度のデータ型であるFloat32からint4などの低解像度のデータ型に重み値を量子化することで、効率を向上させるためのLoRAを拡張します。これにより、メモリ要件が削減され、計算速度が向上します。

    QLoRAはLoRAの上にもたらされる3つの主要な最適化があり、QLoRAを最高のPEFT手法の一つにしています。

    4ビットNF4量子化

    4ビットNormalFloat4は、重みを保存するために使用できる最適化されたデータ型であり、メモリフットプリントをかなり削減します。4ビットNormalFloat4量子化は3つのステップで行われます。

    • 正規化と量子化:正規化と量子化の一環として、重みはゼロ平均と一定の単位分散に調整されます。4ビットのデータ型は16個の数値しか格納することができません。正規化の一環として、重みはこれらの16個の数値にマッピングされ、ゼロ中心の分布になり、重みの代わりに最も近い位置が保存されます。以下に例を示します

    たとえば、値が0.2121のFP32重みがあるとします。-1から1までの範囲を4ビットに分割すると、次の番号の位置が得られます。

    0.2121は0.1997に最も近いため、10番目の位置です。0.2121のFP32を保存する代わりに、10を保存します。

    一般的な式:

    int4Tensor = roundedValue(totalNumberOfPositions/absmax(inputXTensor))                     * FP32WeightsTensorIn the above example totalNumberOfPositions = 16

    totalNumberOfPositions/absmax(inputXTensor)は量子化定数と呼ばれます

    明らかに、高解像度のデータ型であるFP32から低解像度のデータ型に変換するとデータの損失が生じます。ただし、入力テンソルに外れ値がない場合は、損失は大きくありません。外れ値があり、absmax()に影響を及ぼす可能性がある場合は、一般的に重みをより小さなブロックで独立して量子化し、外れ値を正規化します。

    • 逆量子化:値を逆量子化するためには、正確に逆の操作を行います。
    dequantizedTensor = int4Tensor                     /roundedValue(totalNumberOfPositions/absmax(inputXTensor))In the above example totalNumberOfPositions = 16

    4ビットNormalFloat量子化は、元のモデルの重みに適用されますが、LoRAアダプタの重みはすべてFP32となり、すべてのトレーニングはこれらの重みで行われます。すべてのトレーニングが完了した後、元の重みは逆量子化されます。

    ダブル量子化

    ダブル量子化は、量子化定数を量子化することでメモリフットプリントをさらに削減します。前の4ビットFP4量子化ステップでは、量子化定数を計算しました。それ自体も効率を向上させるために量子化できます。これがダブル量子化の役割です。

    ブロックごとに量子化を行うため、外れ値を避けるために、通常1ブロックで64個の重みがあり、1つの量子化定数があります。これらの量子化定数はさらに量子化されてメモリのフットプリントを削減することができます。

    たとえば、1ブロックあたり64個のパラメータ/重みをグループ化し、各量子化定数が32ビット(FP32)を使用するとします。平均すると、パラメータごとに0.5ビット追加されます。これは、典型的な1ミリオンパラメータモデルでは少なくとも500,000ビットに相当します。

    ダブル量子化では、これらの量子化定数に量子化を適用し、メモリ使用量をさらに最適化します。256個の量子化値をグループ化して8ビットの量子化を適用することができます。パラメータごとに約0.127ビットを実現でき、1ミリオンパラメータモデルの値を125,000ビットにまで減らすことができます。

    計算は次のとおりです:256個のブロック内に64個の重みがあり、それは32ビットです。32/(64*256)であり、0.001953125です。

    64個の重みには8ビットあり、これは8/64です。つまり0.125です。

    合計すると0.125+0.001953125であり、おおよそ0.127です。

    統一メモリページング

    上記の技術と組み合わせて、QLoRAはnVidiaの統一メモリ機能を利用し、GPUのメモリが不足した場合にGPUからCPUへのシームレスなページ転送を行い、GPUの突然のメモリスパイクを管理し、メモリオーバーフロー/オーバーランの問題を解決します。

    LoRAとQLoRAは、パラメータ効率の高いファインチューニングの中で最も新興で広く使用される技術です。

    次のパートでは、QLoRAを実装します。それまで、LLMsを楽しんでください。

    お役に立てれば幸いです。ご意見やフィードバックをお待ちしています。

    では、さようなら…

    We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

    Share:

    Was this article helpful?

    93 out of 132 found this helpful

Discover more