PEFT documentation
GLoRA
GLoRA
Generalized Low-Rank Adaptation (GLoRA) is a PEFT method that generalizes LoRA and related approaches. GLoRA decomposes updates into configurable paths (A, B, C, D, E), where each path can use low-rank, vector, constant, or disabled parameterization depending on the path.
Each path supports one of four parameterization modes. They trade off parameter count against expressiveness (how rich the update can be):
"lora": Low-rank decomposition (like standard LoRA). Usesr * (out + in)parameters and can express rank-rcorrections. Most expressive, most parameters."vector": A single vector (e.g. shape(out, 1)), broadcast across the matrix. UsesO(out)parameters; only per-channel scaling or shifts."constant": A single scalar shared across all elements. Uses 1 parameter; least expressive among the trainable options."none": Zeros with no trainable parameters; disables that path entirely.
Not every path accepts every mode (for example, config_D_E does not support "lora"). Choosing "lora" on more paths increases capacity and trainable parameters; "vector", "constant", or "none" reduce both.
GLoRA is especially useful for research and advanced applications where you want to experiment with structured update patterns and combine multiple adaptation mechanisms in a single layer.
At a high level, GLoRA modifies a frozen linear layer with:
where each path is independently parameterized.
GloraConfig
class peft.GloraConfig
< source >( task_type: Optional[Union[str, TaskType]] = None peft_type: Optional[Union[str, PeftType]] = None auto_mapping: Optional[dict] = None peft_version: Optional[str] = None base_model_name_or_path: Optional[str] = None revision: Optional[str] = None inference_mode: bool = False r: int = 8 target_modules: typing.Union[list[str], str, NoneType] = None bias: str = 'none' modules_to_save: typing.Optional[list[str]] = None config_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 )
Parameters
- r (
int) — Rank of the low-rank decomposition used when a config is set tolora. - target_modules (
Optional[Union[List[str], str]]) — The names of the modules to apply Glora to. - config_A_B (
str) — Parameterization for the A and B matrices (weight multiplicative and additive corrections). Valid values:lora,vector,constant,none. - config_C (
str) — Parameterization for the C matrix (weight-to-bias coupling: b += W0 @ C). Valid values:lora,vector,none. - config_D_E (
str) — Parameterization for the D and E scalars (bias multiplicative and additive corrections). Does not supportlorasince D and E are bias-sized vectors, not matrices. Valid values:vector,constant,none. - init_weights (
bool) — If True (default), initialize GLoRA as a no-op (zeros). If False, use kaiming initialization so the adapter is not a no-op.
This is the configuration class to store the configuration of a GloraModel.
Glora modifies a frozen linear layer W0 as: W_eff = W0 + W0 * A + B and b_eff = b0 + b0 * D + E + W0 @ C.
Each matrix (A, B, C, D, E) can be parameterized independently. The config values control how many parameters are used and what shapes they can express:
lora: Low-rank decompositionXd @ Xuwith shapes(out, r)and(r, in). Usesr * (out + in)parameters and can express any rank-r correction. Like standard LoRA.vector: A single column vector of shape(out, 1), broadcast across the full matrix. Usesoutparameters; only per-output-channel scaling or shifts.constant: A single scalar shared across all elements. Uses 1 parameter; most constrained.none: Zeros, no trainable parameters. Effectively disables this path.
Key Configuration Options
r: Rank used when a path is configured as"lora"(default:8).target_modules: List or regex of module names to adapt (e.g.,["q_proj", "v_proj"]).config_A_B: Path type for A and B (“lora”, “vector”, “constant”, “none”).config_C: Path type for C (“lora”, “vector”, “none”).config_D_E: Path type for D and E (“constant”, “vector”, “none”).bias: Bias handling ("none","all", or"glora_only").init_weights: IfTrue(default), GLoRA is initialized as a no-op. IfFalse, uses kaiming initialization.
Notes:
config_D_Edoes not support"lora".target_modulescan be omitted for supported model types (PEFT default mappings are used).
GloraModel
class peft.GloraModel
< source >( model peft_config: Union[PeftConfig, dict[str, PeftConfig]] adapter_name: str low_cpu_mem_usage: bool = False state_dict: Optional[dict[str, torch.Tensor]] = None )
Creates Generalized Low Rank Adapter (GLoRA) model from a pretrained transformers model.
- Wraps a base model and injects GLoRA adapters into the specified modules.
- Supports multiple adapters, adapter switching, merging/unmerging, and mixed-batch inference.
- Use
set_adapter,merge_and_unload, and related methods for adapter management.
GloraLayer and GloraLinear
class peft.tuners.glora.GloraLinear
< source >( base_layer: nn.Module adapter_name: str config **kwargs )
GLoRA adapter wrapping a dense ~torch.nn.Linear base_layer.
GloraLayeris the core logic for generalized low-rank adaptation, supporting multiple adapters and flexible path configs.GloraLinearis a drop-in replacement fornn.Linearwith GLoRA support.- GLoRA currently supports plain
torch.nn.Linearbase layers.
Example Usage
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_trainable_parameters()
# Switch adapters, merge, etc.
model.set_adapter("default")
model.merge_and_unload()Notes
- GLoRA is a superset of LoRA: setting all paths to “lora” recovers standard LoRA.
- You can use different path types for A/B/C/D/E to experiment with new adaptation strategies.
- GLoRA supports all standard PEFT adapter management features (add, delete, switch, merge, etc).