Skip to content

Commit db7fb1a

Browse files
committed
Merge branch 'main' into free-prepare_model_for_gradient_checkpointing
2 parents e278025 + cc38f09 commit db7fb1a

File tree

7 files changed

+251
-135
lines changed

7 files changed

+251
-135
lines changed

src/peft/peft_model.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1317,9 +1317,17 @@ def load_adapter(
13171317
):
13181318
device_map = kwargs.get("device_map", "auto")
13191319
max_memory = kwargs.get("max_memory", None)
1320-
offload_dir = kwargs.get("offload_folder", None)
1320+
offload_folder = kwargs.get("offload_folder", None)
1321+
offload_dir = kwargs.get("offload_dir", None)
13211322
offload_index = kwargs.get("offload_index", None)
13221323

1324+
if offload_dir is not None and offload_folder is not None:
1325+
# see https://github.com/huggingface/peft/issues/2541
1326+
raise ValueError("Cannot use `offload_folder` when `offload_dir` is specified.")
1327+
elif offload_dir is None:
1328+
# to keep backwards compatibility
1329+
offload_dir = offload_folder
1330+
13231331
dispatch_model_kwargs = {}
13241332
# Safety checker for previous `accelerate` versions
13251333
# `offload_index` was introduced in https://github.com/huggingface/accelerate/pull/873/

src/peft/tuners/lora/model.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -675,6 +675,8 @@ def add_weighted_adapter(
675675
r=new_rank,
676676
lora_alpha=new_rank,
677677
target_modules=new_target_modules,
678+
alpha_pattern={},
679+
rank_pattern={},
678680
)
679681
self.inject_adapter(self.model, adapter_name)
680682

src/peft/tuners/tuners_utils.py

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,28 @@ def onload_layer(layer):
114114
layer.base_layer._hf_hook.post_forward(layer.base_layer, torch.tensor([]))
115115

116116

117+
def _check_lora_target_modules_mamba(peft_config: PeftConfig, model: nn.Module, target_name: str):
118+
"""
119+
Prevent applying LoRA to incompatible modules in specific architectures (e.g., Mamba).
120+
"""
121+
122+
lora_like_types = {"LORA", "ADALORA", "XLORA", "RANDLORA"}
123+
incompatible_modules = {"out_proj", "conv1d"}
124+
mamba_model_types = {"falcon_h1", "mamba", "mamba2", "falcon_mamba"}
125+
126+
if (
127+
peft_config.peft_type in lora_like_types
128+
and hasattr(model, "config")
129+
and getattr(model.config, "model_type", None) in mamba_model_types
130+
):
131+
if target_name in incompatible_modules:
132+
raise ValueError(
133+
f"[PEFT:{peft_config.peft_type}] Module '{target_name}' is incompatible with Mamba-based models "
134+
f"(model_type='{model.config.model_type}'). Incompatible modules: {incompatible_modules}. "
135+
"Please remove it from `target_modules` to avoid compatibility issues."
136+
)
137+
138+
117139
class BaseTuner(nn.Module, ABC):
118140
r"""
119141
A base tuner model that provides the common methods and attributes for all tuners that are injectable into a
@@ -398,6 +420,12 @@ def _check_merge_allowed(self):
398420
+ example_code
399421
)
400422

423+
def _check_target_module_compatiblity(self, peft_config: PeftConfig, model: nn.Module, target_name: str):
424+
"""
425+
Prevent applying LoRA to incompatible modules in specific architectures (e.g., Mamba).
426+
"""
427+
_check_lora_target_modules_mamba(peft_config, model, target_name)
428+
401429
def inject_adapter(
402430
self, model: nn.Module, adapter_name: str, autocast_adapter_dtype: bool = True, low_cpu_mem_usage: bool = False
403431
) -> None:
@@ -497,6 +525,7 @@ def inject_adapter(
497525
else:
498526
self.targeted_module_names.append(key)
499527
parent, target, target_name = _get_submodules(model, key)
528+
self._check_target_module_compatiblity(peft_config, model, target_name)
500529
ctx = init_empty_weights if low_cpu_mem_usage else nullcontext
501530
with ctx():
502531
self._create_and_replace(peft_config, adapter_name, target, target_name, parent, current_key=key)

0 commit comments

Comments
 (0)