pub struct Lora {
pub rank: usize,
pub alpha: f64,
pub init_std: Option<f64>,
pub dtype: Option<FloatDType>,
pub param_group: ParamGroup,
}Expand description
A Reparameterizer that attaches LoRA adapters to 2-D weight parameters.
It is applied via Module::apply_lora.
All existing floating-point parameters are frozen. Matching rank-2 parameters receive
trainable LoRA adapters; other parameters remain frozen without adapters. No
model or layer code needs to change—the same Linear (and any other module) keeps working, now
producing base + scale * (a @ b) for adapted weights.
Module-owned control flags are left unchanged. Apply Module::freeze
before LoRA if dropout, batch normalization running statistics and other training behavior in
the base module should also be disabled.
§Training state
Module::unfreeze and set_require_grad(true) deliberately
enable every dense parameter, including LoRA bases, and therefore switch to full fine-tuning.
To enable everything except the LoRA bases, retain a ParamGroup containing their exact
paths or IDs and call
unfreeze_group(ParamGroup::all().exclude(lora_base_group)).
use burn_core::module::{Lora, Module, ParamGroup};
let lora_bases = ParamGroup::from_paths(vec![
"encoder.weight",
"decoder.weight",
]);
model
.apply_lora(Lora::new(2, 4.0).set_param_group(lora_bases.clone()))
.unfreeze_group(ParamGroup::all().exclude(lora_bases))Fields§
§rank: usizeRank of the low-rank decomposition.
alpha: f64Scaling numerator; the adapter contribution is scaled by alpha / rank.
init_std: Option<f64>Standard deviation used to initialize the A factor. Defaults to 1 / rank.
dtype: Option<FloatDType>Precision the factors are built at. Defaults to the base weight’s own float dtype; a quantized base has none, so a model that computes in half precision over a packed base must say so here — the factors meet its activations and gradients in elementwise ops that do not promote.
param_group: ParamGroupThe parameter group on which to apply the LoRA.
Implementations§
Source§impl Lora
impl Lora
Sourcepub fn new(rank: usize, alpha: f64) -> Self
pub fn new(rank: usize, alpha: f64) -> Self
Create a new LoRA reparameterizer with the given rank and alpha.
Sourcepub fn set_param_group(self, group: ParamGroup) -> Self
pub fn set_param_group(self, group: ParamGroup) -> Self
Set the parameter group on which to apply LoRA adapters.
Sourcepub fn set_dtype(self, dtype: FloatDType) -> Self
pub fn set_dtype(self, dtype: FloatDType) -> Self
Set the precision the adapter factors are built at.
Trait Implementations§
Auto Trait Implementations§
impl Freeze for Lora
impl RefUnwindSafe for Lora
impl Send for Lora
impl Sync for Lora
impl Unpin for Lora
impl UnsafeUnpin for Lora
impl UnwindSafe for Lora
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,
impl<T> ErasedDestructor for Twhere
T: 'static,
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 more