PEFT documentation
GLoRA
GLoRA
汎用低ランク適応(GLoRA)は、LoRAおよび関連するアプローチを一般化したPEFT手法です。GLoRAは、更新を構成可能なパス(A、B、C、D、E)に分解し、各パスではパスに応じて低ランク、ベクトル、定数、または無効のパラメータ化を使用できます。
各パスは4つのパラメータ化モードのいずれかをサポートします。これらはパラメータ数と表現力(更新がどれだけ豊かになり得るか)のトレードオフを扱います。
"lora": 低ランク分解(標準的なLoRAと同様)。r * (out + in)のパラメータを使用し、ランクrの補正を表現できます。表現力が最も高く、パラメータ数も最も多いです。"vector": 単一のベクトル(例: 形状(out, 1))で、行列全体にブロードキャストされます。O(out)個のパラメータを使用し、チャネルごとのスケーリングまたはシフトのみを行います。"constant": すべての要素で共有される単一のスカラー値。パラメータは1つを使用し、学習可能なオプションの中で表現力が最も低い。"none": 学習可能なパラメータを持たないゼロ。そのパスを完全に無効にします。
すべてのパスがすべてのモードを受け入れるわけではありません(例えば、config_D_Eは"lora"をサポートしていません)。より多くのパスで"lora"を選択すると、容量と学習可能なパラメータが増加します。一方、"vector"、"constant"、または"none"を選択すると、両方が減少します。
GLoRAは、構造化された更新パターンを試し、単一のレイヤー内で複数の適応メカニズムを組み合わせたい研究や高度なアプリケーションにおいて特に有用です。
大まかに言えば、GLoRAは凍結された線形層を以下のように変更します:
各パスは独立してパラメータ化されます。
GloraConfig
クラス peft.GloraConfig
< 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 = Falser: int = 8target_modules: list[str] | str | None = Nonebias: str = 'none'modules_to_save: list[str] | None = Noneconfig_A_B: typing.Literal['lora', 'vector', 'constant', 'none'] = 'lora'config_C: typing.Literal['lora', 'vector', 'none'] = 'lora'config_D_E: typing.Literal['vector', 'constant', 'none'] = 'constant'init_weights: bool = True )
パラメータ
- r (
int) — 設定がloraに設定されている場合に使用される低ランク分解のランク。 - target_modules (
Optional[Union[List[str], str]]) — Glora を適用するモジュールの名前です。 - config_A_B (
str) — A行列とB行列のパラメータ化(重みの乗法および加法補正)。有効な値:lora、vector、constant、none。 - config_C (
str) — C行列のパラメータ化(重みとバイアスの結合: b += W0 @ C)。 有効な値:lora、vector、none。 - config_D_E (
str) — D と E スカラー(バイアスの乗法および加法補正)のパラメータ化。D と E は行列ではなくバイアスサイズのベクトルであるため、loraはサポートされていません。有効な値:vector、constant、none。 - init_weights (
bool) — True の場合(デフォルト)、GLoRA を何もしない(ゼロ)として初期化します。False の場合、アダプターが何もしない状態にならないように、kaiming 初期化を使用します。
これはGloraModelの設定を保存するための設定クラスです。
Gloraは、凍結された線形層W0をW_eff = W0 + W0 * A + Bおよびb_eff = b0 + b0 * D + E + W0 @ Cとして修正します。
各行列(A、B、C、D、E)は独立してパラメータ化できます。設定値は、使用されるパラメータの数量と、表現可能な形状を制御します。
lora: 形状が(out, r)と(r, in)の低ランク分解Xd @ Xuを使用します。r * (out + in)のパラメータを必要とし、任意のランクrの補正を表現できます。標準的なLoRAと同様です。vector: 形状(out, 1)の単一の列ベクトルで、行列全体にブロードキャストされます。out個のパラメータを使用し、出力チャネルごとのスケーリングまたはシフトのみを行います。constant: 全要素で共有される単一のスカラー値。パラメータは1つで、最も制約が厳しい。none: ゼロ、学習可能なパラメータなし。このパスを事実上無効にします。
主要な設定オプション
r: パスが"lora"として設定されている場合に使用されるランク(デフォルト:8)。target_modules: 適応させるモジュール名のリストまたは正規表現(例:["q_proj", "v_proj"])。config_A_B: A と B のパスの種類(“lora”、“vector”、“constant”、“none”)。config_C: C のパス型(“lora”、“vector”、“none”)。config_D_E: D と E のパスの種類(“constant”、“vector”、“none”)。bias: バイアスの処理方法("none"、"all"、または"glora_only")。init_weights:True(デフォルト)の場合、GLoRA は何もしない操作(no-op)として初期化されます。Falseの場合、kaiming 初期化が使用されます。
注:
config_D_Eは"lora"をサポートしていません。- サポートされているモデルタイプでは、
target_modulesを省略できます(PEFTのデフォルトのマッピングが使用されます)。
GloraModel
クラス peft.GloraModel
< source >( modelpeft_config: Union[PeftConfig, dict[str, PeftConfig]]adapter_name: strlow_cpu_mem_usage: bool = Falsestate_dict: Optional[dict[str, torch.Tensor]] = None )
事前学習済みのTransformersモデルからGeneralized Low Rank Adapter (GLoRA)モデルを作成します。
- ベースモデルをラップし、指定されたモジュールにGLoRAアダプターを注入します。
- 複数のアダプター、アダプターの切り替え、マージ/アンマージ、および混合バッチ推論をサポートします。
- アダプタの管理には、
set_adapter、merge_and_unloadおよび関連メソッドを使用します。
GloraLayerとGloraLinear
class peft.tuners.glora.GloraLinear
< source >( base_layer: nn.Moduleadapter_name: strconfig**kwargs )
密な~torch.nn.Linearのbase_layerをラップするGLoRAアダプター。
GloraLayerは汎用的な低ランク適応のコアロジックであり、複数のアダプターと柔軟なパス設定をサポートしています。GloraLinearは、GLoRA対応のnn.Linearのドロップイン代替です。- GLoRAは現在、プレーンな
torch.nn.Linearベースレイヤーをサポートしています。
使用例
from transformers import AutoModelForCausalLM
from peft import GloraConfig, get_peft_model
model = AutoModelForCausalLM.from_pretrained("your-model-id")
glora_config = GloraConfig(
r=8,
target_modules=["q_proj", "v_proj"],
config_A_B="lora",
config_C="vector",
config_D_E="constant",
task_type="CAUSAL_LM",
)
model = get_peft_model(model, glora_config)
model.print_healthcheck()
# Switch adapters, merge, etc.
model.set_adapter("default")
model.merge_and_unload()注記
- GLoRAはLoRAのスーパーセットです。すべてのパスを“lora”に設定すると、標準的なLoRAが復元されます。
- A/B/C/D/Eには異なるパスタイプを使用することで、新しい適応戦略の実験を行うことができます。
- GLoRAは、すべての標準的なPEFTアダプター管理機能(追加、削除、切り替え、マージなど)をサポートしています。