Skip to main content

entrenar/yaml_mode/manifest/
scheduler.rs

1//! Scheduler Configuration
2//!
3//! Contains learning rate scheduler configuration types for training manifests.
4
5use serde::{Deserialize, Serialize};
6
7/// Learning rate scheduler configuration
8#[derive(Debug, Clone, Serialize, Deserialize)]
9pub struct SchedulerConfig {
10    /// Scheduler name (step, cosine, linear, exponential, plateau, one_cycle)
11    pub name: String,
12
13    /// Warmup configuration
14    #[serde(default, skip_serializing_if = "Option::is_none")]
15    pub warmup: Option<WarmupConfig>,
16
17    /// Cosine annealing T_max
18    #[serde(rename = "T_max", default, skip_serializing_if = "Option::is_none")]
19    pub t_max: Option<usize>,
20
21    /// Cosine annealing eta_min
22    #[serde(default, skip_serializing_if = "Option::is_none")]
23    pub eta_min: Option<f64>,
24
25    /// Step scheduler step_size
26    #[serde(default, skip_serializing_if = "Option::is_none")]
27    pub step_size: Option<usize>,
28
29    /// Step/exponential gamma
30    #[serde(default, skip_serializing_if = "Option::is_none")]
31    pub gamma: Option<f64>,
32
33    /// Plateau scheduler mode (min, max)
34    #[serde(default, skip_serializing_if = "Option::is_none")]
35    pub mode: Option<String>,
36
37    /// Plateau scheduler factor
38    #[serde(default, skip_serializing_if = "Option::is_none")]
39    pub factor: Option<f64>,
40
41    /// Plateau scheduler patience
42    #[serde(default, skip_serializing_if = "Option::is_none")]
43    pub patience: Option<usize>,
44
45    /// Plateau scheduler threshold
46    #[serde(default, skip_serializing_if = "Option::is_none")]
47    pub threshold: Option<f64>,
48
49    /// One-cycle max_lr
50    #[serde(default, skip_serializing_if = "Option::is_none")]
51    pub max_lr: Option<f64>,
52
53    /// One-cycle pct_start
54    #[serde(default, skip_serializing_if = "Option::is_none")]
55    pub pct_start: Option<f64>,
56
57    /// One-cycle anneal_strategy
58    #[serde(default, skip_serializing_if = "Option::is_none")]
59    pub anneal_strategy: Option<String>,
60
61    /// One-cycle div_factor
62    #[serde(default, skip_serializing_if = "Option::is_none")]
63    pub div_factor: Option<f64>,
64
65    /// One-cycle final_div_factor
66    #[serde(default, skip_serializing_if = "Option::is_none")]
67    pub final_div_factor: Option<f64>,
68}
69
70/// Warmup configuration
71#[derive(Debug, Clone, Serialize, Deserialize)]
72pub struct WarmupConfig {
73    /// Warmup steps
74    #[serde(default, skip_serializing_if = "Option::is_none")]
75    pub steps: Option<usize>,
76
77    /// Warmup ratio (alternative to steps)
78    #[serde(default, skip_serializing_if = "Option::is_none")]
79    pub ratio: Option<f64>,
80
81    /// Starting learning rate
82    #[serde(default, skip_serializing_if = "Option::is_none")]
83    pub start_lr: Option<f64>,
84}