pub struct ClassifyConfig {
pub num_classes: usize,
pub lora_rank: usize,
pub lora_alpha: f32,
pub learning_rate: f32,
pub epochs: usize,
pub max_seq_len: usize,
pub log_interval: usize,
pub batch_size: usize,
pub accumulation_steps: usize,
pub gradient_clip_norm: Option<f32>,
pub class_weights: Option<Vec<f32>>,
pub quantize_nf4: bool,
}Expand description
Classification fine-tuning pipeline configuration.
Fields§
§num_classes: usizeNumber of output classes
lora_rank: usizeLoRA rank
lora_alpha: f32LoRA alpha
learning_rate: f32Learning rate
epochs: usizeNumber of training epochs
max_seq_len: usizeMaximum sequence length
log_interval: usizeLog every N steps
batch_size: usizeMini-batch size for train_batch().
Samples are processed one at a time (forward + backward), but the optimizer step is applied once per batch after accumulating gradients.
accumulation_steps: usizeNumber of gradient accumulation steps.
Allows effective batch size = batch_size * accumulation_steps without
increasing peak memory beyond a single micro-batch forward pass.
gradient_clip_norm: Option<f32>Maximum gradient norm for clipping.
When Some(max_norm), gradients are clipped to this L2 norm before
the optimizer step. None disables gradient clipping.
class_weights: Option<Vec<f32>>Per-class loss weights for imbalanced datasets.
When Some(weights), the cross-entropy loss for label c is multiplied
by weights[c]. Weights should sum to num_classes to preserve loss scale.
When None, all classes are weighted equally (weight = 1.0).
See SPEC-TUNE-2026-001 §9 for weight computation strategies.
quantize_nf4: boolQuantize frozen weights to NF4 (4-bit) for QLoRA training (default: false).
When enabled, uses CudaNf4TransformerBlock (~8x VRAM compression) instead
of CudaTransformerBlock. GPU backward pass is disabled (LoRA-only training).
Implementations§
Source§impl ClassifyConfig
impl ClassifyConfig
Sourcepub fn qlora_default(model_params: u64) -> Self
pub fn qlora_default(model_params: u64) -> Self
Create a QLoRA config with research-grounded defaults.
Every parameter traces to a published source:
| Parameter | Value | Source |
|---|---|---|
learning_rate | 2e-4 (≤13B) / 1e-4 (>13B) | Dettmers 2023 Table 9 |
lora_alpha | 2 × rank | Lightning AI experiments |
batch_size | 4 | RTX VRAM budget |
accumulation_steps | 4 | effective=16, Dettmers 2023 |
gradient_clip_norm | 1.0 | Standard practice |
epochs | 3 | Imbalanced classification |
Contract: provable-contracts/contracts/entrenar/qlora-hyperparameters-v1.yaml
Sourcepub fn validate_hyperparameters(
&self,
model_params: u64,
) -> HyperparamDiagnostics
pub fn validate_hyperparameters( &self, model_params: u64, ) -> HyperparamDiagnostics
Validate hyperparameters against research-grounded contracts.
Returns diagnostics (warnings/errors) for each violated contract. Does NOT block — caller decides whether to abort or proceed.
Contract: qlora-hyperparameters-v1.yaml (FALSIFY-HP-001..008)
Sourcepub fn validate_with_data(&self, stats: &DataStats) -> HyperparamDiagnostics
pub fn validate_with_data(&self, stats: &DataStats) -> HyperparamDiagnostics
Validate hyperparameters that depend on training data distribution.
Requires measuring the actual data (genchi genbutsu — go and see).
Contract: C-HP-004 (seq_len), C-HP-008 (epochs)
Trait Implementations§
Source§impl Clone for ClassifyConfig
impl Clone for ClassifyConfig
Source§fn clone(&self) -> ClassifyConfig
fn clone(&self) -> ClassifyConfig
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for ClassifyConfig
impl Debug for ClassifyConfig
Auto Trait Implementations§
impl Freeze for ClassifyConfig
impl RefUnwindSafe for ClassifyConfig
impl Send for ClassifyConfig
impl Sync for ClassifyConfig
impl Unpin for ClassifyConfig
impl UnsafeUnpin for ClassifyConfig
impl UnwindSafe for ClassifyConfig
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
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,
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.