Skip to main content

TensorGradAccumulator

Struct TensorGradAccumulator 

Source
pub struct TensorGradAccumulator { /* private fields */ }
Expand description

Accumulates gradients across mini-batches before an optimizer step.

§Typical usage

use ipfrs_tensorlogic::grad_accumulator::{
    TensorGradAccumulator, AccumulatorConfig, AccumulationMode,
};

let config = AccumulatorConfig {
    accumulation_steps: 2,
    mode: AccumulationMode::Mean,
    max_grad_norm: Some(1.0),
};
let mut acc = TensorGradAccumulator::new(config);

// First mini-batch
acc.accumulate("weight", &[0.5, -0.3]).expect("example: should succeed in docs");
assert!(!acc.is_ready());

// Second mini-batch
acc.accumulate("weight", &[0.7, 0.1]).expect("example: should succeed in docs");
assert!(acc.is_ready());

// Retrieve accumulated gradients and reset
let grads = acc.step().expect("example: should succeed in docs");
assert!(grads.contains_key("weight"));

Implementations§

Source§

impl TensorGradAccumulator

Source

pub fn new(config: AccumulatorConfig) -> Self

Create a new accumulator with the given configuration.

Source

pub fn accumulate( &mut self, name: &str, gradients: &[f64], ) -> Result<(), String>

Add gradients for the named parameter to the accumulation buffer.

If the buffer for name already exists its length must match gradients.len(), otherwise an error is returned. On the first call for a given name the buffer is created with the supplied length.

After all parameter gradients for a mini-batch have been added the caller should increment the internal step counter by calling accumulate for every parameter in each mini-batch.

Source

pub fn is_ready(&self) -> bool

Returns true when every buffer has accumulated at least accumulation_steps contributions.

Source

pub fn step(&mut self) -> Result<HashMap<String, Vec<f64>>, String>

Consume the accumulated gradients and return the final values.

  • In AccumulationMode::Mean mode each gradient vector is divided by the number of steps that were accumulated.
  • If max_grad_norm is configured, gradient vectors whose L2 norm exceeds it are rescaled.
  • All buffers are cleared after a successful step.

Returns an error if the accumulator is not ready (see is_ready).

Source

pub fn clip_grad_norm(gradients: &mut [f64], max_norm: f64) -> f64

Clip a gradient vector in-place so that its L2 norm does not exceed max_norm.

Returns the original L2 norm (before any scaling).

Source

pub fn get_buffer(&self, name: &str) -> Option<&GradBuffer>

Borrow the buffer for the named parameter, if it exists.

Source

pub fn buffer_count(&self) -> usize

Number of parameter buffers currently tracked.

Source

pub fn reset(&mut self)

Clear all buffers and reset the step counter. Lifetime statistics (total_accumulations, total_clips) are preserved.

Source

pub fn current_step(&self) -> usize

Current accumulation step (0-based within the current window).

Source

pub fn stats(&self) -> AccumulatorStats

Return a snapshot of the accumulator’s statistics.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Allocation for T
where T: RefUnwindSafe + Send + Sync,

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts 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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts 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
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more