pub struct Mamba1<B: Backend> {
pub in_proj: Linear<B>,
pub conv1d: Conv1d<B>,
pub x_proj: Linear<B>,
pub dt_proj: Linear<B>,
pub a_log: Param<Tensor<B, 2>>,
pub d: Param<Tensor<B, 1>>,
pub out_proj: Linear<B>,
}Fields§
§in_proj: Linear<B>Input channel: d_model. Output channel: 2 * d_inner.
conv1d: Conv1d<B>Input channel: d_inner. Output channel: d_inner.
x_proj: Linear<B>Input channel: d_inner. Output channel: dt_rank + 2 * d_state.
dt_proj: Linear<B>Input channel: dt_rank. Output channel: d_inner.
a_log: Param<Tensor<B, 2>>Dims: [d_inner, d_state].
d: Param<Tensor<B, 1>>Dims: [d_inner].
out_proj: Linear<B>Input channel: d_inner. Output channel: d_model.
Implementations§
Source§impl<B: Backend> Mamba1<B>
impl<B: Backend> Mamba1<B>
Sourcepub fn step(
&self,
x: Tensor<B, 2>,
cache: Mamba1Cache<B>,
) -> (Tensor<B, 2>, Mamba1Cache<B>)
pub fn step( &self, x: Tensor<B, 2>, cache: Mamba1Cache<B>, ) -> (Tensor<B, 2>, Mamba1Cache<B>)
§Shapes
- Input [batch, d_model]
- Output [batch, d_model]
Sourcepub fn ss_step(
&self,
u: Tensor<B, 2>,
cache: Mamba1Cache<B>,
) -> (Tensor<B, 2>, Mamba1Cache<B>)
pub fn ss_step( &self, u: Tensor<B, 2>, cache: Mamba1Cache<B>, ) -> (Tensor<B, 2>, Mamba1Cache<B>)
Runs the SSM. See:
- Algorithm 2 in Section 3.2 from the Mamba paper;
- run_SSM(A, B, C, u) from The Annotated S4.
§Shapes
- Input u [batch, d_inner]
- Output [batch, d_inner]
Sourcepub fn selective_scan_step(
delta: Tensor<B, 2>,
a: Tensor<B, 2>,
b: Tensor<B, 2>,
c: Tensor<B, 2>,
d: Tensor<B, 1>,
u: Tensor<B, 2>,
cache: Mamba1Cache<B>,
) -> (Tensor<B, 2>, Mamba1Cache<B>)
pub fn selective_scan_step( delta: Tensor<B, 2>, a: Tensor<B, 2>, b: Tensor<B, 2>, c: Tensor<B, 2>, d: Tensor<B, 1>, u: Tensor<B, 2>, cache: Mamba1Cache<B>, ) -> (Tensor<B, 2>, Mamba1Cache<B>)
Selective Scan.
Does selective scan algorithm. See:
- Section 2 State Space Models from the Mamba paper;
- Algorithm 2 in Section 3.2 from the Mamba paper;
- run_SSM(A, B, C, u) from The Annotated S4.
§Shapes
- Input delta [batch, d_inner]
- Input a [d_inner, d_state]
- Input b [batch, d_state]
- Input c [batch, d_state]
- Input d [d_inner]
- Input u [batch, d_inner]
- Output [batch, d_inner]
Source§impl<B: Backend> Mamba1<B>
impl<B: Backend> Mamba1<B>
Sourcepub fn ss(&self, u: Tensor<B, 3>) -> Tensor<B, 3>
pub fn ss(&self, u: Tensor<B, 3>) -> Tensor<B, 3>
§Shapes
- Input [batch, sequence, d_inner]
- Output [batch, sequence, d_inner]
Sourcepub fn selective_scan(
delta: Tensor<B, 3>,
a: Tensor<B, 2>,
b: Tensor<B, 3>,
c: Tensor<B, 3>,
d: Tensor<B, 1>,
u: Tensor<B, 3>,
) -> Tensor<B, 3>
pub fn selective_scan( delta: Tensor<B, 3>, a: Tensor<B, 2>, b: Tensor<B, 3>, c: Tensor<B, 3>, d: Tensor<B, 1>, u: Tensor<B, 3>, ) -> Tensor<B, 3>
Selective Scan.
Does selective scan algorithm. See:
- Section 2 State Space Models from the Mamba paper;
- Algorithm 2 in Section 3.2 from the Mamba paper;
- run_SSM(A, B, C, u) from The Annotated S4.
§Shapes
- Input delta [sequence, batch, d_inner]
- Input a [d_inner, d_state]
- Input b [batch, sequence, d_state]
- Input c [sequence, batch, d_state]
- Input d [d_inner]
- Input u [batch, sequence, d_inner]
- Output [batch, sequence, d_inner]
Trait Implementations§
Source§impl<B> AutodiffModule<B> for Mamba1<B>where
B: AutodiffBackend + Backend,
<B as AutodiffBackend>::InnerBackend: Backend,
impl<B> AutodiffModule<B> for Mamba1<B>where
B: AutodiffBackend + Backend,
<B as AutodiffBackend>::InnerBackend: Backend,
Source§type InnerModule = Mamba1<<B as AutodiffBackend>::InnerBackend>
type InnerModule = Mamba1<<B as AutodiffBackend>::InnerBackend>
Inner module without auto-differentiation.
Source§fn valid(&self) -> Self::InnerModule
fn valid(&self) -> Self::InnerModule
Returns the same module, but on the inner backend without auto-differentiation.
Source§fn from_inner(module: Self::InnerModule) -> Self
fn from_inner(module: Self::InnerModule) -> Self
Wraps an inner module back into an auto-diff module.
Source§impl<B> HasAutodiffModule<B> for Mamba1<B::InnerBackend>where
B: AutodiffBackend + Backend,
<B as AutodiffBackend>::InnerBackend: Backend,
impl<B> HasAutodiffModule<B> for Mamba1<B::InnerBackend>where
B: AutodiffBackend + Backend,
<B as AutodiffBackend>::InnerBackend: Backend,
Source§type TrainModule = Mamba1<B>
type TrainModule = Mamba1<B>
The module with auto-differentiation.
Source§impl<B: Backend> Module<B> for Mamba1<B>
impl<B: Backend> Module<B> for Mamba1<B>
Source§type Record = Mamba1Record<B>
type Record = Mamba1Record<B>
Type to save and load the module.
Source§fn load_record(self, record: Self::Record) -> Self
fn load_record(self, record: Self::Record) -> Self
Load the module state from a record.
Source§fn into_record(self) -> Self::Record
fn into_record(self) -> Self::Record
Convert the module into a record containing the state.
Source§fn num_params(&self) -> usize
fn num_params(&self) -> usize
Get the number of parameters the module has, including all of its sub-modules.
Source§fn visit<Visitor: ModuleVisitor<B>>(&self, visitor: &mut Visitor)
fn visit<Visitor: ModuleVisitor<B>>(&self, visitor: &mut Visitor)
Visit each tensor parameter in the module with a visitor.
Source§fn map<Mapper: ModuleMapper<B>>(self, mapper: &mut Mapper) -> Self
fn map<Mapper: ModuleMapper<B>>(self, mapper: &mut Mapper) -> Self
Map each tensor parameter in the module with a mapper.
Source§fn collect_devices(&self, devices: Devices<B>) -> Devices<B>
fn collect_devices(&self, devices: Devices<B>) -> Devices<B>
Return all the devices found in the underneath module tree added to the given vector
without duplicates.
Source§fn to_device(self, device: &B::Device) -> Self
fn to_device(self, device: &B::Device) -> Self
Move the module and all of its sub-modules to the given device. Read more
Source§fn fork(self, device: &B::Device) -> Self
fn fork(self, device: &B::Device) -> Self
Fork the module and all of its sub-modules to the given device. Read more
§fn devices(&self) -> Vec<<B as BackendTypes>::Device>
fn devices(&self) -> Vec<<B as BackendTypes>::Device>
Return all the devices found in the underneath module tree without duplicates.
§fn train<AB>(self) -> Self::TrainModulewhere
AB: AutodiffBackend<InnerBackend = B>,
Self: HasAutodiffModule<AB>,
fn train<AB>(self) -> Self::TrainModulewhere
AB: AutodiffBackend<InnerBackend = B>,
Self: HasAutodiffModule<AB>,
Move the module and all of its sub-modules to the autodiff backend. Read more
§fn quantize_weights(self, quantizer: &mut Quantizer) -> Self
fn quantize_weights(self, quantizer: &mut Quantizer) -> Self
Quantize the weights of the module.
Source§impl<B: Backend> ModuleDisplay for Mamba1<B>
impl<B: Backend> ModuleDisplay for Mamba1<B>
§fn format(&self, passed_settings: DisplaySettings) -> String
fn format(&self, passed_settings: DisplaySettings) -> String
Formats the module with provided display settings. Read more
§fn custom_settings(&self) -> Option<DisplaySettings>
fn custom_settings(&self) -> Option<DisplaySettings>
Custom display settings for the module. Read more
§fn custom_content(&self, _content: Content) -> Option<Content>
fn custom_content(&self, _content: Content) -> Option<Content>
Custom attributes for the module. Read more
Auto Trait Implementations§
impl<B> !Freeze for Mamba1<B>
impl<B> !RefUnwindSafe for Mamba1<B>
impl<B> Send for Mamba1<B>
impl<B> Sync for Mamba1<B>
impl<B> Unpin for Mamba1<B>
impl<B> UnsafeUnpin for Mamba1<B>where
<B as BackendTypes>::Device: UnsafeUnpin,
<B as BackendTypes>::FloatTensorPrimitive: UnsafeUnpin,
<B as BackendTypes>::QuantizedTensorPrimitive: UnsafeUnpin,
impl<B> !UnwindSafe for Mamba1<B>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more