pub struct LoRALayer { /* private fields */ }Expand description
LoRA layer: adds trainable low-rank adaptation to a frozen base weight
Implementations§
Source§impl LoRALayer
impl LoRALayer
Sourcepub fn new(
base_weight: Tensor,
d_out: usize,
d_in: usize,
rank: usize,
alpha: f32,
) -> Self
pub fn new( base_weight: Tensor, d_out: usize, d_in: usize, rank: usize, alpha: f32, ) -> Self
Create a new LoRA layer
§Arguments
base_weight- Frozen pretrained weight [d_out * d_in]d_out- Output dimensiond_in- Input dimensionrank- LoRA rank (typically 4, 8, 16, 32, or 64)alpha- LoRA scaling parameter (often same as rank)
§Returns
LoRA layer with randomly initialized A (Gaussian) and zero-initialized B
Sourcepub fn new_with_scaling(
base_weight: Tensor,
d_out: usize,
d_in: usize,
rank: usize,
alpha: f32,
scaling: LoRAScaling,
) -> Self
pub fn new_with_scaling( base_weight: Tensor, d_out: usize, d_in: usize, rank: usize, alpha: f32, scaling: LoRAScaling, ) -> Self
Create a new LoRA layer with explicit scaling mode (ENT-LoRA-004)
Use LoRAScaling::RsLoRA for rank-stable training (recommended for rank > 16).
Sourcepub fn with_scale(self, scale: f32) -> Self
pub fn with_scale(self, scale: f32) -> Self
Override the LoRA scaling factor.
Used when restoring a serialized adapter whose scale was produced by a
non-Standard mode (e.g. rsLoRA, where scale = alpha / sqrt(rank) rather than
the alpha / rank that LoRALayer::new recomputes). The adapter stores the
resulting scale value, not the scaling mode, so restoration sets it directly.
Sourcepub fn with_dropout(self, p: f32) -> Self
pub fn with_dropout(self, p: f32) -> Self
Set the LoRA dropout probability (PMAT-879).
Matches HF PEFT lora_dropout: dropout is applied to the input x before
the down-projection A. p is clamped to [0.0, 1.0); 0.0 disables
dropout. Dropout is only active in training mode (see LoRALayer::train).
Sourcepub fn with_dropout_seed(self, seed: u64) -> Self
pub fn with_dropout_seed(self, seed: u64) -> Self
Set the deterministic dropout RNG seed (PMAT-879).
With a fixed seed, dropout masks are fully reproducible, which makes the training-mode forward path testable.
Sourcepub fn train(&mut self)
pub fn train(&mut self)
Switch the layer to training mode. Dropout is active when dropout > 0.0.
Sourcepub fn eval(&mut self)
pub fn eval(&mut self)
Switch the layer to evaluation mode (the default). Dropout is the identity,
so inference output is unchanged — matching PEFT nn.Dropout in eval.
Sourcepub fn set_training(&mut self, training: bool)
pub fn set_training(&mut self, training: bool)
Set training/eval mode explicitly.
Sourcepub fn is_training(&self) -> bool
pub fn is_training(&self) -> bool
Whether the layer is in training mode.
Sourcepub fn merge(&mut self)
pub fn merge(&mut self)
Merge LoRA weights into base weight: W’ = W + scale * (B @ A)
After merging, forward pass only uses W’ (more efficient). This is typically done for inference.
Sourcepub fn unmerge(&mut self)
pub fn unmerge(&mut self)
Unmerge LoRA weights from base weight: W = W’ - scale * (B @ A)
Reverses the merge operation. Useful for continuing training or switching adapters.
Sourcepub fn base_weight(&self) -> &Tensor
pub fn base_weight(&self) -> &Tensor
Get reference to base weight matrix
Sourcepub fn lora_a_mut(&mut self) -> &mut Tensor
pub fn lora_a_mut(&mut self) -> &mut Tensor
Get mutable reference to LoRA A matrix
Sourcepub fn lora_b_mut(&mut self) -> &mut Tensor
pub fn lora_b_mut(&mut self) -> &mut Tensor
Get mutable reference to LoRA B matrix
Sourcepub fn trainable_params(&mut self) -> Vec<&mut Tensor>
pub fn trainable_params(&mut self) -> Vec<&mut Tensor>
Get trainable parameters (A and B)
Trait Implementations§
Auto Trait Implementations§
impl !Freeze for LoRALayer
impl !RefUnwindSafe for LoRALayer
impl !Send for LoRALayer
impl !Sync for LoRALayer
impl !UnwindSafe for LoRALayer
impl Unpin for LoRALayer
impl UnsafeUnpin for LoRALayer
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self to use its Binary implementation when Debug-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self to use its Display implementation when
Debug-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self to use its LowerExp implementation when
Debug-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self to use its LowerHex implementation when
Debug-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self to use its Octal implementation when Debug-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self to use its Pointer implementation when
Debug-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self to use its UpperExp implementation when
Debug-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self to use its UpperHex implementation when
Debug-formatted.Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self, then passes self.as_ref() into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self, then passes self.as_mut() into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self, then passes self.deref() into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B> of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B> of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R> view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R> view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap() only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow() only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut() only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref() only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut() only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref() only in debug builds, and is erased in release
builds.