pub struct MemoryHook {
pub name: String,
pub estimated_free_bytes: usize,
pub execution_overhead_bytes: usize,
pub priority: u32,
pub callback: Box<dyn Fn() -> usize + Send + Sync>,
}Expand description
A hook that can free memory or reduce memory demand before an OOM.
Hooks declare upfront how much memory they expect to free, so the memory guard can decide which hooks to call and in what order.
§Example: halving a batch when memory is tight
use ferrotorch_gpu::memory_guard::MemoryHook;
let hook = MemoryHook {
name: "halve_batch_size".into(),
estimated_free_bytes: 512 * 1024 * 1024, // expects to free ~512 MiB
execution_overhead_bytes: 4096, // metadata setup cost
priority: 10,
callback: Box::new(|| {
// ... split the batch, free old tensors ...
512 * 1024 * 1024 // actual bytes freed
}),
};Fields§
§name: StringHuman-readable name (e.g., "halve_batch_size", "free_kv_cache").
estimated_free_bytes: usizeEstimated bytes this hook will free when called.
execution_overhead_bytes: usizeExtra bytes this hook needs temporarily to execute (e.g., metadata setup for a batch split). If the available headroom is less than this overhead the hook is skipped.
priority: u32Priority: lower values fire first. Hooks at the same priority are called in registration order.
callback: Box<dyn Fn() -> usize + Send + Sync>The callback. Returns the actual bytes freed (may differ from the estimate).
Trait Implementations§
Auto Trait Implementations§
impl Freeze for MemoryHook
impl !RefUnwindSafe for MemoryHook
impl Send for MemoryHook
impl Sync for MemoryHook
impl Unpin for MemoryHook
impl UnsafeUnpin for MemoryHook
impl !UnwindSafe for MemoryHook
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
Mutably borrows from an owned value. Read more
Source§impl<T> DistributionExt for Twhere
T: ?Sized,
impl<T> DistributionExt for Twhere
T: ?Sized,
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>
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 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>
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