Back to Articles

Is LoRA the best PEFT technique?

パラメータ効率の良い方法でモデルをファインチューニングする予定があるなら、LoRAを超えて考える

オープンなモデルを自分のデータでファインチューニングしたい場合、おそらくパラメータ効率の良いファインチューニング、略してPEFTに興味があるでしょう。この用語は、モデルのファインチューニングに必要なメモリ要件を大幅に削減する手法を表します。これらの手法は数十種類ありますが、ほとんどすべての人が「LoRA」と呼ばれる手法を選んでいます。このブログ記事では、LoRAが本当に最善の選択肢なのか、情報に基づいた判断を下すために利用できるツール、そしてLoRAを超えて視野を広げることでどのようにメリットが得られるかを探ります。

PEFTとは何か、いつ必要になるのか

無数のオープンなモデルが利用可能ですが、ユースケースに十分対応できない場合がよくあります。プロンプティングが役立つこともありますが、通常は十分ではありません。新しいモデルをゼロからトレーニングするのではなく、既存のモデルをファインチューニングすることを検討すべきです。

しかし、ファインチューニングはメモリを大量に消費します。一般的に、モデル全体を複数回格納できる十分なメモリが必要です。量子化はモデルのメモリフットプリントを削減しますが、量子化されたモデルは直接ファインチューニングできません。そこで、ファインチューニングに必要なメモリを削減するための手法群が生まれ、「パラメータ効率の良いファインチューニング」、略してPEFTと呼ばれています。

PEFTを使用すると、そのメモリのわずかな割合だけでモデルをファインチューニングでき、量子化されたモデルでもファインチューニング可能です。また、チェックポイントサイズの小型化、破滅的忘却への耐性の向上、同じベースモデルから複数のファインチューニングをサーブできる能力など、他の利点も提供します。

Hugging Faceでは、統一されたAPIの背後で多くのPEFT手法を実装し、エコシステム(例:TransformersDiffusers)とよく統合されるPEFTライブラリを開発しています。また、複数の量子化手法もサポートしており、パラメータ効率の良いファインチューニングのさらなるアクセシビリティを実現しています。PEFTは、自分のデータでファインチューニングしたい場合でも、新しいPEFT手法を研究している場合でも、良い出発点を提供します。

LoRA:ファインチューニング手法の女王 👑

初期に登場し、非常に効果的であることが証明されたパラメータ効率の良いファインチューニング手法の1つに、「Low Rank Adaptation」、略して「LoRA」と呼ばれるものがあります。これは、ベースモデルの上に少数のパラメータを追加し、ベースモデルの重みを凍結し、それらの少数のパラメータのみをトレーニングすることで機能します。

すべてのPEFT手法の中で、LoRAが圧倒的に最も人気があります。いくつかの推定値をご紹介します:

  • Hugging Face Hub上の20,834件のモデルカードのうち、正確に1つのPEFT手法に言及しているサンプルでは、20,509件がLoRAに言及しています(98.4%)。
  • 画像生成におけるPEFT手法の人気を外部サイトでも確認しました。10,000件のチェックポイントのサンプルを使用したところ、7,111件がLoRAでした。他に特定されたPEFT手法はLoCon(363件)とDoRA(11件、おそらくLoRAのバリアント)でした。つまり、PEFTチェックポイントの95.0%がLoRAです。
  • GitHubでコードスニペットfrom peft import <PEFT CONFIG>を検索したところ(GHクエリの例)、結果の71.3%がLoRAでした。次点はLoHa(3.7%)とAdaLoRA(3.5%)でした。

これらの推定値は完全ではありませんが、それでもLoRAが間違いなく最も一般的なPEFT手法であるという結論に至ります。

これは、LoRAが誰にとっても最も効果的に機能し、その使用統計に反映されていることを意味するかもしれません。しかし、もう一つの可能性もあります:LoRAは初期に登場した人気のPEFT手法の1つでした。そのため、その使用が自己強化された可能性があります。LoRAは可視性が最も高く、チュートリアルや例の数が最も多く、下流パッケージでのサポートが最も充実しています。つまり、LoRAの人気は自己増殖しているのです。

これらすべてが、疑問を投げかけます:より良い手法を避けることで、パフォーマンスを犠牲にしているのではないか?結局のところ、数え切れないほどの研究者が、自分たちの手法がLoRAを上回ると主張する論文を発表しています。それだけでも、LoRAを超えて新しい手法を採用すべき十分な証拠ではないでしょうか?

論文の結果に基づいて適切なPEFT手法を選択することは問題がある

LoRA以外のファインチューニング手法を調査する論文は数十件あります。PEFTライブラリだけで、執筆時点で40以上の異なるPEFT手法があり(PEFT手法のバリエーションを数えるとさらに多くなります)、そのほぼすべてについて、研究者が自分の手法がベンチマークでLoRAを上回ると主張しています。

これらの主張の問題点は、研究者が既存のベンチマークを上回る結果を提供するようプレッシャーを受けていることです。悪意がなくても、これにより結果にバイアスがかかる可能性があります。例えば、研究者が提案する手法に比べて代替手法のチューニングに費やす時間が少なくなるなどです。ある研究では、学習率を調整することで、LoRAが一見優れているとされるPEFT手法と同等に機能することがわかりました。

もう一つの複雑さは、各論文が比較対象とするPEFT手法のセットや実行するベンチマークのセットが異なることです。同じ手法が同じベンチマークで比較されたとしても、コードが利用できないか自分で実行しにくいことが多く、結果の再現が困難です。

全体として、論文の結果を確認するだけで、自分に最適なPEFT手法を見極めるのは困難です。そのため、デフォルトのLoRAを選んでしまいがちです。

PEFTにおけるベンチマークへのアプローチ

Hugging Faceでは、ユーザーがどのPEFT手法を使用するかを情報に基づいて決定できるように支援する方法を考えました。PEFTライブラリでは、すでに多くのPEFT手法を実装し、同じAPIで公開しています。次のステップは、議論されている問題に光を当てるベンチマークを提供することです。

すでに、LLMを数学データセットでファインチューニングするベンチマークをしばらく前から用意しています。このベンチマークでは、LLMを取り上げ、数学的質問に対する結果を生成するための連鎖的思考推論でファインチューニングします。ベースモデルは指示ファインチューニングされていないものを使用します。このベンチマークは、モデルが数学的推論を実行し、生成された出力を期待される形式に調整できるかどうかを確認します。

別のモダリティでの調査結果を拡張するため、画像生成ベンチマークも追加しました。これは、モデルが新しい概念(猫のぬいぐるみ)を学習し、既存の概念を忘れずに新しいコンテキストで生成できるかどうかをテストします。

すべてのPEFT手法は、まったく同じ条件で評価されます:同じベースモデル、同じデータセット、同じトレーニングおよび評価コード、同じハードウェア。異なるユーザーには異なるニーズがあるため、テストパフォーマンスだけでなく、VRAM使用量、忘却/ドリフト、実行時間、チェックポイントサイズなどのメトリクスも追跡します。結果はコンシューマーハードウェアで実行できるように設計されており、新しい実験を追加するには、新しいPEFT設定を追加してスクリプトを実行するだけです。

私たちはすべてのPEFT手法を平等な立場で比較し、競争関係にないため、これらのベンチマークは異なるPEFT手法の性能を客観的に示すことができると信じています。独自のデータセットがある場合、同様のアプローチを取り、PEFTライブラリを活用して複数のPEFT手法を評価することをお勧めします。

私たちの発見:LoRAはうまく機能するが、必ずしも最善の選択肢ではない

ベンチマークの実行を終えたところ、LoRAはうまく機能するものの、他のPEFT手法が1つまたは複数の軸でLoRAを上回る可能性があり、したがって検討すべきであることがわかりました。LoRAと他の5つのPEFT手法の性能を比較した下の画像をご覧ください。

benchmark-highlights.png
ベンチマークの一部の結果。テストパフォーマンスとメモリ使用量に関しては、LoRAが必ずしも最善の選択肢とは限りません。左:MetaMathQAベンチマーク、右:画像生成ベンチマーク。最新の結果については、Spaceをご確認ください。

上記の結果を解釈する1つの方法は、トレードオフの観点で考えることです。例えば、テストセットでのモデルの性能と、トレーニングに必要なメモリ量の関係です。PEFT手法がこれらの2つのメトリクスの両方で他の手法に同時に上回られない場合、それはPareto Frontier上にあります。言い換えれば、テスト精度を向上させるにはより多くのメモリが必要で、メモリ効率を向上させるには精度を犠牲にする必要があります。

LLM Mathデータセットベンチマークの結果を詳しく見てみましょう。テスト精度とメモリ量の関係では、LoRAは確かにPareto Frontier上にあります。53.2%のテスト精度を達成し、ピーク時に22.6 GBのVRAMを必要とします。しかし、他のPEFT手法もPareto Frontier上にあります。例えば、BEFTは32.9%のテスト精度を達成し、最大で20.2 GBのメモリしか必要としません。一方、Lilyは54.9%のテスト精度を達成しますが、25.6 GBのメモリを必要とします。どちらが重要かによって、LoRAが最善のトレードオフではないと結論づけるかもしれません。

metamath-pareto.png
meta-llama/Llama-3.2-3Bをファインチューニングし、GSM8Kで評価した際のテスト精度とメモリ使用量のトレードオフ。LoRAは良好な結果を示すが、他のPEFT手法も同様に良好な結果を示す。

LoRAがこのタスクで良好な結果を示しているとしても、標準のLoRAについて話しているわけではないことに注意してください。一方では、ランク安定化初期化を伴うLoRAがあり、これはLoRAの寄与をデフォルトの初期化とは異なる方法でスケーリングする手法で、非常に良好なテスト精度(53.2%)を提供します。他方では、LoRA-FAがあり、これはLoRAに特化したオプティマイザを使用し、LoRA重みの一部を凍結するため、よりメモリ効率が良い(20.2 GB)です。標準のLoRAは22.5 GBのメモリで48.1%の精度しか達成できず、代替手法を優先すべきです。

次に、画像生成ベンチマークを見てみましょう。Hugging Face Spaceで「Select Task」ドロップダウンから「image-gen」を選択すると、結果が表示されます。タスクの目標は、新しい概念(猫のぬいぐるみ)を学習し、それを新しいプロンプトに一般化することです。

cat-plushy-lora.png
FLUX.2-klein-base-4BでLoRAファインチューニングして生成された猫のぬいぐるみ画像。

このタスクでは、主なメトリクスは「dino similarity」で、生成された画像がホールドアウトテストデータセットの画像にどれだけ類似しているかを測定します。値が高いほど良いです。常に、メモリ使用量にも注意を払います。これら2つのメトリクスのPareto Frontierをプロットすると、LoRAはこのフロンティアを下回っていることがわかります。具体的な数値を見てみましょう:LoRAは0.697の類似度スコアを達成し、OFTは0.708を達成します。メモリ量では、LoRAは9.97 GBを必要とし、OFTは9.01 GBを必要とします。したがって、OFTはこれらのメトリクスでLoRAを厳密に上回ります。

image-gen-pareto.png
FLUX.2-klein-base-4Bをファインチューニングし、テストセットで評価した際のテスト精度とメモリ使用量のトレードオフ。OFTなどの他のPEFT手法は、テストスコアとメモリ使用量の両方でLoRAを上回る。

もちろん、Pareto Frontierに近い他のPEFT手法も確認すべきです。メトリクスはランダム性により小さな変動を受ける可能性があるためです。また、他のメトリクスも探求すべきです:実行時間のパフォーマンスが重要ですか、それともチェックポイントのサイズが重要ですか?ドロップダウンから関連するメトリクスを選択すると、画像が大幅に変わる可能性があります。画像生成ベンチマークでは、ファインチューニングされたモデルの能力の感覚を得るために、生成されたサンプル画像を必ず確認してください。

制限事項

反論:しかし、ベンチマークは1つの手法を他の手法より優位に扱っている!

PEFTベンチマークに対する批判として、ハイパーパラメータの選択が1つの手法を他の手法より優位に扱う可能性があるというものがあります。これは事実です。このように多数の手法で徹底的かつ公平なハイパーパラメータ探索を行うことは困難です。しかし、誰でも簡単にPEFTに独自の実験を貢献できます:特定のPEFT手法が異なるハイパーパラメータを選択することで改善できると考える場合、PRを作成してください。その方法に関する手順を追加しました。同様に、完全に新しいベンチマークを貢献したい場合は、アイデアを議論するためにお問い合わせください。

ベンチマークのもう一つの問題は、特定のPEFT手法の能力を完全に反映していない可能性があることです。私たちは、さまざまな次元で手法を比較し、これらのトレードオフに基づいて最適な手法を発見できるようにしています。しかし、この方法ですべての側面を捉えることは不可能です。例えば、Cartridgesと呼ばれるPEFT手法は長いプロンプトを圧縮するために開発されましたが、これはベンチマークでは測定されていません。他にも選択に影響を与える要因があります:

  • PEFT手法によっては、特定のレイヤータイプのみを変更できる。
  • すべてのPEFT手法が量子化されたベースモデルをサポートしているわけではない(ただし、PEFTでは積極的にサポートを拡大しています)。
  • 一部のPEFT手法はアダプタのマージを許可して実行時のオーバーヘッドを削減しますが、他の手法は許可しません。

ベンチマークは調査を行う責任を完全に免除するものではありませんが、合理的な指針となります。

peft-shop.png
画像をクリックしてPEFTショップを閲覧し、自分に最適なPEFT手法を見つけてください。ベンチマークメトリクスだけでなく、量子化サポートなどの機能による閲覧も可能です。

反論:しかし、llama.cpp/vLLM/...はLoRAしかサポートしていない

LoRA以外のPEFT手法を使用する際の制限は、LoRAが得ている下流パッケージでの幅広いサポートを得られないことです。例えば、vLLMを使用してモデルをサーブする場合、LoRAチェックポイントのみをロードできます。幸いなことに、PEFTは現在、他のアダプタをLoRAに変換する機能をサポートしています。これにより、LoRA以外のチェックポイントをLoRAに変換し、vLLMや他の下流パッケージで使用できます。

これをテストするため、GraLoRA手法を使用した画像アダプタをLoRAチェックポイントに変換しました。変換後のテストスコアはほぼ同一でした(類似度0.702 → 0.694、0.260 → 0.269)。以下はプロンプト「sks cat at the beach」のテスト画像です:

現時点では、すべてのPEFT手法に対する変換を実装していませんが、需要があればサポートを拡大する予定です。

結論とあなたができること

PEFTパッケージの作業中に、他のPEFT手法が潜在的に優れているにもかかわらず、LoRAが大きな勢いを持っていることに気づきました。そこで、さまざまなPEFT手法が異なるメトリクスでどれだけうまく機能するかをより客観的に示すベンチマークをPEFTに追加することにしました。

得られた結果から、LoRAは悪い選択肢ではないと自信を持って結論づけられますが、より良い選択肢が存在する可能性があります。特に画像生成ベンチマークを確認すると、LoRAは他の手法に上回られています。メトリクス以外にも、適切なPEFT手法を選択する際には他の考慮事項を考慮する必要があることを議論しました。しかし、その場合でも、LoRAと他の手法の間の機能パリティを実現するために、PEFTをさらに推進しています。

私たちの旅はまだ終わっていません。既存のベンチマークを拡張・改善し、将来的にはさらに多くのベンチマークを追加する予定です。コミュニティが貢献しやすいようにしたので、貢献したい場合は、PEFTリポジトリにissueを開いて、どのように貢献したいかを教えてください。

この記事から1つだけ持ち帰っていただきたいことは、PEFT手法を選択する際にLoRAを自動的なデフォルトにすべきではないということです。PEFTが提供する統一されたAPIにより、1つのPEFT手法から別の手法に切り替えるのは、コード内の1つの設定を切り替えるのと同じくらい簡単です。LoRAを使い続ける場合でも、PEFTでサポートされているすべてのバリエーションを確認してください:DoRA、rs-LoRA、LoRA-FAなどです。これらの他の手法を試してみると、驚くほど満足できるかもしれません。

例:PEFTを使用してLoRAからOFTに切り替える:

from transformers import AutoModelForCausalLM
-from peft import LoraConfig, get_peft_model
+from peft import OFTConfig, get_peft_model

base_model = AutoModelForCausalLM.from_pretrained("meta-llama/Llama-3.2-3B", dtype="bfloat16")
-config = LoraConfig(target_modules=["q_proj", "v_proj"])
+config = OFTConfig(target_modules=["q_proj", "v_proj"])
model = get_peft_model(base_model, config)