Skip to main content

AccessClass

Enum AccessClass 

Source
pub enum AccessClass {
    HotRecurrentMicrodecoder,
    HotRecurrentTalker,
    HotCodecDecoder,
    ColdTextEmbedding,
    EnrollmentSpeakerEncoder,
    EnrollmentCodecEncoder,
    Metadata,
}
Expand description

How the runtime touches a section. Drives the page-in policy.

Unknown values are refused rather than defaulted: a section whose access class we do not understand is one we cannot page correctly, and guessing “probably hot” for a 622 MB cold section is exactly the mistake that costs the microdecoder its cache residency.

Variants§

§

HotRecurrentMicrodecoder

The ~110 MB microdecoder hot pack, reread 15× per frame.

§

HotRecurrentTalker

The ~440 MB talker body, read once per frame across 28 layers.

§

HotCodecDecoder

The codec decoder, read once per frame.

§

ColdTextEmbedding

The ~622 MB text embedding: lazy, row-granular, never paged in wholesale.

§

EnrollmentSpeakerEncoder

Speaker encoder, needed only during enrollment.

§

EnrollmentCodecEncoder

Codec encoder, needed only during enrollment.

§

Metadata

Config, manifests, and the license notice.

Implementations§

Source§

impl AccessClass

Source

pub const fn as_str(self) -> &'static str

The stable wire string.

Examples found in repository?
examples/fttsq_census.rs (line 61)
41fn main() {
42    let path = std::env::args().nth(1).unwrap_or_else(|| {
43        eprintln!("usage: fttsq_census <artifact.fttsq>");
44        std::process::exit(2);
45    });
46    let mapped = match MappedFttsq::open(&path) {
47        Ok(mapped) => mapped,
48        Err(error) => {
49            eprintln!("refusing census: {error}");
50            std::process::exit(1);
51        }
52    };
53    let reader = mapped.reader();
54    let file_bytes = mapped.len() as u64;
55
56    let mut class_bytes: BTreeMap<&str, u64> = BTreeMap::new();
57    let mut sections_total = 0_u64;
58    for section in reader.sections() {
59        sections_total += section.length;
60        *class_bytes
61            .entry(section.access_class.as_str())
62            .or_default() += section.length;
63        row(
64            "section",
65            &[
66                ("name", quoted(&section.name)),
67                ("access_class", quoted(section.access_class.as_str())),
68                ("bytes", section.length.to_string()),
69                ("share_of_file", share(section.length, file_bytes)),
70            ],
71        );
72    }
73
74    // Dtype split inside each section: separates payload from quantization-scale overhead and
75    // shows how much of a "quantized" section is still wide.
76    let mut dtype_bytes: BTreeMap<(String, &str), u64> = BTreeMap::new();
77    let mut scale_bytes: BTreeMap<String, u64> = BTreeMap::new();
78    let scale_names: std::collections::BTreeSet<&str> = reader
79        .tensors()
80        .iter()
81        .filter_map(|tensor| tensor.scales.as_deref())
82        .collect();
83    for tensor in reader.tensors() {
84        *dtype_bytes
85            .entry((tensor.section.clone(), tensor.dtype.as_str()))
86            .or_default() += tensor.length;
87        if scale_names.contains(tensor.name.as_str()) {
88            *scale_bytes.entry(tensor.section.clone()).or_default() += tensor.length;
89        }
90    }
91    for ((section, dtype), bytes) in &dtype_bytes {
92        row(
93            "section_dtype",
94            &[
95                ("section", quoted(section)),
96                ("dtype", quoted(dtype)),
97                ("bytes", bytes.to_string()),
98                ("share_of_file", share(*bytes, file_bytes)),
99            ],
100        );
101    }
102    for (section, bytes) in &scale_bytes {
103        row(
104            "scale_overhead",
105            &[
106                ("section", quoted(section)),
107                ("bytes", bytes.to_string()),
108                ("share_of_file", share(*bytes, file_bytes)),
109            ],
110        );
111    }
112
113    for (class, bytes) in &class_bytes {
114        row(
115            "access_class",
116            &[
117                ("access_class", quoted(class)),
118                ("bytes", bytes.to_string()),
119                ("share_of_file", share(*bytes, file_bytes)),
120            ],
121        );
122    }
123    row(
124        "total",
125        &[
126            ("file_bytes", file_bytes.to_string()),
127            ("section_bytes", sections_total.to_string()),
128            (
129                "header_directory_bytes",
130                (file_bytes - sections_total).to_string(),
131            ),
132            ("model_family", quoted(reader.model_family())),
133        ],
134    );
135}
Source

pub fn parse(text: &str) -> Option<Self>

Parses a wire string, refusing anything unrecognized.

Source

pub const fn is_hot(self) -> bool

Whether this section should be resident during steady-state decode.

Consumed by the page-in policy: hot classes are advised resident, the cold embedding is explicitly not, and enrollment sections are only touched by the voice compiler.

Source

pub const fn is_row_granular(self) -> bool

Whether the runtime must access this section row-granularly rather than as a unit.

Source§

impl AccessClass

Source

pub const fn page_policy(self) -> PagePolicy

The page-in policy for this access class. Total, and the only place the mapping is defined.

Trait Implementations§

Source§

impl Clone for AccessClass

Source§

fn clone(&self) -> AccessClass

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 Copy for AccessClass

Source§

impl Debug for AccessClass

Source§

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

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

impl Display for AccessClass

Source§

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

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

impl Eq for AccessClass

Source§

impl Ord for AccessClass

Source§

fn cmp(&self, other: &AccessClass) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 (const: unstable) · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 (const: unstable) · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 (const: unstable) · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for AccessClass

Source§

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

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

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

Inequality operator !=. Read more
Source§

impl PartialOrd for AccessClass

Source§

fn partial_cmp(&self, other: &AccessClass) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 (const: unstable) · Source§

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

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 (const: unstable) · Source§

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

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 (const: unstable) · Source§

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

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 (const: unstable) · Source§

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

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl StructuralPartialEq for AccessClass

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> 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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
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.