apr_cli/model_ops_commands.rs
1
2#[derive(Subcommand, Debug)]
3pub enum ModelOpsCommands {
4 /// Fine-tune model with LoRA/QLoRA (GH-244)
5 Finetune {
6 /// Input model file
7 #[arg(value_name = "FILE")]
8 file: Option<PathBuf>,
9 /// Fine-tuning method: auto, full, lora, qlora
10 #[arg(long, short = 'm', default_value = "auto")]
11 method: String,
12 /// LoRA rank (default: auto-selected)
13 #[arg(long, short = 'r')]
14 rank: Option<u32>,
15 /// Available VRAM in GB
16 #[arg(long, default_value = "16.0")]
17 vram: f64,
18 /// Plan mode (estimate only)
19 #[arg(long)]
20 plan: bool,
21 /// Training data file (JSONL format)
22 #[arg(long, short = 'd', value_name = "FILE")]
23 data: Option<PathBuf>,
24 /// Output path (adapter dir or merged model)
25 #[arg(short, long)]
26 output: Option<PathBuf>,
27 /// Adapter path for merge mode
28 #[arg(long)]
29 adapter: Option<PathBuf>,
30 /// Merge adapter into base model
31 #[arg(long)]
32 merge: bool,
33 /// Training epochs
34 #[arg(long, default_value = "3")]
35 epochs: u32,
36 /// Learning rate
37 #[arg(long, default_value = "0.0002")]
38 learning_rate: f64,
39 /// Model size for planning (e.g., "7B", "1.5B")
40 #[arg(long, value_name = "SIZE")]
41 model_size: Option<String>,
42 },
43 /// Prune model (structured/unstructured pruning) (GH-247)
44 Prune {
45 /// Input model file
46 #[arg(value_name = "FILE")]
47 file: PathBuf,
48 /// Pruning method: magnitude, structured, depth, width, wanda, sparsegpt
49 #[arg(long, short = 'm', default_value = "magnitude")]
50 method: String,
51 /// Target pruning ratio (0-1)
52 #[arg(long, default_value = "0.5")]
53 target_ratio: f32,
54 /// Sparsity level (0-1)
55 #[arg(long, default_value = "0.0")]
56 sparsity: f32,
57 /// Output file path
58 #[arg(short, long)]
59 output: Option<PathBuf>,
60 /// Layers to remove for depth pruning (e.g., "20-24")
61 #[arg(long)]
62 remove_layers: Option<String>,
63 /// Analyze mode (identify pruning opportunities)
64 #[arg(long)]
65 analyze: bool,
66 /// Plan mode (estimate only)
67 #[arg(long)]
68 plan: bool,
69 /// Calibration data file
70 #[arg(long, value_name = "FILE")]
71 calibration: Option<PathBuf>,
72 },
73 /// Knowledge distillation (teacher -> student) (GH-247)
74 Distill {
75 /// Teacher model file
76 #[arg(value_name = "TEACHER")]
77 teacher: PathBuf,
78 /// Student model file
79 #[arg(long, value_name = "FILE")]
80 student: Option<PathBuf>,
81 /// Training data file
82 #[arg(long, short = 'd', value_name = "FILE")]
83 data: Option<PathBuf>,
84 /// Output file path
85 #[arg(short, long)]
86 output: Option<PathBuf>,
87 /// Distillation strategy: standard, progressive, ensemble
88 #[arg(long, default_value = "standard")]
89 strategy: String,
90 /// Temperature for softmax scaling
91 #[arg(long, default_value = "3.0")]
92 temperature: f64,
93 /// Alpha weight for KL vs task loss
94 #[arg(long, default_value = "0.7")]
95 alpha: f64,
96 /// Training epochs
97 #[arg(long, default_value = "3")]
98 epochs: u32,
99 /// Plan mode (estimate only)
100 #[arg(long)]
101 plan: bool,
102 },
103}