Integrate DS4 execution parity in Rust

This commit is contained in:
Georg Bauer
2026-07-26 17:58:05 +02:00
parent c9f0c3661c
commit 4420b81117
20 changed files with 11643 additions and 358 deletions
+19 -1
View File
@@ -1,4 +1,4 @@
use memmap2::{Mmap, MmapOptions};
use memmap2::{Advice, Mmap, MmapOptions};
use sha2::{Digest, Sha256};
use std::collections::HashMap;
use std::fs::File;
@@ -215,6 +215,23 @@ impl Gguf {
self.max_tensor_bytes
}
pub(super) fn warm(&self) -> Result<(), String> {
let start = self.data_offset as usize;
if start >= self.map.len() {
return Ok(());
}
self.map
.advise_range(Advice::WillNeed, start, self.map.len() - start)
.map_err(|error| format!("Cannot warm {}: {error}", self.path.display()))?;
let mut checksum = 0_u64;
for offset in (start..self.map.len()).step_by(16 * 1024) {
checksum = checksum.wrapping_add(u64::from(self.map[offset]));
}
checksum = checksum.wrapping_add(u64::from(self.map[self.map.len() - 1]));
std::hint::black_box(checksum);
Ok(())
}
pub(super) fn tensor(&self, name: &str) -> Result<&Tensor, String> {
self.tensors
.get(name)
@@ -544,6 +561,7 @@ mod tests {
assert_eq!(model.bytes("general.architecture").unwrap(), b"deepseek4");
assert_eq!(model.tensor("weight").unwrap().dims, [1]);
assert_eq!(model.tensor_data("weight").unwrap(), 1_f32.to_le_bytes());
model.warm().unwrap();
fs::remove_file(path).unwrap();
}