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

Method assign_layers

cake-core/src/cake/sharding/default.rs:11–170  ·  view source on GitHub ↗
(
        &self,
        workers: &[&dyn super::WorkerCapacity],
        num_layers: usize,
        master_tflops: f64,
        layer_size_bytes: u64,
        master_max_layers: usize,
        layer_p

Source from the content-addressed store, hash-verified

9
10impl super::Strategy for DefaultStrategy {
11 fn assign_layers(
12 &self,
13 workers: &[&dyn super::WorkerCapacity],
14 num_layers: usize,
15 master_tflops: f64,
16 layer_size_bytes: u64,
17 master_max_layers: usize,
18 layer_prefix: &str,
19 ) -> Vec<(usize, Vec<String>)> {
20 if workers.is_empty() || num_layers == 0 {
21 return vec![];
22 }
23
24 // Include master TFLOPS in total so layers are split proportionally
25 let total_tflops: f64 =
26 workers.iter().map(|w| w.total_tflops()).sum::<f64>() + master_tflops;
27
28 if total_tflops <= 0.0 {
29 // No compute info — give half to workers, half to master
30 let worker_layers = num_layers / 2;
31 let per_worker = worker_layers / workers.len();
32 let mut assignments = vec![];
33 let mut offset = 0;
34 for (i, _) in workers.iter().enumerate() {
35 let count = if i == workers.len() - 1 {
36 worker_layers - offset
37 } else {
38 per_worker
39 };
40 let layers: Vec<String> = (offset..offset + count)
41 .map(|l| format!("{layer_prefix}.{l}"))
42 .collect();
43 assignments.push((i, layers));
44 offset += count;
45 }
46 return assignments;
47 }
48
49 // Sort worker indices by TFLOPS descending
50 let mut indices: Vec<usize> = (0..workers.len()).collect();
51 indices.sort_by(|a, b| {
52 workers[*b]
53 .total_tflops()
54 .partial_cmp(&workers[*a].total_tflops())
55 .unwrap_or(std::cmp::Ordering::Equal)
56 });
57
58 // Total layers for all workers combined (master keeps its share)
59 let workers_tflops: f64 = workers.iter().map(|w| w.total_tflops()).sum();
60 let total_worker_layers =
61 (workers_tflops / total_tflops * num_layers as f64).round() as usize;
62 let total_worker_layers = total_worker_layers.min(num_layers);
63
64 log::info!(
65 "master: {:.1} TFLOPS — workers: {:.1} TFLOPS — assigning {} of {} layers to workers",
66 master_tflops,
67 workers_tflops,
68 total_worker_layers,

Callers 4

master_setupFunction · 0.80

Calls 3

total_tflopsMethod · 0.45
pushMethod · 0.45
max_layers_for_sizeMethod · 0.45

Tested by

no test coverage detected