Integrate DS4 execution parity in Rust
This commit is contained in:
+19
-1
@@ -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();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user