pub trait Optimizer {
// Required method
fn step(
&mut self,
name: &str,
shape: &[usize],
param: &mut [f32],
grad: &[f32],
);
// Provided methods
fn step_batch(&mut self, items: &mut [OptItem<'_>]) { ... }
fn end_iteration(&mut self) { ... }
fn set_lr(&mut self, _lr: f32) { ... }
fn lr_scale(&self, _name: &str) -> f32 { ... }
}Expand description
Optimizers for Func::train_step (re-exported from rlx_optim).
Available with the optim feature.
Required Methods§
Provided Methods§
Sourcefn step_batch(&mut self, items: &mut [OptItem<'_>])
fn step_batch(&mut self, items: &mut [OptItem<'_>])
Batched step over ALL parameters in one call. Default: sequential
step per item — bit-identical to the per-parameter loop. Optimizers
whose parameter groups are independent (e.g. Muon on the 2-D weight
matrices vs AdamW on the embeddings/biases/norms) can override this to
run the groups on separate threads; because the groups touch disjoint
parameters and disjoint optimizer state, the result is bit-for-bit the
same as the serial loop — only the wall-clock (the CPU-side optimizer
bubble) shrinks toward max(group_times) instead of their sum.
Sourcefn end_iteration(&mut self)
fn end_iteration(&mut self)
Advance the global step counter. Most algorithms increment per
call to step, so most implementations leave this a no-op.
Sourcefn set_lr(&mut self, _lr: f32)
fn set_lr(&mut self, _lr: f32)
Set the base learning rate (for LR schedules / warmup). Default is a
no-op for algorithms without a scalar lr (e.g. Adafactor’s relative
step size); every algorithm in this crate that has an lr field
overrides this to update it.
Sourcefn lr_scale(&self, _name: &str) -> f32
fn lr_scale(&self, _name: &str) -> f32
Per-tensor multiplier on the effective learning rate. Default
is 1.0 for every name. Override when wrapping this crate to
support per-name LR schedules (e.g. embedding-vs-attention
splits, or the Gaussian-splat attribute-typed LR setup). The
CPU impls in this crate currently honor this only when the
caller passes a pre-scaled lr for the relevant call —
backends are encouraged to consult it inside their fused
kernel.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".