entrenar/quant/granularity/
params.rs1use serde::{Deserialize, Serialize};
4
5use super::{QuantGranularity, QuantMode};
6
7#[derive(Clone, Debug, Serialize, Deserialize)]
9pub struct QuantParams {
10 pub scales: Vec<f32>,
12 pub zero_points: Vec<i32>,
14 pub granularity: QuantGranularity,
16 pub mode: QuantMode,
18 pub bits: u8,
20}
21
22impl QuantParams {
23 pub fn num_groups(&self) -> usize {
25 self.scales.len()
26 }
27
28 pub fn is_asymmetric(&self) -> bool {
30 self.mode == QuantMode::Asymmetric
31 }
32}
33
34#[derive(Clone, Debug, Serialize, Deserialize)]
36pub struct QuantizedTensor {
37 pub data: Vec<i8>,
39 pub params: QuantParams,
41 pub shape: Vec<usize>,
43}
44
45impl QuantizedTensor {
46 pub fn memory_bytes(&self) -> usize {
48 let data_bytes = self.data.len();
49 let scale_bytes = self.params.scales.len() * 4;
50 let zp_bytes = self.params.zero_points.len() * 4;
51 data_bytes + scale_bytes + zp_bytes
52 }
53}