PEFT documentation
GLoRA
GLoRA
일반화된 저순위 적응(GLoRA)은 LoRA 및 관련 접근법을 일반화한 PEFT 방법입니다. GLoRA는 업데이트를 구성 가능한 경로(A, B, C, D, E)로 분해하며, 각 경로는 경로에 따라 저순위, 벡터, 상수 또는 비활성화된 매개변수화를 사용할 수 있습니다.
각 경로는 네 가지 매개변수화 모드 중 하나를 지원합니다. 이들은 매개변수 개수와 표현력(업데이트가 얼마나 풍부할 수 있는지) 사이의 트레이드오프를 제공합니다:
"lora": 저순위 분해(표준 LoRA와 유사).r * (out + in)개의 매개변수를 사용하며 rank-r보정을 표현할 수 있습니다. 표현력이 가장 높고 매개변수도 가장 많습니다."vector": 단일 벡터(예: shape(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를 no-op(제로)으로 초기화합니다. False인 경우, 어댑터가 no-op이 되지 않도록 kaiming 초기화를 사용합니다.
이것은 GloraModel의 구성을 저장하기 위한 구성 클래스입니다.
Glora는 동결된 선형 레이어 W0를 다음과 같이 수정합니다: W_eff = W0 + W0 * A + B 및 b_eff = b0 + b0 * D + E + W0 @ C.
각 행렬(A, B, C, D, E)은 독립적으로 매개변수화될 수 있습니다. config 값은 사용되는 매개변수의 수와 표현할 수 있는 형태를 제어합니다:
lora:Xd @ Xu형태의 저순위 분해로, 차원은 각각(out, r)와(r, in)입니다.r * (out + in)개의 매개변수를 사용하며, 임의의 rank-r 보정을 표현할 수 있습니다. 표준 LoRA와 동일합니다.vector:(out, 1)모양의 단일 열 벡터로, 전체 행렬에 걸쳐 브로드캐스트됩니다.out개의 매개변수를 사용하며 출력 채널별 스케일링 또는 시프트만 수행합니다.constant: 모든 요소에 공유되는 단일 스칼라. 1개의 매개변수를 사용하며, 제약이 가장 강합니다.none: 0으로 설정하여 학습 가능한 파라미터가 없도록 합니다. 해당 경로를 사실상 비활성화합니다.
주요 구성 옵션
r: 경로가"lora"로 설정된 경우 사용되는 Rank (기본값: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: Bias 처리 방식("none","all"또는"glora_only").init_weights:True(기본값)인 경우 GLoRA는 no-op으로 초기화됩니다.False인 경우 kaiming 초기화를 사용합니다.
참고:
config_D_E는"lora"를 지원하지 않습니다.- 지원되는 모델 유형에서는
target_modules를 생략할 수 있습니다(PEFT 기본 매핑이 사용됩니다).
GloraModel
class 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 )
Generalized Low Rank Adapter (GLoRA) 모델을 사전 학습된 transformers 모델에서 생성합니다.
- 기본 모델을 래핑하고 지정된 모듈에 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()The input is a single word "Notes". 참고
- GLoRA는 LoRA의 초집합입니다: 모든 경로를 “lora”로 설정하면 표준 LoRA를 복원합니다.
- 새로운 적응 전략을 실험하기 위해 A/B/C/D/E에 서로 다른 경로 유형을 사용할 수 있습니다.
- GLoRA는 모든 표준 PEFT 어댑터 관리 기능(추가, 삭제, 전환, 병합 등)을 지원합니다.