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 /// Fine-tuning task: classify (sequence classification)
43 #[arg(long)]
44 task: Option<String>,
45 /// Number of classes for classification task
46 #[arg(long, default_value = "5")]
47 num_classes: usize,
48 /// Output format for checkpoints: apr, safetensors, or both (comma-separated)
49 #[arg(long, value_name = "FORMAT", default_value = "apr,safetensors")]
50 checkpoint_format: String,
51 },
52 /// Prune model (structured/unstructured pruning) (GH-247)
53 Prune {
54 /// Input model file
55 #[arg(value_name = "FILE")]
56 file: PathBuf,
57 /// Pruning method: magnitude, structured, depth, width, wanda, sparsegpt
58 #[arg(long, short = 'm', default_value = "magnitude")]
59 method: String,
60 /// Target pruning ratio (0-1)
61 #[arg(long, default_value = "0.5")]
62 target_ratio: f32,
63 /// Sparsity level (0-1)
64 #[arg(long, default_value = "0.0")]
65 sparsity: f32,
66 /// Output file path
67 #[arg(short, long)]
68 output: Option<PathBuf>,
69 /// Layers to remove for depth pruning (e.g., "20-24")
70 #[arg(long)]
71 remove_layers: Option<String>,
72 /// Analyze mode (identify pruning opportunities)
73 #[arg(long)]
74 analyze: bool,
75 /// Plan mode (estimate only)
76 #[arg(long)]
77 plan: bool,
78 /// Calibration data file
79 #[arg(long, value_name = "FILE")]
80 calibration: Option<PathBuf>,
81 },
82 /// Knowledge distillation (teacher -> student) (GH-247)
83 Distill {
84 /// Teacher model file
85 #[arg(value_name = "TEACHER")]
86 teacher: PathBuf,
87 /// Student model file
88 #[arg(long, value_name = "FILE")]
89 student: Option<PathBuf>,
90 /// Training data file
91 #[arg(long, short = 'd', value_name = "FILE")]
92 data: Option<PathBuf>,
93 /// Output file path
94 #[arg(short, long)]
95 output: Option<PathBuf>,
96 /// Distillation strategy: standard, progressive, ensemble
97 #[arg(long, default_value = "standard")]
98 strategy: String,
99 /// Temperature for softmax scaling
100 #[arg(long, default_value = "3.0")]
101 temperature: f64,
102 /// Alpha weight for KL vs task loss
103 #[arg(long, default_value = "0.7")]
104 alpha: f64,
105 /// Training epochs
106 #[arg(long, default_value = "3")]
107 epochs: u32,
108 /// Plan mode (estimate only)
109 #[arg(long)]
110 plan: bool,
111 },
112}