PEFT documentation
RoAd
RoAd
RoAdは、隠れ次元のペアに対して適用される少数の2×2回転行列(および任意のスケーリング係数)を学習することで、大規模言語モデルを適応させるパラメータ効率の良いファインチューニング手法です。RoAdは、学習可能なパラメータが0.1%未満でありながら、他のPEFT手法と比較して同等以上のパフォーマンスを実現します。LoRAのバッチ化された低ランク更新とは異なり、RoAdのスパーズな回転は単純な要素ごとの操作に再定式化されるため、同一バッチ内で異質なリクエスト(つまり、複数のアダプタを同時にサービングすること)を処理する場合に、サービングスループットが大幅に向上します。さらに、RoAdは分散型インターチェンジ介入フレームワークにシームレスに統合でき、そのスパーズな2D回転を、隠れ表現の学習済み部分空間内におけるタスク固有の介入として解釈します。これらの直交部分空間を組み合わせることで、多言語対応や指示追従などの複数のタスク固有の動作を、追加のファインチューニングなしにマージでき、LLMにおけるモジュール性があり解釈可能な適応を可能にします。
RoAdによるファインチューニングは、LoRAや同様の手法と比較して、1e-3程度のより高い学習率を必要とします。現在、RoAdは線形層のみをサポートしており、bitsandbytesで量子化されたモデル(4ビットまたは8ビット)に使用できます。
同じバッチ内で異なるRoAdアダプターを使用して推論を実行するには、同じバッチ内で異なるLoRAアダプターを使用して推論を実行するを参照してください。
ベンチマーク概要
API
RoadConfig
class peft.RoadConfig
< source >( task_type: Optional[Union[str, TaskType]] = Nonepeft_type: Optional[Union[str, PeftType]] = Noneauto_mapping: Optional[dict] = Nonepeft_version: Optional[str] = Nonebase_model_name_or_path: Optional[str] = Nonerevision: Optional[str] = Noneinference_mode: bool = Falsevariant: Union[str, RoadVariant] = 'road_1'group_size: int = 64init_weights: bool = Truetarget_modules: Optional[Union[list[str], str]] = Nonemodules_to_save: Optional[list[str]] = None )
パラメータ
- variant (Union[
RoadVariant,str]) — 使用する Road モデルのバリアントです。road_1、road_2、または road_4 のいずれかを選択できます。詳細については、論文を参照してください。- road_1: すべての要素ペアに対して同じスケールと角度を使用します。 このバリアントはパラメータ数が最も少なく、RoAdが適用される各レイヤーについて、出力の隠れサイズに等しい数のパラメータを保存します。
- road_2: 各要素に同じスケールと角度を使用します。 このバリアントは、road_1と比較してパラメータ数が2倍です。
- road_4: 各要素に対して2つの異なるスケールと角度を使用します。 このバリアントは、road_1と比較してパラメータ数が4倍です。
- group_size (
int) — グループサイズは、回転のために要素を2次元ベクトルとしてグループ化する際のサイズを定義します。各グループ内では、要素0が要素group_size/2とペアになり、次に要素1が要素group_size/2+1とペアになり、以下同様に続きます。要素は順序が定められていないため、モデルの性能には影響しませんが、VLLMなどで使用する場合、推論速度に多少の影響があります。最速の速度を得るには、グループサイズを少なくとも32または64(デフォルト値)にすることを推奨します。モデルの隠れ層サイズ(テンソル並列性を使用する場合、パーティションごとの隠れ層サイズ)がgroup_sizeで割り切れる必要があるため、非常に小さいモデルでは、このパラメータを小さくする必要がある場合があります。 - init_weights (
bool) — RoAdの重みの初期化を実行するかどうか。 - target_modules (
Optional[Union[List[str], str]]) — アダプタを適用するモジュールの名前です。このパラメータが指定されている場合、指定された名前のモジュールのみが置き換えられます。文字列を渡す場合、正規表現によるマッチングが行われます。文字列のリストを渡す場合、完全一致が行われるか、モジュール名が渡された文字列のいずれかで終わるかがチェックされます。このパラメータが ‘all-linear’ として指定されている場合、すべての linear/Conv1D モジュールが選択されます(モデルが PreTrainedModel の場合、出力層は除外されます)。このパラメータが指定されていない場合、モデルのアーキテクチャに基づいてモジュールが選択されます。アーキテクチャが不明な場合、エラーが発生します — この場合、ターゲットモジュールを手動で指定する必要があります。 - modules_to_save (
List[str]) — Road レイヤー以外で、学習可能に設定し、最終的なチェックポイントに保存するモジュールのリスト。
これはRoadModelの設定を保存するための設定クラスです。RoAdアダプターはhttps://huggingface.co/papers/2409.00119で提案されています。
RoadModel
class peft.RoadModel
< source >( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )