#![allow(
clippy::panic,
clippy::unwrap_used,
clippy::expect_used,
clippy::as_conversions,
clippy::cast_precision_loss,
clippy::cast_possible_truncation,
clippy::indexing_slicing
)]
use std::path::PathBuf;
use std::time::Instant;
const STARCODER2_3B_RELATIVE: &str = ".cache/huggingface/hub/\
models--bigcode--starcoder2-3b/snapshots/\
733247c55e3f73af49ce8e9c7949bf14af205928/model.safetensors";
fn fixture_path() -> Option<PathBuf> {
let home = std::env::var_os("USERPROFILE").or_else(|| std::env::var_os("HOME"))?;
let path = PathBuf::from(home).join(STARCODER2_3B_RELATIVE);
path.exists().then_some(path)
}
fn fmt_stats(samples: &[f64]) -> String {
let median = samples[samples.len() / 2];
let min = samples[0];
let max = samples[samples.len() - 1];
format!("median {median:.2} ms (min {min:.2}, max {max:.2})")
}
#[test]
#[ignore = "requires local 11+ GB starcoder2-3b safetensors file"]
fn bench_parse_safetensors_large() {
let Some(path) = fixture_path() else {
eprintln!("SKIP: starcoder2-3b not found under $HOME/{STARCODER2_3B_RELATIVE}");
return;
};
let bytes = path.metadata().unwrap().len();
eprintln!(
"\n=== bench_parse_safetensors_large ({} MiB safetensors) ===",
bytes / 1_048_576,
);
let _ = anamnesis::parse(&path).unwrap();
let _ = anamnesis::parse(&path).unwrap();
let mut parse_samples: Vec<f64> = Vec::with_capacity(5);
let mut tensors_seen: usize = 0;
for _ in 0..5 {
let start = Instant::now();
let model = anamnesis::parse(&path).unwrap();
let ms = start.elapsed().as_secs_f64() * 1000.0;
tensors_seen = model.inspect().quantized + model.inspect().passthrough;
parse_samples.push(ms);
}
parse_samples.sort_by(|a, b| a.partial_cmp(b).unwrap());
eprintln!("\n-- parse() alone --");
eprintln!("samples (ms): {parse_samples:?}");
eprintln!("{}", fmt_stats(&parse_samples));
eprintln!("(saw {tensors_seen} tensors via inspect)");
let mut parse_inspect_samples: Vec<f64> = Vec::with_capacity(5);
for _ in 0..5 {
let start = Instant::now();
let model = anamnesis::parse(&path).unwrap();
let info = model.inspect();
let ms = start.elapsed().as_secs_f64() * 1000.0;
let _ = std::hint::black_box(info);
parse_inspect_samples.push(ms);
}
parse_inspect_samples.sort_by(|a, b| a.partial_cmp(b).unwrap());
eprintln!("\n-- parse() + inspect() --");
eprintln!("samples (ms): {parse_inspect_samples:?}");
eprintln!("{}", fmt_stats(&parse_inspect_samples));
let parse_median = parse_samples[2];
let parse_inspect_median = parse_inspect_samples[2];
eprintln!(
"\ninspect() overhead median: {:.2} ms",
parse_inspect_median - parse_median
);
}