monkeypatch.models.mamba.modeling
monkeypatch.models.mamba.modeling
Sample-packing patches for the pure-SSM transformers models: Mamba, Mamba2, Falcon-Mamba.
None of these forwards accept position_ids, so the ForCausalLM wrapper turns
them into seq_idx and stashes the boundaries on every block, which passes them
to its mixer as a kwarg. The mixers forward kwargs into their kernels, so Mamba2
needs nothing more than a live kernel that takes seq_idx.
Mamba1’s selective scan has no such argument, so a packed row is scattered into
right-padded per-document batches for the scan alone (the conv resets through
seq_idx) and gathered back: exact for real tokens, padding costs only the
scan. Its fused training kernel bakes in the whole row, so it is disabled for
packed batches and the forward continues on the unfused branch.
Classes
| Name | Description |
|---|---|
| PackedSegments | Document boundaries of a packed batch, with a lazily built scatter plan. |
PackedSegments
monkeypatch.models.mamba.modeling.PackedSegments(seq_idx, _plan=None)Document boundaries of a packed batch, with a lazily built scatter plan.
Attributes
| Name | Description |
|---|---|
| plan | [(index, mask)] groups, each [docs, max_len] into the flat B*T axis. |
Functions
| Name | Description |
|---|---|
| build_segment_plan | Group documents by length so no group pads beyond pad_factor of its tokens. |
| packed_selective_scan | Run scan_fn on each packed document separately; returns [B, D, T]. |
build_segment_plan
monkeypatch.models.mamba.modeling.build_segment_plan(
seq_idx,
pad_factor=PAD_FACTOR,
)Group documents by length so no group pads beyond pad_factor of its tokens.
packed_selective_scan
monkeypatch.models.mamba.modeling.packed_selective_scan(
scan_fn,
segments,
u,
delta,
A,
B,
C,
D,
z,
delta_bias,
**kwargs,
)Run scan_fn on each packed document separately; returns [B, D, T].