entrenar/hf_pipeline/loader/
memory.rs1#[derive(Debug, Clone, Copy)]
5pub struct MemoryEstimate {
6 pub weights: u64,
8 pub activations: u64,
10 pub gradients: u64,
12}
13
14impl MemoryEstimate {
15 #[must_use]
17 pub fn total(&self) -> u64 {
18 self.weights + self.activations + self.gradients
19 }
20
21 #[must_use]
23 pub fn fits_in(&self, available: u64) -> bool {
24 self.total() <= available
25 }
26
27 #[must_use]
29 pub fn fp32(param_count: u64, batch_size: usize, seq_len: usize, hidden_size: usize) -> Self {
30 Self {
31 weights: param_count * 4,
32 activations: (batch_size * seq_len * hidden_size * 4) as u64,
33 gradients: 0, }
35 }
36
37 #[must_use]
39 pub fn fp16(param_count: u64, batch_size: usize, seq_len: usize, hidden_size: usize) -> Self {
40 Self {
41 weights: param_count * 2,
42 activations: (batch_size * seq_len * hidden_size * 2) as u64,
43 gradients: 0,
44 }
45 }
46
47 #[must_use]
49 pub fn int4(param_count: u64, batch_size: usize, seq_len: usize, hidden_size: usize) -> Self {
50 Self {
51 weights: param_count / 2, activations: (batch_size * seq_len * hidden_size * 2) as u64,
54 gradients: 0,
55 }
56 }
57}