Fp8KvCalibration

Struct Fp8KvCalibration 

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

2026-09-25: The calibrator of one attention layer. observe takes &self; the state sits behind a Mutex.

Implementations§

Source§

impl Fp8KvCalibration

Source

pub fn new( attn_layer_idx: usize, window_tokens: usize, headroom: f32, gpu: &dyn GpuBackend, ) -> Result<Self>

2026-09-25: Build the calibrator for attention layer attn_layer_idx.

window_tokens is --fp8-kv-calibration-tokens, clamped to MAX_STAGED_TOKENS with a warning. 1 freezes on the first observe and stages nothing. The attention initializer builds no calibrator for 0 (qwen3_attention/init.rs).

headroom is --fp8-kv-headroom; a value below 1.0 is clamped to 1.0 with a warning, because it would clip the window’s own amax.

Errors if the bf16_absmax kernel is missing or the 8-byte absmax buffer cannot be allocated or zeroed.

Source

pub fn is_calibrating(&self) -> bool

2026-09-25: True until the scales freeze.

Source

pub fn scales(&self) -> (f32, f32)

2026-09-25: (k_scale, v_scale): PROVISIONAL_SCALE inside the window, the frozen scales after it.

Source

pub fn observe( &self, gpu: &dyn GpuBackend, k_data: DevicePtr, v_data: DevicePtr, num_tokens: u32, num_kv_heads: u32, head_dim: u32, stream: u64, target: &Fp8KvWriteTarget, ) -> Result<()>

2026-09-25: Fold this batch’s BF16 K/V ([num_tokens, num_kv_heads, head_dim]) into the window.

Inside the window it reduces the absmax on the device, synchronizes the stream to read it back, and stages the batch. The observe that reaches the window freezes the scales and replays the staged batches into target’s pools at them. Call it after the K/V projections and before the cache write, which then uses Self::scales. After the freeze it reduces only when CalibrationState::should_observe asks, for the opt-in EMA path.

Trait Implementations§

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<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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> 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.
§

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

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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

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

§

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

§

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