bridge.peft.utils#
Module Contents#
Classes#
Container for base linear adapter attributes. |
|
All-2-All from Hidden Parallel to Sequence Parallel. |
|
Parallel Linear Adapter for Parameter-Efficient Fine-Tuning (PEFT) in distributed settings. |
|
Callable parameter container so DDP forward pre-hooks see grouped LoRA weights. |
|
LoRA adapter with one low-rank pair per local grouped MoE expert. |
|
Per-expert linear with a packed 3D weight |
|
LoRA adapter for grouped expert MLP with shared-outer semantics. |
Functions#
Return whether TE’s grouped-linear autograd takes a separate splits tensor. |
|
Return whether TE’s grouped-linear autograd takes output buffer tensors. |
|
Return the names unpacked from TE’s grouped-linear |
|
Return the process-group collection attached to a module or its config. |
|
Return the explicit PG collection or MCore’s default collection fallback. |
|
Return all sharded tensor factories in a nested state dict. |
|
Return checkpoint global tensor shape for a key, tolerating model-section prefixes. |
|
Return the adapter module key if a factory represents a shared expert LoRA tensor. |
|
Return adapter modules matching a legacy shared-expert checkpoint key. |
|
Enable legacy 2D checkpoint loading for old shared grouped-expert adapters. |
|
Return the first named process group available on a collection. |
|
Return a process-group size without consulting global parallel state. |
|
Return this rank within a process group without consulting global parallel state. |
|
Return the tensor-parallel group for dense or expert linear layers. |
|
Return the TP group passed to the wrapped module, falling back to its collection. |
|
Create a Bridge PEFT object from a small config mapping. |
|
Create a provider pre-wrap hook that applies PEFT. |
|
Load a PEFT adapter checkpoint into an already transformed model. |
|
Apply PEFT and mark adapter parameters for checkpointing. |
|
Generate Bridge model checkpoint sections for an external trainer. |
|
Return whether a module is ModelOpt’s local Megatron Linear. |
|
Returns attributes from the base layer as an AdapterAttributes dataclass. |
|
Return whether the current base module is an expert linear module. |
|
Return whether the current base module is a grouped expert linear module. |
|
Return the LoRA rank to use, reduced for expert layers when |
|
Round normalized expert LoRA ranks up to the expert-TP granularity when needed. |
|
Return whether the pattern (target module to add LoRA) matches the key (model weight name). |
|
Create an initialization method based on normal distribution N(0, sigma). |
|
Create an initialization method based on Kaiming uniform distribution. |
|
Create an initialization method based on uniform distribution U(-bound, bound). |
|
Create an initialization method that sets all values to a constant. |
|
Pad sequence length to be a multiple of mult. |
|
Remove sequence padding that was added by pad_seq_to_mult. |
|
Perform All-to-All communication from Hidden Parallel to Sequence Parallel. |
|
Broadcast shared expert adapter weights from EP rank zero so every EP rank starts bitwise identical. |
|
Tag |
|
Yield the parameters tagged by :func: |
|
Remove the per-layer fallback hook from |
|
Remove the per-layer fallback hooks so :func: |
|
Sum the tagged parameters’ gradients across the EP group once per step, coalesced per dtype. |
|
Run Megatron-Core’s |
|
Divide |
|
Split grouped-expert SwiGLU tensors along the fused hidden axis for checkpointing. |
|
Append a sharding offset, combining fragmentations when the axis is already sharded. |
|
Build a sharded tensor for packed grouped-expert weights. |
Data#
API#
- bridge.peft.utils.logger#
‘getLogger(…)’
- bridge.peft.utils.ModelList#
None
- bridge.peft.utils.ModelHook#
None
- bridge.peft.utils.CheckpointPath#
None
- bridge.peft.utils._LEGACY_SHARED_EXPERT_ADAPTER_CHECKPOINT_ATTR#
‘use_legacy_shared_expert_adapter_checkpoint’
- bridge.peft.utils.HAVE_TE#
‘all(…)’
- bridge.peft.utils._te_grouped_linear_uses_explicit_m_splits(
- autograd_function: type[torch.autograd.Function],
Return whether TE’s grouped-linear autograd takes a separate splits tensor.
- bridge.peft.utils._te_grouped_linear_uses_output_buffers(
- autograd_function: type[torch.autograd.Function],
Return whether TE’s grouped-linear autograd takes output buffer tensors.
- bridge.peft.utils._te_grouped_linear_non_tensor_arg_names(
- autograd_function: type[torch.autograd.Function],
Return the names unpacked from TE’s grouped-linear
non_tensor_argstuple.
- bridge.peft.utils._get_pg_collection_from_module(
- module: object | None,
Return the process-group collection attached to a module or its config.
- bridge.peft.utils._get_pg_collection(
- pg_collection: megatron.core.process_groups_config.ProcessGroupCollection | None = None,
- source: object | None = None,
- *,
- required_pgs: List[str],
Return the explicit PG collection or MCore’s default collection fallback.
- bridge.peft.utils._iter_sharded_tensor_factories(
- state_dict: object,
Return all sharded tensor factories in a nested state dict.
- bridge.peft.utils._checkpoint_tensor_shape(
- checkpoint_metadata: Mapping[str, megatron.core.dist_checkpointing.mapping.ShardedTensor],
- key: str,
Return checkpoint global tensor shape for a key, tolerating model-section prefixes.
- factory: megatron.core.dist_checkpointing.mapping.ShardedTensorFactory,
Return the adapter module key if a factory represents a shared expert LoRA tensor.
- adapters_by_name: Mapping[str, ParallelLinearAdapter],
- adapter_key: str,
Return adapter modules matching a legacy shared-expert checkpoint key.
- megatron_model: list[torch.nn.Module] | torch.nn.Module,
- sharded_state_dict: megatron.core.dist_checkpointing.mapping.ShardedStateDict,
- checkpoint_path: str | pathlib.Path,
Enable legacy 2D checkpoint loading for old shared grouped-expert adapters.
New shared grouped-expert LoRA checkpoints expose a leading global expert axis so they can be resharded across EP changes. Older checkpoints saved the same shared adapter as a plain 2D tensor. This helper detects that old metadata shape and marks only the matching shared adapter modules to emit the legacy 2D sharded state dict for loading.
- Parameters:
megatron_model – Model module or model chunks containing PEFT adapters.
sharded_state_dict – Current adapter-only sharded state dict.
checkpoint_path – Distributed checkpoint directory to inspect.
- Returns:
True if at least one shared expert adapter was marked for legacy loading.
- bridge.peft.utils._get_process_group(
- pg_collection: megatron.core.process_groups_config.ProcessGroupCollection | None,
- *names: str,
Return the first named process group available on a collection.
- bridge.peft.utils._process_group_size(group: object | None, fallback: int = 1) int#
Return a process-group size without consulting global parallel state.
- bridge.peft.utils._process_group_rank(group: object | None, fallback: int = 0) int#
Return this rank within a process group without consulting global parallel state.
- bridge.peft.utils._get_tensor_parallel_group(
- pg_collection: megatron.core.process_groups_config.ProcessGroupCollection | None,
- *,
- is_expert: bool = False,
Return the tensor-parallel group for dense or expert linear layers.
- bridge.peft.utils._get_tensor_parallel_group_from_module(
- module: torch.nn.Module,
- *,
- is_expert: bool = False,
- pg_collection: megatron.core.process_groups_config.ProcessGroupCollection | None = None,
Return the TP group passed to the wrapped module, falling back to its collection.
- bridge.peft.utils.TECL#
()
- bridge.peft.utils.TERL#
()
- bridge.peft.utils.create_peft(
- config: Mapping[str, Any],
- dtype: torch.dtype | str | int | None = None,
Create a Bridge PEFT object from a small config mapping.
- bridge.peft.utils.create_peft_hook(
- peft: object,
- training: bool = True,
Create a provider pre-wrap hook that applies PEFT.
- bridge.peft.utils.load_peft_adapter_checkpoint(
- model: bridge.peft.utils.ModelList | megatron.core.transformer.module.MegatronModule,
- adapter_checkpoint_path: bridge.peft.utils.CheckpointPath,
- peft: object,
- strict: bool = False,
- model_sd_kwargs: Mapping[str, object] | None = None,
- ckpt_format: str = 'torch_dist',
- pg_collection: megatron.core.process_groups_config.ProcessGroupCollection | None = None,
- fully_parallel_load: bool = True,
- load_strategy: object | None = None,
Load a PEFT adapter checkpoint into an already transformed model.
- bridge.peft.utils._apply_peft(
- peft: object,
- model: bridge.peft.utils.ModelList,
- training: bool = True,
Apply PEFT and mark adapter parameters for checkpointing.
- bridge.peft.utils._import_peft_class(peft_type: str) type[Any]#
- bridge.peft.utils._model_state_dict(
- model: bridge.peft.utils.ModelList,
- model_sd_kwargs: Mapping[str, object] | None = None,
- ckpt_format: str = 'torch_dist',
- pg_collection: megatron.core.process_groups_config.ProcessGroupCollection | None = None,
Generate Bridge model checkpoint sections for an external trainer.
- bridge.peft.utils._ensure_model_list(
- model: bridge.peft.utils.ModelList | megatron.core.transformer.module.MegatronModule,
- bridge.peft.utils.is_modelopt_linear(m: torch.nn.Module) bool#
Return whether a module is ModelOpt’s local Megatron Linear.
- class bridge.peft.utils.AdapterAttributes#
Container for base linear adapter attributes.
- input_is_parallel: bool#
None
- in_features: int#
None
- out_features: int#
None
- disable_tensor_parallel_comm: bool#
None
- disable_sequence_parallel_comm: bool#
None
- base_linear_is_parallel: bool#
None
- replicate_adapter: bool#
False
- bridge.peft.utils.get_adapter_attributes_from_linear(
- m: torch.nn.Module,
- is_expert: bool = False,
- pg_collection: megatron.core.process_groups_config.ProcessGroupCollection | None = None,
- sequence_parallel_input_regather: bool = False,
Returns attributes from the base layer as an AdapterAttributes dataclass.
input_is_parallel, in_features, out_features, disable_tensor_parallel_comm, disable_sequence_parallel_comm, base_linear_is_parallel
This function analyzes a linear module and extracts key attributes needed for adapter configuration, particularly for PEFT adapters in distributed training scenarios.
- Parameters:
m – The linear module to analyze (should have a config attribute).
is_expert – Whether the linear belongs to an expert module.
pg_collection – Optional process-group collection associated with the module.
sequence_parallel_input_regather – Whether LoRA-A should re-gather its sequence-parallel input in backward.
- Returns:
input_is_parallel: Whether the input is already parallelized
in_features: Input feature dimension
out_features: Output feature dimension
disable_tensor_parallel_comm: Whether to disable tensor parallel communication
disable_sequence_parallel_comm: Whether to disable sequence parallel communication
base_linear_is_parallel: Whether the base linear layer uses parallelization
- Return type:
AdapterAttributes containing
- Raises:
NotImplementedError – If the layer type is not recognized for LoRA adaptation.
- bridge.peft.utils.is_expert_linear(fqn: str) bool#
Return whether the current base module is an expert linear module.
This function checks if a fully qualified name (FQN) corresponds to an expert linear module in a Mixture of Experts (MoE) architecture.
- Parameters:
fqn – Fully qualified name of the module.
- Returns:
True if the module is an expert linear module, False otherwise.
.. rubric:: Example
is_expert_linear(“model.layers.0.mlp.experts.0.linear_fc1”) True is_expert_linear(“model.layers.0.mlp.linear_fc1”) False
- bridge.peft.utils.is_grouped_expert_linear(fqn: str) bool#
Return whether the current base module is a grouped expert linear module.
- bridge.peft.utils.get_effective_lora_dim(
- module: torch.nn.Module,
- *,
- dim: int,
- normalize_moe_lora: bool,
- is_expert: bool,
Return the LoRA rank to use, reduced for expert layers when
normalize_moe_lorais enabled.
- bridge.peft.utils.align_expert_dim_for_tp(
- module: torch.nn.Module,
- dim: int,
- *,
- normalize_moe_lora: bool,
- is_expert: bool,
- input_is_parallel: bool,
- pg_collection: megatron.core.process_groups_config.ProcessGroupCollection | None = None,
Round normalized expert LoRA ranks up to the expert-TP granularity when needed.
- bridge.peft.utils.wildcard_match(
- pattern: str,
- key: Optional[str],
Return whether the pattern (target module to add LoRA) matches the key (model weight name).
This function performs wildcard matching using ‘*’ as a placeholder for any substring.
- Parameters:
pattern – Pattern string with wildcards (*) to match against.
key – Key string to test against the pattern.
- Returns:
True if the pattern matches the key, False if it doesn’t, None if key is None.
.. rubric:: Example
wildcard_match(”.layers.0..linear_qkv”, “decoder.layers.0.self_attention.linear_qkv”) True wildcard_match(”.layers.0..linear_qkv”, “decoder.layers.1.self_attention.linear_qkv”) False
- bridge.peft.utils.init_method_normal(
- sigma: float,
Create an initialization method based on normal distribution N(0, sigma).
- Parameters:
sigma – Standard deviation for the normal distribution.
- Returns:
Initialization function that applies normal distribution to a tensor.
- bridge.peft.utils.init_method_kaiming_uniform(
- val: float,
Create an initialization method based on Kaiming uniform distribution.
- Parameters:
val – The ‘a’ parameter for Kaiming uniform initialization.
- Returns:
Initialization function that applies Kaiming uniform distribution to a tensor.
- bridge.peft.utils.init_method_uniform(
- bound: float,
Create an initialization method based on uniform distribution U(-bound, bound).
- Parameters:
bound – Half-width of the uniform distribution.
- Returns:
Initialization function that applies the uniform distribution to a tensor.
- bridge.peft.utils.init_method_const(
- val: float,
Create an initialization method that sets all values to a constant.
- Parameters:
val – Constant value to initialize the tensor with.
- Returns:
Initialization function that sets tensor to constant value.
- bridge.peft.utils.pad_seq_to_mult(
- x: torch.Tensor,
- mult: int,
Pad sequence length to be a multiple of mult.
This function pads the first dimension of the tensor to ensure it’s divisible by mult. Used primarily for MoE (Mixture of Experts) operations that require specific sequence lengths.
- Parameters:
x – Input tensor to pad.
mult – Multiple that the sequence length should be divisible by.
- Returns:
Padded tensor
Number of padding elements added
- Return type:
A tuple containing
- bridge.peft.utils.unpad_seq_to_mult(x: torch.Tensor, pad_len: int) torch.Tensor#
Remove sequence padding that was added by pad_seq_to_mult.
- Parameters:
x – Padded tensor to unpad.
pad_len – Number of padding elements to remove from the end.
- Returns:
Unpadded tensor with pad_len elements removed from the first dimension.
- class bridge.peft.utils._All2AllHp2Sp#
Bases:
torch.autograd.FunctionAll-2-All from Hidden Parallel to Sequence Parallel.
This is a temporary workaround for distributed communication patterns and can be updated in the future. It performs all-to-all communication to transform from hidden parallel to sequence parallel layout.
TODO: Move the functionality to MCore
- static forward(
- ctx,
- input_: torch.Tensor,
- group: object | None,
Forward pass: All-to-All from Hidden Parallel to Sequence Parallel.
- Parameters:
ctx – Autograd context (unused but required by Function interface).
input_ – Input tensor in hidden parallel layout.
- Returns:
Output tensor in sequence parallel layout.
- static backward(ctx, grad_output: torch.Tensor) torch.Tensor#
Backward pass: All-to-All from Sequence Parallel to Hidden Parallel.
- Parameters:
ctx – Autograd context (unused but required by Function interface).
grad_output – Gradient tensor in sequence parallel layout.
- Returns:
Gradient tensor in hidden parallel layout.
- bridge.peft.utils.all2all_hp2sp(
- input_: torch.Tensor,
- tensor_parallel_group: object | None = None,
Perform All-to-All communication from Hidden Parallel to Sequence Parallel.
- Parameters:
input_ – Input tensor in hidden parallel layout.
- Returns:
Output tensor in sequence parallel layout.
- bridge.peft.utils._EXPERT_PARALLEL_REPLICATED_ATTR#
‘expert_parallel_replicated’
- bridge.peft.utils._EXPERT_PARALLEL_GRAD_HOOK_ATTR#
‘_expert_parallel_grad_hook’
- weights: list[torch.Tensor],
- ep_group: object | None,
Broadcast shared expert adapter weights from EP rank zero so every EP rank starts bitwise identical.
- bridge.peft.utils.mark_expert_parallel_replicated(
- weight: torch.Tensor,
- *,
- ep_group: object | None,
Tag
weightas replicated across expert parallelism so its gradient is summed over EP every step.MCore’s DDP reduces
is_expertparameters over expert-DP only;- Func:
allreduce_expert_parallel_replicated_gradsadds the EP sum once per step. Until- Func:
enable_expert_parallel_grad_sync_in_finalizeremoves it, a per-microbatch fallback hook sums eagerly computed gradients across EP so training loops that never install the finalize wrapper keep working.- Parameters:
weight – Parameter replicated across the EP group.
ep_group – Expert-model-parallel process group, or
Nonewhen expert parallelism is not set up.
- bridge.peft.utils._expert_parallel_replicated_params(
- model: torch.nn.Module | list[torch.nn.Module],
Yield the parameters tagged by :func:
mark_expert_parallel_replicated.
- bridge.peft.utils._remove_fallback_hook(param: torch.nn.Parameter) bool#
Remove the per-layer fallback hook from
param; return whether one was still installed.
- bridge.peft.utils.enable_expert_parallel_grad_sync_in_finalize(
- model: torch.nn.Module | list[torch.nn.Module],
Remove the per-layer fallback hooks so :func:
allreduce_expert_parallel_replicated_gradsowns the EP sum.Bridge’s training setup calls this once the model is wrapped.
- Parameters:
model – Model chunk or list of model chunks, DDP-wrapped or bare.
- Returns:
Number of tagged parameters.
- bridge.peft.utils.allreduce_expert_parallel_replicated_grads(
- model: torch.nn.Module | list[torch.nn.Module],
- *,
- ep_group: object | None = None,
Sum the tagged parameters’ gradients across the EP group once per step, coalesced per dtype.
Call it after the data-parallel gradient sync (after Megatron-Core’s
finalize_model_grads), the point where MCore also sums sequence-parallel layernorm gradients across TP. It readsmain_gradunder DDP and.gradotherwise, so fused and eager weight-gradient accumulation give the same result.- Parameters:
model – Model chunk or list of model chunks, DDP-wrapped or bare.
ep_group – Expert-model-parallel group; defaults to MCore’s global expert-model-parallel group.
- bridge.peft.utils.finalize_model_grads_with_expert_adapter_sync(
- model: list[torch.nn.Module],
- num_tokens: torch.Tensor | None = None,
- pg_collection: megatron.core.process_groups_config.ProcessGroupCollection | None = None,
- **kwargs: object,
Run Megatron-Core’s
finalize_model_grads, then :func:allreduce_expert_parallel_replicated_grads.Drop-in replacement for
config.finalize_model_grads_func. Bridge’s training setup installs it; training loops that callfinalize_model_gradsthemselves should call this instead.- Parameters:
model – List of model chunks.
num_tokens – Optional global token count used by MCore for per-token loss scaling.
pg_collection – Process groups for MCore’s finalize step; its
epgroup drives the EP sum.**kwargs – Forwarded to
finalize_model_grads(for exampleforce_all_reduce).
- class bridge.peft.utils.ParallelLinearAdapter(
- in_features: int,
- out_features: int,
- dim: int,
- base_linear_name: str,
- activation: str = 'swish',
- column_init_method: str = 'xavier',
- row_init_method: str = 'zero',
- input_is_parallel: bool = False,
- dropout: float = 0.0,
- model_parallel_config: Optional[megatron.core.ModelParallelConfig] = None,
- alpha: Optional[float] = None,
- dropout_position: str = 'pre',
- a2a_experimental: bool = False,
- is_expert: bool = False,
- disable_tensor_parallel_comm: bool = False,
- disable_sequence_parallel_comm: bool = True,
- base_linear_is_parallel: bool = True,
- replicate_adapter: bool = False,
- pg_collection: megatron.core.process_groups_config.ProcessGroupCollection | None = None,
- sequence_parallel_input_regather: bool = False,
Bases:
torch.nn.ModuleParallel Linear Adapter for Parameter-Efficient Fine-Tuning (PEFT) in distributed settings.
This adapter implements a low-rank adaptation pattern using two linear layers with configurable parallelization strategies. It supports both tensor and sequence parallelism patterns used in large language model training.
The adapter follows the pattern: input -> linear_in -> activation -> linear_out -> scaling where linear_in and linear_out are parallelized according to the base layer configuration.
- Parameters:
in_features – Input feature dimension.
out_features – Output feature dimension.
dim – Adapter bottleneck dimension (rank).
base_linear_name – Name of the base linear layer being adapted.
activation – Activation function name (default: ‘swish’).
column_init_method – Initialization method for column parallel layer (default: ‘xavier’).
row_init_method – Initialization method for row parallel layer (default: ‘zero’).
input_is_parallel – Whether input is already parallelized (default: False).
dropout – Dropout probability (default: 0.0).
model_parallel_config – Configuration for model parallelism (default: None).
alpha – Scaling factor for adapter output (default: None, uses dim).
dropout_position – Where to apply dropout (‘pre’ or ‘post’, default: ‘pre’).
a2a_experimental – Whether to use experimental all-to-all communication (default: False).
is_expert – Whether this adapter is for expert layers in MoE (default: False).
disable_sequence_parallel_comm – Whether to disable sequence parallel communication (default: True).
base_linear_is_parallel – Whether the base linear layer uses parallelization (default: True).
replicate_adapter – Whether both low-rank matrices should be duplicated across TP ranks.
sequence_parallel_input_regather – Whether eligible LoRA-A projections retain the sequence-local input and re-gather it in backward using MCore’s sequence-parallel linear path (default: False).
Initialization
Initialize the ParallelLinearAdapter.
- Parameters:
in_features – Input feature dimension.
out_features – Output feature dimension.
dim – Adapter bottleneck dimension.
base_linear_name – Name of the base linear layer.
activation – Activation function name.
column_init_method – Initialization for column parallel layers.
row_init_method – Initialization for row parallel layers.
input_is_parallel – Whether input is already parallelized.
dropout – Dropout probability.
model_parallel_config – Model parallelism configuration.
alpha – Scaling factor (uses dim if None).
dropout_position – When to apply dropout.
a2a_experimental – Use experimental all-to-all communication.
is_expert – Whether for expert layers in MoE.
disable_tensor_parallel_comm – Disable tensor parallel communication.
disable_sequence_parallel_comm – Disable sequence parallel communication.
replicate_adapter – Duplicate both low-rank matrices across TP ranks.
sequence_parallel_input_regather – Re-gather eligible LoRA-A sequence-parallel inputs in backward.
- _sequence_parallel_input_regather_eligibility(
- x: torch.Tensor,
Return whether the targeted sequence-parallel linear path is safe.
- _log_sequence_parallel_input_regather_fallback(
- reason: str | None,
Log the first static fallback reason at debug level.
- _get_activation_fn(activation: str) torch.nn.Module#
Get activation function by name.
- Parameters:
activation – Name of the activation function.
- Returns:
PyTorch activation module.
.. note:: Defaults to Identity if activation name is not recognized.
- _get_init_fn(
- init_method: str,
- fan_in: int | None = None,
- fan_out: int | None = None,
Get initialization function by method name.
When the adapter weight is sharded across tensor-parallel ranks, Megatron initializes each shard locally, so a fan-dependent init function (xavier, kaiming) computed on the shard would give a distribution that depends on the TP size. Passing the full (unsharded)
fan_in/fan_outresolves those methods to a fixed-scale distribution computed from the full tensor dims, making initialization independent of the sharding. At TP=1 the resolved distributions are identical to the tensor-derived ones.- Parameters:
init_method – Name of the initialization method.
fan_in – Full (unsharded) input dimension of the weight, if known.
fan_out – Full (unsharded) output dimension of the weight, if known.
- Returns:
Initialization function.
- Raises:
NotImplementedError – If init_method is not supported.
- forward(x: torch.Tensor, *args, **kwargs) torch.Tensor#
Forward pass of the parallel linear adapter.
Performs the adaptation computation with proper handling of parallel communication patterns, dropout, and expert routing for MoE scenarios.
- Parameters:
x – Input tensor.
- Returns:
Adapted output tensor with scaling applied.
- local_experts_per_rank() int#
Return the number of global expert slots owned by this EP rank.
- _uses_grouped_expert_sharding() bool#
Return whether this shared adapter needs an explicit expert axis.
Broadcast shared expert adapter parameters from EP group rank zero.
Keep shared grouped-expert adapters synchronized across EP ranks.
MCore’s expert DDP only reduces over expert-DP; :func:
mark_expert_parallel_replicatedadds the cross-EP sum (once per step from the finalize step, with a per-layer fallback hook until then).
Return the adapter weights shared by every expert on this EP rank.
- _expert_axis_info(
- sharded_offsets: Tuple,
Return the global expert-axis sharding metadata for this rank.
- _keep_expert_extra_state() bool#
Keep one unsharded adapter extra-state entry.
- _set_expert_replica_ids(
- *state_dicts: megatron.core.dist_checkpointing.mapping.ShardedStateDict,
Mark expert adapter replicas across expert data-parallel ranks.
- _apply_expert_axis_factory(
- sharded_tensor: megatron.core.dist_checkpointing.mapping.ShardedTensor,
- sharded_offsets: Tuple,
- *,
- split_swiglu: bool = False,
Map one shared 2D adapter tensor to this rank’s global expert slots.
- sharded_state_dict(
- prefix: str = '',
- sharded_offsets: Tuple = (),
- metadata: Optional[Dict] = None,
- mamba_dim_info: Optional[Dict] = None,
Create sharded state dictionary for distributed checkpointing.
Special treatment is given to the linear_fc1 adapter since tensor parallelism is sharded separately for the two logical matrices (gate and up) in SwiGLU.
- Parameters:
prefix – Prefix for parameter names.
sharded_offsets – Offsets for sharded parameters.
metadata – Additional metadata for sharding.
- Returns:
Sharded state dictionary for distributed checkpointing.
- bridge.peft.utils._divide_exact(value: int, divisor: int, name: str) int#
Divide
valuebydivisorand raise when the result would be fractional.
- bridge.peft.utils._apply_grouped_expert_swiglu_sharded_factory(
- original_sh_ten: megatron.core.dist_checkpointing.mapping.ShardedTensor,
- sharded_offsets: Tuple,
- singleton_local_shards: bool = False,
Split grouped-expert SwiGLU tensors along the fused hidden axis for checkpointing.
- bridge.peft.utils._append_rank_offset(
- rank_offsets: List[Tuple[int, int, int]],
- axis: int,
- rank: int,
- axis_fragments: int,
Append a sharding offset, combining fragmentations when the axis is already sharded.
- bridge.peft.utils._make_grouped_expert_sharded_tensor(
- tensor: torch.Tensor,
- key: str,
- *,
- tp_axis: Optional[int],
- sharded_offsets: Tuple,
- pg_collection: megatron.core.process_groups_config.ProcessGroupCollection | None,
- ep_size_fallback: int = 1,
- etp_size_fallback: int = 1,
Build a sharded tensor for packed grouped-expert weights.
Grouped-expert LoRA weights shard two independent local axes: the packed expert axis across EP and the adapter matrix axis across expert TP.
- class bridge.peft.utils._GroupedExpertAdapterWeight(weight: torch.Tensor)#
Bases:
torch.nn.ModuleCallable parameter container so DDP forward pre-hooks see grouped LoRA weights.
Initialization
- forward(
- indices: Optional[List[int]] = None,
- class bridge.peft.utils.GroupedExpertLinearAdapter(
- in_features: int,
- out_features: int,
- dim: int,
- *,
- num_local_experts: int,
- base_linear_name: str,
- activation: str = 'swish',
- column_init_method: str = 'xavier',
- row_init_method: str = 'zero',
- input_is_parallel: bool = False,
- dropout: float = 0.0,
- model_parallel_config: Optional[megatron.core.ModelParallelConfig] = None,
- alpha: Optional[float] = None,
- dropout_position: str = 'pre',
- base_linear_is_parallel: bool = True,
- params_device: Optional[torch.device] = None,
- params_dtype: Optional[torch.dtype] = None,
- pg_collection: megatron.core.process_groups_config.ProcessGroupCollection | None = None,
Bases:
torch.nn.ModuleLoRA adapter with one low-rank pair per local grouped MoE expert.
Initialization
Initialize grouped-expert LoRA weights for one adapter per local expert.
- _extract_expert_splits(
- args: Tuple,
- kwargs: Dict,
Extract grouped-expert token splits from wrapped-module call arguments.
- _gather_along_last_dim(tensor: torch.Tensor) torch.Tensor#
Gather a tensor across expert TP ranks by concatenating its last dimension.
- _can_use_grouped_mm(x: torch.Tensor) bool#
Return whether the grouped GEMM fast path is supported for this input.
- _is_te_fp8_enabled() bool#
Return whether Transformer Engine’s FP8 autocast context is active.
- _can_use_te_grouped_linear_fp8(x: torch.Tensor) bool#
Return whether TE can run the grouped adapter weights through FP8.
- _get_te_grouped_linear_helper(
- *,
- projection: str,
- num_gemms: int,
- in_features: int,
- out_features: int,
- params_dtype: torch.dtype,
- device: torch.device,
Create or reuse a meta-device TE helper that owns FP8 runtime state.
- _forward_te_grouped_linear_fp8(
- x: torch.Tensor,
- *,
- weight: torch.Tensor,
- m_splits: List[int],
- projection: str,
- active_expert_indices: Tuple[int, ...],
Apply externally owned grouped adapter weights through TE’s FP8 kernel.
- _forward_te_grouped_linear_fp8_on_current_device(
- x: torch.Tensor,
- *,
- weight: torch.Tensor,
- m_splits: List[int],
- projection: str,
- active_expert_indices: Tuple[int, ...],
Run TE FP8 grouped linear after selecting the input tensor’s CUDA device.
- _build_grouped_mm_offsets(
- m_splits: List[int],
- *,
- device: torch.device,
Build inclusive grouped_mm offsets from per-expert split sizes.
- _forward_grouped_projection(
- x: torch.Tensor,
- *,
- weight: torch.Tensor,
- m_splits: List[int],
- use_te_fp8: bool,
- projection: str,
- active_expert_indices: Tuple[int, ...],
- offs: Optional[torch.Tensor] = None,
Apply one grouped expert projection through the selected grouped backend.
- _forward_per_expert(
- x: torch.Tensor,
- *,
- expert_splits: List[int],
- expert_tp_size: int,
Apply the adapter using the per-expert fallback path.
- forward(x: torch.Tensor, *args, **kwargs) torch.Tensor#
Apply the local expert-specific LoRA update to grouped expert inputs.
- sharded_state_dict(
- prefix: str = '',
- sharded_offsets: Tuple = (),
- metadata: Optional[Dict] = None,
Create sharded state dictionary for grouped-expert adapter weights.
- class bridge.peft.utils.PackedPerExpertLinear(
- num_local_experts: int,
- in_features: int,
- out_features: int,
- *,
- init_method: Optional[Callable] = None,
- dtype: Optional[torch.dtype] = None,
- device: Optional[torch.device] = None,
Bases:
torch.nn.ModulePer-expert linear with a packed 3D weight
[N_local, out, in].Used as the per-expert side of :class:
SharedOuterGroupedExpertAdapter. Stores onenn.Parameter(3D) so Bridge’s adapter export sees a single.weightper side, matching thelinear_in.weight/linear_out.weightconvention in :mod:megatron.bridge.models.conversion.peft_bridge. Forward dispatches to :func:torch._grouped_mm(the same grouped GEMM kernel TE’s- Class:
te.pytorch.GroupedLinearcalls) via a single fused op with native autograd, which keeps rank kernel launch counts in lockstep so CP’s ring P2P does not deadlock.
Initialization
- forward(x: torch.Tensor, m_splits) Tuple[torch.Tensor, None]#
- sharded_state_dict(
- prefix: str = '',
- sharded_offsets: Tuple = (),
- metadata: Optional[Dict] = None,
Shard the packed 3D weight along dim 0 (experts) across EP ranks.
- in_features: int,
- out_features: int,
- dim: int,
- *,
- num_local_experts: int,
- base_linear_name: str,
- activation: str = 'swish',
- column_init_method: str = 'xavier',
- row_init_method: str = 'zero',
- input_is_parallel: bool = False,
- dropout: float = 0.0,
- model_parallel_config: Optional[megatron.core.ModelParallelConfig] = None,
- alpha: Optional[float] = None,
- dropout_position: str = 'pre',
- base_linear_is_parallel: bool = True,
- params_device: Optional[torch.device] = None,
- params_dtype: Optional[torch.dtype] = None,
- pg_collection: megatron.core.process_groups_config.ProcessGroupCollection | None = None,
Bases:
torch.nn.ModuleLoRA adapter for grouped expert MLP with shared-outer semantics.
Matches SGLang PR #21466’s
experts_shared_outer_loras=Truecontract:fc1 (gate_up): linear_in = SHARED (hidden -> rank) linear_out = PER-EXPERT (rank -> 2*intermediate)
fc2 (down): linear_in = PER-EXPERT (intermediate -> rank) linear_out = SHARED (rank -> hidden)
The shared side is an
is_expert=TrueColumnParallelLinear(fc1) orRowParallelLinear(fc2): the TP group is ETP (ETP=1 → local forward), DDP routes the weight through the EDP group, and- Func:
mark_expert_parallel_replicatedkeeps the logically-replicated cross-EP axis in sync (summed once per step by- Func:
allreduce_expert_parallel_replicated_grads).
The per-expert side is :class:
PackedPerExpertLinear(packed 3D weight- func:
torch._grouped_mm) — kept as a single.weightParameter so Bridge’s adapter-export materializer (which readslinear_in.weight/linear_out.weight) sees a standard single-weight linear per side.
Differs from
ParallelLinearAdapterin__init__andforward;sharded_state_dictis specialized for the packed 3D per-expert side.Initialization
Initialize shared-outer LoRA weights with one shared and one per-expert side.
Forward.
m_splitsis the tokens-per-expert split passed through from the base TEGroupedLinear; required for the per-expert side.
- prefix: str = '',
- sharded_offsets: Tuple = (),
- metadata: Optional[Dict] = None,
Create sharded state dictionary for mixed shared/per-expert adapter weights.