pub struct QLora { /* private fields */ }Expand description
A Reparameterizer implementing QLoRA: it quantizes the (frozen) base weights and
attaches full-precision trainable LoRA adapters to 2-D weights.
It is applied via Module::apply_qlora.
The quantized base is kept at rest in its low-bit representation; the adapter contribution is
added on top during the forward pass (the base is dequantized on the fly when composed).
Module-owned control flags are left unchanged, as with Lora.
§Memory limitations
QLoRA reduces stored base-weight memory and trains only the adapter factors, but still
composes a dense effective weight as dequantize(base) + scale * (a @ b). For a linear
projection whose input requires gradients, autodiff retains that dense weight for backward
and computes a full weight-shaped gradient before propagating into the factors. Peak training
memory can therefore be substantially higher than the packed weights and adapters alone suggest.
Fusion can avoid a separate dequantized base allocation, but does not eliminate all of these
dense intermediates.
Module::valid preserves the packed base and adapters.
Explicitly calling Module::materialize merges them
into dense weights; requantization must be requested separately.
Implementations§
Trait Implementations§
Source§impl Reparameterizer for QLora
impl Reparameterizer for QLora
Auto Trait Implementations§
impl Freeze for QLora
impl RefUnwindSafe for QLora
impl Send for QLora
impl Sync for QLora
impl Unpin for QLora
impl UnsafeUnpin for QLora
impl UnwindSafe for QLora
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> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
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