Skip to main content

EnhancedDistributedTrainer

Struct EnhancedDistributedTrainer 

Source
pub struct EnhancedDistributedTrainer<T: Optimizer + StatefulOptimizer> { /* private fields */ }
Expand description

Enhanced distributed trainer with modern GPU optimizations

Implementations§

Source§

impl<T: Optimizer + StatefulOptimizer + Clone> EnhancedDistributedTrainer<T>

Source

pub fn new(config: DistributedConfig, optimizer: T) -> Result<Self>

Create new enhanced distributed trainer

Source

pub fn register_model( &mut self, parameters: HashMap<String, Tensor>, ) -> Result<()>

Register model parameters for distributed training

Source

pub fn train_step( &mut self, gradients: HashMap<String, Tensor>, ) -> Result<TrainingStepResult>

Perform one training step with enhanced distributed optimizations.

The step compresses gradients with the configured codec, reduces them across the multi-node group when one is configured, and decompresses the result. The reduced gradients are retained; because this trainer holds parameter metadata only (see ParameterInfo), the caller — who owns the parameter tensors — applies them with EnhancedDistributedTrainer::apply_reduced_gradients or reads them via EnhancedDistributedTrainer::take_reduced_gradients.

Dynamic batch sizing runs only when device telemetry has been recorded for every device (see EnhancedDistributedTrainer::record_gpu_telemetry); without it there is nothing to base a resize on and the batch sizes are left alone.

Source

pub fn record_gpu_telemetry( &mut self, device_id: usize, sample: GpuTelemetrySample, ) -> Result<()>

Record a real telemetry reading for one device.

This crate cannot read a GPU itself: NVML and ROCm SMI are C libraries and the default build is pure Rust. Rather than inventing plausible numbers, every device metric stays None until the embedder calls this with values it obtained from the platform. Metrics gathered here drive dynamic batch sizing, bottleneck detection and auto-scaling, so a fabricated sample would propagate into real training decisions.

§Errors

Fails when device_id is not one of the configured devices or when the sample is out of range (see GpuTelemetrySample).

Source

pub fn take_reduced_gradients(&mut self) -> HashMap<String, Tensor>

Take the gradients produced by the last EnhancedDistributedTrainer::train_step, leaving the trainer empty.

Source

pub fn reduced_gradients(&self) -> &HashMap<String, Tensor>

Borrow the gradients produced by the last EnhancedDistributedTrainer::train_step.

Source

pub fn apply_reduced_gradients( &mut self, parameters: &mut HashMap<String, Tensor>, ) -> Result<usize>

Apply the gradients from the last EnhancedDistributedTrainer::train_step to parameters with this trainer’s optimizer.

Parameters are visited in sorted-name order so every rank performs the same update sequence. Returns the number of parameters updated.

§Errors

Fails when a gradient has no matching parameter — a silent skip would leave part of the model un-trained without any signal.

Source

pub fn get_training_stats(&self) -> DistributedTrainingStats

Get comprehensive training statistics.

gpu_utilization and memory_usage are empty when no device telemetry has been recorded; see EnhancedDistributedTrainer::record_gpu_telemetry.

Source

pub fn training_stats_report(&self) -> String

Render the training statistics as a human-readable report.

Prefer this over Self::print_training_stats inside libraries: it returns the text instead of writing to stdout.

Source

pub fn print_training_stats(&self)

Write Self::training_stats_report to stdout.

This is an explicit, caller-initiated escape hatch for binaries and examples; nothing on the training path writes to stdout. Library callers should prefer Self::log_training_stats, which routes the same report through the log facade so the host application controls the sink.

Source

pub fn log_training_stats(&self)

Emit Self::training_stats_report at info level through the log facade.

Source

pub fn checkpoint_due(&self) -> bool

Whether the fault handler considers a checkpoint due at the current step. The caller owns the model state and drives crate::advanced_distributed_features::SmartCheckpointManager.

Source

pub fn optimize_hyperparameters(&mut self) -> Result<T>

Optimize hyperparameters for the current distributed setup.

§Errors

Distributed-aware hyperparameter optimization is not implemented. The crate ships crate::hyperparameter_tuning, but wiring it here requires an evaluation callback (a way to run a trial and score it) that this trainer does not have. Rather than returning an unmodified clone of the optimizer while reporting success, this returns TrustformersError describing what is missing whenever auto-tuning is requested.

With config.monitoring.auto_tuning == false the call is a no-op and returns the current optimizer unchanged, which is honest: no optimization was requested and none was performed.

Auto Trait Implementations§

Blanket Implementations§

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 = !

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