MCPcopy Create free account
hub / github.com/evilsocket/cake / prefetch_safetensors

Function prefetch_safetensors

cake-core/src/utils/mod.rs:213–248  ·  view source on GitHub ↗

Pre-read safetensor files into the OS page cache so that subsequent mmap access doesn't trigger per-tensor page faults during layer loading. Uses OnceLock to skip redundant calls (e.g. multi-GPU VarBuilder creation).

(filenames: &[PathBuf])

Source from the content-addressed store, hash-verified

211/// mmap access doesn't trigger per-tensor page faults during layer loading.
212/// Uses OnceLock to skip redundant calls (e.g. multi-GPU VarBuilder creation).
213fn prefetch_safetensors(filenames: &[PathBuf]) -> Result<()> {
214 use std::sync::OnceLock;
215 static DONE: OnceLock<()> = OnceLock::new();
216
217 if DONE.get().is_some() {
218 log::info!("safetensor files already in page cache, skipping prefetch");
219 return Ok(());
220 }
221
222 use std::io::Read;
223 let start = std::time::Instant::now();
224 let mut total_bytes: u64 = 0;
225 let mut buf = Vec::new();
226 for (i, filename) in filenames.iter().enumerate() {
227 log::info!(
228 "caching shard {}/{} ({}) ...",
229 i + 1,
230 filenames.len(),
231 filename.file_name().unwrap_or_default().to_string_lossy()
232 );
233 buf.clear();
234 std::fs::File::open(filename)
235 .map_err(|e| anyhow!("prefetch: can't open {}: {e}", filename.display()))?
236 .read_to_end(&mut buf)
237 .map_err(|e| anyhow!("prefetch: can't read {}: {e}", filename.display()))?;
238 total_bytes += buf.len() as u64;
239 }
240 log::info!(
241 "pre-cached {} in {:.1}s",
242 human_bytes::human_bytes(total_bytes as f64),
243 start.elapsed().as_secs_f64()
244 );
245
246 DONE.set(()).ok();
247 Ok(())
248}
249
250/// Create a VarBuilder with the tensors loaded from the index.
251pub fn load_var_builder_from_index<'a>(

Calls 3

setMethod · 0.80
getMethod · 0.45
clearMethod · 0.45

Tested by

no test coverage detected