Skip to main content

entrenar/yaml_mode/manifest/
quantize.rs

1//! Quantization Configuration
2//!
3//! Contains quantization-related configuration types for training manifests.
4
5use serde::{Deserialize, Serialize};
6
7/// Quantization configuration
8#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct QuantizeConfig {
10    /// Enable quantization
11    pub enabled: bool,
12
13    /// Quantization bits (2, 4, 8)
14    pub bits: u8,
15
16    /// Quantization scheme (symmetric, asymmetric, dynamic)
17    #[serde(default, skip_serializing_if = "Option::is_none")]
18    pub scheme: Option<String>,
19
20    /// Granularity (per_tensor, per_channel, per_group)
21    #[serde(default, skip_serializing_if = "Option::is_none")]
22    pub granularity: Option<String>,
23
24    /// Group size for per_group quantization
25    #[serde(default, skip_serializing_if = "Option::is_none")]
26    pub group_size: Option<usize>,
27
28    /// QAT configuration
29    #[serde(default, skip_serializing_if = "Option::is_none")]
30    pub qat: Option<QatConfig>,
31
32    /// PTQ calibration configuration
33    #[serde(default, skip_serializing_if = "Option::is_none")]
34    pub calibration: Option<CalibrationConfig>,
35
36    /// Layers to exclude from quantization
37    #[serde(default, skip_serializing_if = "Option::is_none")]
38    pub exclude: Option<Vec<String>>,
39}
40
41/// Quantization-aware training configuration
42#[derive(Debug, Clone, Serialize, Deserialize)]
43pub struct QatConfig {
44    pub enabled: bool,
45    #[serde(default, skip_serializing_if = "Option::is_none")]
46    pub observer: Option<String>,
47}
48
49/// Post-training quantization calibration configuration
50#[derive(Debug, Clone, Serialize, Deserialize)]
51pub struct CalibrationConfig {
52    #[serde(default, skip_serializing_if = "Option::is_none")]
53    pub samples: Option<usize>,
54    #[serde(default, skip_serializing_if = "Option::is_none")]
55    pub method: Option<String>,
56    #[serde(default, skip_serializing_if = "Option::is_none")]
57    pub percentile: Option<f64>,
58}