bridge.peft.module_matcher
#
Module Contents#
Classes#
Implements the LoRA (Low-Rank Adaptation) module for parameter-efficient fine-tuning. |
Data#
API#
- bridge.peft.module_matcher.HAVE_TE#
‘all(…)’
- class bridge.peft.module_matcher.ModuleMatcher#
Implements the LoRA (Low-Rank Adaptation) module for parameter-efficient fine-tuning.
LoRA uses a low-rank projection to adapt the weights of a pre-trained model to a new downstream task. This class facilitates the application of LoRA to specific modules within the model architecture.
- Parameters:
target_modules (List[str], optional) – A list of module names to apply LoRA to. Defaults to all linear layers [‘linear_qkv’, ‘linear_proj’, ‘linear_fc1’, ‘linear_fc2’]. - ‘linear_qkv’: Apply LoRA to the fused linear layer used for query, key, and value projections in self-attention. - ‘linear_proj’: Apply LoRA to the linear layer used for projecting the output of self-attention. - ‘linear_fc1’: Apply LoRA to the first fully-connected layer in MLP. - ‘linear_fc2’: Apply LoRA to the second fully-connected layer in MLP. Target modules can also contain wildcards. For example, you can specify target_modules=[’.layers.0..linear_qkv’, ‘.layers.1..linear_qkv’] to add LoRA to only linear_qkv on the first two layers.
- target_modules: List[str]#
‘field(…)’
- exclude_modules: List[str]#
‘field(…)’
- canonical_mapping: Dict[str, Set]#
‘field(…)’
- match(
- m: torch.nn.Module,
- name: Optional[str] = None,
- prefix: Optional[str] = None,
Determines whether a given module matches specified target patterns.
This function checks if the provided module
m
should be included based on predefined mapping rules (canonical_mapping
,target_modules
, andexclude_modules
). It returns the matching pattern if a match is found; otherwise, it returnsNone
.- Parameters:
m (nn.Module) – The module being checked.
name (str, optional) – The module’s name.
prefix (str, optional) – A prefix to be used in constructing
full_name
.
- Returns:
A tuple containing (matching_pattern, full_name) if a match is found; otherwise,
None
.- Return type:
Optional[Tuple[str, str]]
Matching Logic:
If
canonical_mapping
is defined, it checks:
Whether
name
exactly matches a pattern.Whether
full_name
matches any regex pattern incanonical_mapping
.
If
target_modules
is defined, it follows the same logic ascanonical_mapping
.If neither
canonical_mapping
nortarget_modules
are defined, it ensures:
name
is not inexclude_modules
.full_name
does not match anytarget_modules
patterns.m
is an instance ofnn.Linear
.
Notes:
exclude_modules
should only be non-empty if neithercanonical_mapping
nortarget_modules
are set.The function asserts that
exclude_modules
is empty when usingcanonical_mapping
ortarget_modules
.