Skip to main content

NormOp

Enum NormOp 

Source
pub enum NormOp {
    Rms(Vec<f32>),
    LayerNormNoParams,
    None,
}
Expand description

The normalisation applied at one norm site.

Variants§

§

Rms(Vec<f32>)

RMSNorm with these learned weights. Every architecture on the generic path except the two families below.

§

LayerNormNoParams

Non-parametric LayerNorm: subtract the mean, divide by the standard deviation, no learned weight and no bias.

olmo (OLMo-1) and nothing else in llama.cpp. There is no LayerNorm(Vec<f32>) beside this because no architecture ferrox admits needs one: the weighted-LayerNorm rows (dbrx, nemotron, orion, stablelm, …) all refuse for other reasons too, and a variant with no caller is a variant that silently rots.

§

None

No norm at all: the branch reads the raw residual.

olmo2 and exaone4. NOT “an RMSNorm whose weights are all ones” – that would still divide by the RMS of the residual, and the whole point of this variant is that nothing is divided.

Implementations§

Source§

impl NormOp

Source

pub fn apply(&self, x: &[f32], eps: f32) -> Vec<f32>

The site’s output: rms_norm(x, w, eps), the non-parametric LayerNorm, or x itself.

Returns an owned vector in every arm, which is what every caller already had: rms_norm allocates too.

eps is ModelConfig::rms_norm_eps, which for a LayerNorm architecture is read from {arch}.attention.layer_norm_epsilon – llama.cpp’s f_norm_eps rather than f_norm_rms_eps. The two are one field here because no architecture reads both keys, and loader.rs already accepted either spelling into that field before this variant existed.

Source

pub fn rms_weights(&self) -> Option<&[f32]>

The weights a fused GPU kernel needs, or None when this site has no RMSNorm weights and the kernel therefore must not run.

Every fused Metal launch that bakes an RMSNorm into its kernel goes through here and falls back to the host body on None. See the module docs for why that is a ? and not a comment.

Trait Implementations§

Source§

impl Clone for NormOp

Source§

fn clone(&self) -> NormOp

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for NormOp

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for NormOp

Source§

fn eq(&self, other: &NormOp) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for NormOp

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
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, !>

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.