entrenar/quant/granularity/types.rs
1//! Quantization granularity and mode type definitions
2
3use serde::{Deserialize, Serialize};
4
5/// Quantization granularity options
6#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize, Default)]
7pub enum QuantGranularity {
8 /// Single scale/zero-point for entire tensor
9 #[default]
10 PerTensor,
11 /// Separate scale/zero-point per channel (axis 0 for weights)
12 PerChannel,
13 /// Separate scale/zero-point per group of n elements
14 PerGroup(usize),
15}
16
17/// Quantization mode: symmetric or asymmetric
18#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize, Default)]
19pub enum QuantMode {
20 /// Symmetric: zero-point = 0, range = [-max_abs, max_abs]
21 #[default]
22 Symmetric,
23 /// Asymmetric: zero-point != 0, range = [min, max]
24 Asymmetric,
25}