torsh_quantization/analysis/
mod.rs1pub mod benchmarking;
9pub mod config;
10pub mod sensitivity;
11pub mod size;
12pub mod speed;
13pub mod statistical;
14pub mod visualization;
15
16pub use config::{
18 AccuracyComparison, AnalysisConfig, EfficiencyWeights, LayerSensitivityResult,
19 NormalizationFactors, SensitivityAnalysisResults,
20};
21
22pub use sensitivity::SensitivityAnalyzer;
23
24pub use size::{SizeAnalyzer, SizeReport};
25
26pub use speed::SpeedAnalyzer;
27
28pub use statistical::{
29 AdvancedStatisticalAnalyzer, ComprehensiveStatisticalReport, RiskLevel, StatisticalSignificance,
30};
31
32pub use visualization::VisualizationTool;
33
34pub use benchmarking::{
35 BenchmarkConfig, BenchmarkResult, OptimizationCriteria, QuantizationBenchmarker,
36};
37
38pub fn quick_sensitivity_analysis(
42 layer_names: &[String],
43) -> crate::TorshResult<SensitivityAnalysisResults> {
44 let analyzer = SensitivityAnalyzer::new(Vec::new()); analyzer.heuristic_sensitivity_analysis(layer_names)
46}
47
48pub fn compare_model_sizes(
50 num_parameters: usize,
51 schemes: &[crate::QScheme],
52) -> std::collections::HashMap<crate::QScheme, SizeReport> {
53 SizeAnalyzer::generate_size_report(num_parameters, schemes)
54}
55
56pub fn generate_comprehensive_analysis_report(
58 num_parameters: usize,
59 layer_names: &[String],
60 baseline_accuracy: f32,
61) -> crate::TorshResult<String> {
62 let mut report = String::new();
63
64 report.push_str("Comprehensive Quantization Analysis Report\n");
66 report.push_str(&"=".repeat(60));
67 report.push_str("\n\n");
68
69 report.push_str("Model Statistics:\n");
71 report.push_str(&format!("- Parameters: {}\n", num_parameters));
72 report.push_str(&format!("- Layers: {}\n", layer_names.len()));
73 report.push_str(&format!(
74 "- Baseline Accuracy: {:.4}\n\n",
75 baseline_accuracy
76 ));
77
78 report.push_str("Sensitivity Analysis:\n");
80 report.push_str(&"-".repeat(30));
81 report.push('\n');
82
83 let sensitivity_results = quick_sensitivity_analysis(layer_names)?;
84 report.push_str(&sensitivity_results.summary_report());
85 report.push_str("\n\n");
86
87 report.push_str("Size Analysis:\n");
89 report.push_str(&"-".repeat(30));
90 report.push('\n');
91
92 let schemes = vec![
93 crate::QScheme::PerTensorAffine,
94 crate::QScheme::PerChannelAffine,
95 crate::QScheme::Int4PerTensor,
96 crate::QScheme::Binary,
97 ];
98
99 let size_reports = compare_model_sizes(num_parameters, &schemes);
100 for (scheme, report_data) in size_reports {
101 report.push_str(&format!(
102 "{:?}: {:.1}MB -> {:.1}MB ({:.1}x reduction, {:.1}% saved)\n",
103 scheme,
104 report_data.original_size_mb,
105 report_data.quantized_size_mb,
106 report_data.reduction_ratio,
107 report_data.space_savings_percentage()
108 ));
109 }
110 report.push_str("\n");
111
112 report.push_str("Performance Estimates:\n");
114 report.push_str(&"-".repeat(30));
115 report.push('\n');
116
117 for scheme in schemes {
118 let speed_improvement = SpeedAnalyzer::estimate_speed_improvement(scheme);
119 report.push_str(&format!(
120 "{:?}: {:.1}x speed improvement\n",
121 scheme, speed_improvement
122 ));
123 }
124
125 Ok(report)
126}
127
128pub fn production_analysis_config() -> AnalysisConfig {
130 AnalysisConfig::conservative()
131}
132
133pub fn research_analysis_config() -> AnalysisConfig {
135 AnalysisConfig::aggressive()
136}
137
138pub fn batch_analyze_models(
140 model_configs: &[(usize, Vec<String>, f32)], ) -> crate::TorshResult<Vec<String>> {
142 let mut reports = Vec::new();
143
144 for (i, (num_parameters, layer_names, baseline_accuracy)) in model_configs.iter().enumerate() {
145 let mut report = format!("Model {} Analysis:\n", i + 1);
146 report.push_str(&"=".repeat(40));
147 report.push('\n');
148
149 let detailed_report = generate_comprehensive_analysis_report(
150 *num_parameters,
151 layer_names,
152 *baseline_accuracy,
153 )?;
154
155 report.push_str(&detailed_report);
156 report.push_str("\n\n");
157
158 reports.push(report);
159 }
160
161 Ok(reports)
162}