Hugging Face PEFT 新しい LoRA マージング手法
Hugging Face は PEFT ライブラリにいくつかの新しいマージング手法を統合し、開発者が同じベースモデルから派生した複数の LoRA アダプタを組み合わせられるようにしました。このアップデートにより、モデルの能力をオンザフライで合成でき、単一のマージされたアダプタが複数の専門アダプタの知識を組み合わせたタスクを実行できるようになります。
サポートされている LoRA マージング手法
PEFT は現在、さまざまなマージングアルゴリズムをサポートしており、各アルゴリズムはアダプタの重み(行列 $A$ と $B$)を異なる方法で処理して、性能とメモリ使用量のバランスを取ります。
連結 (cat)
連結は LoRA アダプタの正確な重み付きマージです。参加するアダプタの $A$ と $B$ 行列を連結し、異なるランクを許容します。この手法は通常優れた結果をもたらしますが、多数のアダプタを組み合わせるとアダプタサイズが増大し、メモリ不足(OOM)エラーが発生する可能性があります。
線形/タスク算術 (linear)
"Editing Models with Task Arithmetic" 論文に基づく手法で、個々の $A$ と $B$ 行列の重み付き和を計算します。このアプローチでは、すべての LoRA アダプタが同じランクである必要があります。
特異値分解 (svd)
SVD は積 $BA$(デルタ重み)をタスク重みとして扱い、マージされたデルタ重みを計算した後、SVD を適用して新しい $A$ と $B$ 行列を近似します。この手法は異なるランクのアダプタをサポートし、結果のマージドアダプタのランクをユーザーが指定できますが、GPU メモリを多く消費します。
TIES (ties, ties_svd)
TIES(TRIM, ELECT SIGN & MERGE)はモデルをマージする際の干渉を解消します。タスク重みの最小値(density 割合に基づく)を剪定し、total の大きさまたは frequency の符号頻度に基づく多数決符号マスクを計算し、非重複マージを実行します。標準版と SVD 版の両方が利用可能です。
DARE (dare_linear, dare_ties, dare_linear_svd, dare_ties_svd)
DARE は 1-density 割合に基づいてタスク重みをランダムに剪定し、残りの重みを 1/density で再スケールします。DARE は Linear/Task Arithmetic または TIES 手法と組み合わせて使用できるプラグインです。
マグニチュードプルーニング (magnitude_prune, magnitude_prune_svd)
この手法は density 割合に基づいてタスク重みの最小値を剪定し、残りのタスクテンソルの重み付き和を実行します。標準版と SVD 版の両方があります。
実装と機能
ユーザーは PEFT の add_weighted_adapter() クラスメソッドを使用してこれらの手法を実装できます。
専門的な機能の組み合わせ
アダプタをマージすることで、個々のアダプタだけでは対応できなかったユースケースをモデルがサポートできるようになります。たとえば、"メンタルヘルス" アダプタと "Hinglish"(ヒンディー語‑英語)言語アダプタを組み合わせると、モデルは Hinglish で具体的なメンタルヘルスの提案を提供できるようになります。一方、個別のアダプタは英語で提案するか、Hinglish の言語スタイルだけを提供できるに過ぎません。
テキストから画像生成への拡張
これらのマージング手法は 🤗Diffusers ライブラリを介したテキスト‑ツー‑イメージ生成にも適用できます。LoRA チェックポイントから PeftModel を取得し、add_weighted_adapter() を使用することで、異なるスタイルやテーマの LoRA(例: "toy-face" LoRA と "Pixel-Art" LoRA)を組み合わせ、両方の特徴をブレンドした画像を生成できます。
技術的観察と推奨事項
Hugging Face のテストに基づき、マージング手法を選択する際の以下のガイドラインが推奨されます。
- 開始点: 多くのシナリオで最良の結果が得られる
cat手法から始めます。ただし、アダプタ数が少ない場合に限ります。 - 代替線形手法:
catが不十分な場合は、順にlinear、magnitude_prune、dare_linearを試します。magnitude_pruneとdare_linearでは、density値を 0.7〜0.8 の範囲に設定することを推奨します。 - TIES 設定:
tiesを使用する際は、majority_sign_method="frequency"がデフォルトのtotalよりも良い結果を示すことが多いです。開始時の推奨densityは 0.5 です。 - SVD バリアント: ランクが異なる Stable Diffusion LoRA アダプタを扱う場合は
*svd系列の手法を使用します。SVD は計算コストが高く、GPU メモリも多く必要です。 - DARE パフォーマンス:
dare_tiesバリアントは良好な結果を出さないことが観測されています。