← All projectsGitHub
Decentralised training systems

Which of sync interval, compression, delay, momentum and robust aggregation sets the final loss of low-communication training?

research/lowcomm-training

Research programme (proposal stage): a predictive theory of DiLoCo-style low-communication training, testing on real small transformers the closed forms derived in about a dozen quadratic-model projects, with 16 references, hypotheses H1 to H6 and an ICML/NeurIPS workshop as the first target

19 tests

What it found

An open research programme rather than a finished project. DiLoCo-style training cuts communication by orders of magnitude, but choosing the sync interval, compressor and outer optimiser is still a sweep at every scale, and the best empirical scaling laws do not say why one axis costs more than another. This repository holds about a dozen closed-form results on a quadratic with gradient noise (a noise floor inflated by 1+ω under compression, a delay stability limit 2 sin(π/(4τ+2)), an optimal outer momentum that falls with the sync interval, a median that costs π/2 in variance). The programme asks whether those structural factors survive on trained transformers and compose, so that two or three measured constants per model size predict the final loss of configurations never run, as well as a refitted scaling law does. Six falsifiable hypotheses each state the result that would refute them. Milestone 1 is done: a simulated M-worker DiLoCo harness on a 0.41M-parameter GPT reproduces the synchronous loop exactly at M=1, H=1 and the quadratic closed form to 2% (ratio 0.983, 95% CI containing it). No result on the research question yet; the proposal's citations are not yet machine-checked because the registries were unreachable.

Research log

Ongoing: each run adds a batch and an entry, newest first. Source: LOG.md.

2026-10-31 · Milestone 6n (H6 scale-up): is the size-2 excess linear in omega? Keep 1/4 at H = 64, six seeds (planned before running)

### Outcome of 6n (scale_results_6n.txt; 6 runs, about 27 min each on 4 cores)

2026-10-30 · Milestone 7c: draft the compression section of the paper from 6a to 6m (no training)

2026-10-30 · Milestone 6m (H6 scale-up): which form in H describes the size-2 excess? (analysis of existing runs; no new training)

### Outcome of 6m (experiments/gpt_scale/refit.py, refit_results_6m.txt)

2026-10-30 · Milestone 6l (H6 scale-up): is the size-2 excess rise at H = 128 real with six seeds? (planned before running)

### Outcome of 6l (experiments/gpt_scale/scale.jsonl, scale_results_6l.txt; 6 runs, about 21 min each)

2026-10-30 · Milestone 6k (H6 scale-up): is the flat stretch of the size-2 excess between H = 16 and 64 seed noise? (planned before running)

### Outcome of 6k (experiments/gpt_scale/scale.jsonl, scale_results_6k.txt; 14 runs, about 18 min each)

2026-10-30 · Milestone 6j (H6 scale-up): does the size-2 compression excess saturate in H between 16 and 64? (planned before running)

### Outcome of 6j (experiments/gpt_scale/scale.jsonl, scale_results_6j.txt; 12 runs, about 18 min each)

2026-10-30 · Milestone 6i (H6 scale-up): do four more seeds on the two H = 64 cells make the size-2 refit identifiable? (planned before running)

### Outcome of 6i (experiments/gpt_scale/scale.jsonl, scale_results_6i.txt; 8 new runs, about 17 min each, seeds 2 to 5)

2026-10-30 · Milestone 6h (H6 scale-up): does the 6f rule keep its form at a wider model, with its constants refitted? (planned before running)

### Outcome of 6h (experiments/gpt_scale/scale.jsonl, scale_results.txt; 914,880 parameters, 14 runs, about 17 min each)

2026-10-30 · Milestone 6g (H6): does the 6f rule, fitted on rand-k only, predict plain top-k cells it never saw? (analysis of existing cells; script written after the top-k cells of 6e were already known, so the predictions below are not blind)

### Outcome of 6g

2026-10-29 · Milestone 6f (H6): does the three-constant rule beat a same-size fitted additive power law on held-out cells? (analysis of existing cells; script written before reading the result)

### Outcome of 6f (experiments/gpt_composition/scaling_compare.py, scaling_compare_results.txt)

2026-10-29 · Milestone 6e (H6): does 6b's H-shape g(H) carry over to a biased compressor, plain top-k? (planned before running)

### Outcome of 6e (experiments/gpt_composition/: topk_composition.jsonl (6 rows), run_topk.out, topk_composition_results.txt; seeds 0 to 2, about 14 minutes per run)

2026-10-29 · Milestone 6d (H6): is omega, not the keep fraction p, the variable? A different compressor on rand-k's line (planned before running)

### Outcome of 6d (experiments/gpt_omega/: omega.py, omega.jsonl, omega_results.txt, run.out; 12 runs, seeds 0 to 2)

2026-10-29 · Milestone 6c (H6): is f(p) proportional to the compressor variance factor omega = 1/p - 1? (planned before running)

### Outcome of 6c (experiments/gpt_composition/: composition.jsonl gained 12 rows, run_p.out, composition_p_results.txt; seeds 0 to 2, about 11 minutes per run)

2026-10-29 · Milestone 6b (H6): does a product rule excess = f(p) g(H), fitted on H in {4, 16, 64}, predict held-out H in {8, 32}? (planned before running)

### Outcome of 6b (experiments/gpt_composition/: composition.jsonl gained 12 rows, run8_32.out, composition_results.txt; seeds 0 to 2, about 9 minutes per run)

2026-10-29 · Milestone 6a (H6 pilot): does rand-k compression's excess loss compose additively with the outer delay H? (planned before running)

### Outcome of 6a (experiments/gpt_composition/: composition.jsonl, composition_results.txt, run.out; 12 new runs, seeds 0 to 2, about 9.5 minutes each)

2026-10-29 · Milestone 7b: machine-check the proposal's citations and add related work to the breakdown section (no training)

2026-10-28 · Milestone 7a: draft the breakdown-point section of the paper from 5i to 5n (no new training)

2026-10-28 · Milestone 5n: what happens at k = 8 and k = 9 under the coordinated attack, where the median is an attacker value? (planned before running)

### Outcome of 5n (experiments/gpt_median_coalition/: coordinated.jsonl gained 4 rows, run_5n.out; seeds 0 and 1, about 43 minutes each)

2026-10-28 · Milestone 5m: does the coordinated-attack degradation replicate on a second seed, and where is the wall at k = 7? (planned before running)

### Outcome of 5m (experiments/gpt_median_coalition/: coordinated.jsonl gained 4 rows, run_5m.out, coordinated_results.txt; seed 1, about 44 minutes per run)

2026-10-28 · Milestone 5l: where does the median break under the worst-case coordinated attack? (numpy prediction half; training run still to do)

### Outcome of 5l training half (experiments/gpt_median_coalition/: coordinated.py, coordinated.jsonl, coordinated_results.txt, run_5l.out; 4 runs, seed 0 only, about 43 minutes each; diloco.py gained a collective attack hook that sees all workers' deltas)

2026-10-28 · Milestone 5k: does the bias-crossover account place the breakdown between k = 7 and k = 8? (planned before running)

### Outcome of 5k (experiments/gpt_median_coalition/: coalition.jsonl, coalition_5k_results.txt, run_5k.out; 4 runs, seeds 0 and 1, about 46 minutes each)

2026-10-28 · Milestone 5k-b: a third seed at k = 7, and the crossover across mu/sigma (a parallel session ran 5k on seeds 0 and 1; this adds to it)

2026-10-27 · Milestone 5j: where does the median break when k of 16 workers flip together? (planned before running)

### Outcome of 5j (experiments/gpt_median_coalition/: coalition.py, coalition.jsonl, coalition_results.txt, coalition_numpy_results.txt, run.out; 8 runs, seeds 0 and 1, 32 to 44 minutes each)

2026-10-27 · Milestone 5i: the out-of-sample M = 16 test of the order-statistic prediction (planned before running)

### Outcome of 5i (experiments/gpt_median_m16/: median_m16.py, .jsonl, median_m16_results.txt, run.out; 9 runs, seeds 0 to 2, about 31 minutes each; the first batch was lost to a container restart and rerun unchanged)

2026-10-27 · Milestone 5i-b: trimmed-mean arm at M = 16 (a parallel session ran the median arms of 5i; this adds the arm it left out)

2026-10-27 · Milestone 5h: what are the tail weight and mu/sigma of the real worker deltas? (hypotheses written after launching the runs, before any round past 1 was read)

### Outcome of 5h (experiments/delta_stats/: delta_stats.py, delta_stats.jsonl, delta_stats_results.txt; 3 seeds, 3,840 steps, about 25 minutes)

2026-10-27 · Milestone 5g: does 5f's order-statistic account survive heavy-tailed coordinates? (a numpy check, no training; planned before running)

### Outcome of 5g (experiments/median_order_stat_heavy/: heavy.py, heavy_results.txt; 2,000,000 coordinates, seed 0, single draw so no interval)

2026-10-27 · Milestone 5f: does the order-statistic account predict the 4.6x fall in the median's flip cost from M = 4 to M = 8? (a numpy check, no training; written after seeing 5d/5e, so not a blind prediction)

2026-10-27 · Milestone 5d: does the median's sign-flip cost shrink when the attacker is 1 of 8 workers instead of 1 of 4? (planned before running)

### Outcome of 5d (experiments/gpt_median_m8/: median_m8.py, .jsonl, median_m8_results.txt, run.out; 9 runs, seeds 0 to 2, about 17 minutes each)

2026-10-27 · Milestone 5e: at M = 8, does one sign-flip attacker still cost the median, and does a trimmed mean do better? (planned before running)

### Outcome of 5e (experiments/gpt_trimmed_m8/: trimmed_m8.py, trimmed_m8.jsonl, trimmed_m8_results.txt, run.out; 12 runs, seeds 0 to 2, about 17 minutes each)

2026-10-26 · Milestone 5c: is the median's +0.095 under sign-flip due to the flipped sign, or to any extreme attacker? (planned before running)

### Outcome of 5c (experiments/gpt_median_mechanism/: median_mechanism.py, .jsonl, _results.txt, run.out; 6 runs, seeds 0 to 2, about 7.5 minutes each)

2026-10-26 · Milestone 5b: where does the mean break under a strong attacker, and does the median hold? (planned before running)

### Outcome of 5b (experiments/gpt_median_attack_strong/: median_attack_strong.py, .jsonl, _results.txt, run.out; 18 runs, seeds 0 to 2)

2026-10-26 · Milestone 4e (independent replication, levels-based quantiser; a parallel run landed gpt_quant first): what does unbiased stochastic quantisation of the deltas cost, with and without error feedback? (planned before running)

### Outcome of 4e (experiments/gpt_quantise/quantise_results.txt; 9 runs, seeds 0 to 2)

2026-10-26 · Milestone 5a: does median aggregation of worker deltas pay on the real GPT, with and without one attacker? (planned before running)

### Outcome of 5a (experiments/gpt_median_attack/median_attack_results.txt; 12 runs, seeds 0 to 2)

2026-10-26 · Milestone 4f: what do 3-bit and un-fed-back scaled sign cost? (planned before running)

### Outcome of 4f (experiments/gpt_quant_extra/quant_extra_results.txt; 6 runs, seeds 0 to 2)

2026-10-26 · Milestone 4g: does the 2-bit error-feedback residual grow, as the 4e guess says? (planned before running)

### Outcome of 4g (experiments/gpt_quant_ef_norm/: ef_norm.py, ef_norm.jsonl, ef_norm_results.txt; 2 runs, seed 0, 240 rounds)

2026-10-26 · Milestone 4e: what does quantising the worker deltas cost, and does error feedback rescue 2-bit and 1-bit? (planned before running)

### Outcome of 4e (experiments/gpt_quant/quant_results.txt; 12 runs, seeds 0 to 2)

Newest first. Write the hypothesis and the planned analysis before running an experiment, then the outcome.

2026-10-26 · Milestone 4d: where is the knee of error-feedback top-k between keep 1/16 and 1/256? (planned before running)

### Outcome of 4d (experiments/gpt_topk_ef_knee/topk_ef_knee_results.txt; 6 runs, seeds 0 to 2)

2026-10-25 · Milestone 4c: where does error feedback break at lower keep fractions? (planned before running)

### Outcome of 4c (experiments/gpt_topk_ef_low/topk_ef_low_results.txt; 6 runs, seeds 0 to 2)

2026-10-25 · Milestone 4b: does error feedback rescue biased top-k compression of the worker deltas on the real GPT? (planned before running)

### Outcome of 4b (experiments/gpt_topk_ef/topk_ef_results.txt; 12 runs, seeds 0 to 2)

2026-10-25 · Milestone 3h: is the DiLoCo-paper outer setting bad only because the inner lr is wrong for it? (planned before running)

### Outcome of 3h (experiments/gpt_outer_retune/retune_results.txt; 12 runs, seeds 0 to 2, H = 16)

2026-10-25 · Milestone 4a: does the excess loss from unbiased rand-k compression of the worker deltas grow linearly in 1+omega on the real GPT? (H3, planned before running)

### Outcome of 4a (experiments/gpt_compression/compression_results.txt; 12 runs, seeds 0 to 2)

2026-10-25 · Milestone 3i: does the 3h negative result hold at the lr extremes and at H = 64, against plain at the same lr? (planned before running)

### Outcome of 3i (experiments/gpt_outer_retune_lr/retune_outer_results.txt; 8 runs, seeds 100, 101)

2026-10-25 · Milestone 3g: does outer Nesterov momentum help on the real GPT, as 2g found on the 14k numpy model? (planned before running)

### Outcome of 3g (experiments/gpt_outer_momentum/momentum_results.txt; 18 runs, seeds 0 to 2, inner lr 2e-3, plain rows are 3d's)

2026-10-25 · Milestone 3f: is synchronous AdamW under-tuned against H=16? A finer lr grid for both (planned before running)

### Outcome of 3f (experiments/gpt_fine_lr/fine_results.txt; 20 new runs, tuning seeds 100, 101, report seeds 0 to 2)

2026-10-25 · Milestone 3e: is 3d's "H=16 beats synchronous AdamW" sign real with 11 seeds? (planned before running)

### Outcome of 3e (experiments/gpt_seeds/seeds_results.txt; 16 new runs, seeds 3 to 10, pooled with 3d's seeds 0 to 2)

2026-10-25 · Milestone 3d: does a fair re-tune of every method, sync and H=4 included, keep 3c's picture? (planned before running)

### Outcome of 3d (experiments/gpt_retune_all/retune_results.txt; tuning seeds 100, 101, lr grid {1e-3, 2e-3, 4e-3}, 24 runs; then seeds 0 to 2)

2026-10-25 · Milestone 3c: is 3b's H = 16 vs H = 64 inversion an lr artefact? (planned before running)

### Outcome of 3c (experiments/gpt_retune/retune.jsonl, report.out; seeds 100, 101 to tune, 0 to 2 to report; about 11 minutes per run)

2026-10-25 · Milestone 3b: does the 3a gap to synchronous AdamW shrink with a 4x longer budget? (planned before running)

### Outcome of 3b (experiments/gpt_long_budget/long_budget_results.txt; about 13 minutes per run, seeds 0 to 2, validation loss in nats, 3a's inner lr picks, no re-tuning)

2026-10-25 · Milestone 3a: does the H curve of 2e survive on the 413k-parameter GPT? (planned before running)

### Outcome of 3a (experiments/gpt_h_sweep/h_sweep_results.txt; about 75 minutes on 4 cores; seeds 0 to 2, validation loss in nats)

2026-10-25 · Milestone 2g: finer outer-momentum grid {0.1, 0.2, 0.3} (planned before running)

### Outcome of 2g (experiments/numpy_h_sweep/fine_momentum_sweep_results.txt; half B, 5 seeds, outer lr 1, inner lr fixed at 2e's pick; the momentum-0 rows reproduce 2e exactly)

2026-10-25 · Milestone 2f: inner-lr grid extended to 0.1, then outer momentum on top (planned before running)

2026-10-24 · Milestone 2e: inner lr tuned jointly, outer step fixed to plain averaging (planned before running)

### Outcome of 2e (experiments/numpy_h_sweep/inner_lr_sweep_results.txt; half-B held-out loss, mean ± sd over 5 seeds)

### Outcome of 2f (experiments/numpy_h_sweep/outer_momentum_sweep_results.txt, about 17 minutes on 4 cores; half-B held-out loss, mean ± sd over 5 seeds)

2026-10-24 · Milestone 2d: bootstrap intervals for B_simple (planned before running)

### Outcome of 2d (experiments/numpy_h_sweep/noise_scale_boot_results.txt; n = 256 batches, 1,000 resamples, 3 seeds; no resample had |G|^2 <= 0)

2026-10-24 · Milestone 2c: simple gradient noise scale B_simple along training (planned before running)

### Outcome of 2c (experiments/numpy_h_sweep/noise_scale_results.txt; 3 seeds, one estimate per checkpoint)

2026-10-24 · Milestone 2b: widen the outer-lr grid (planned before running)

### Outcome of 2b (experiments/numpy_h_sweep/tuned_h_sweep_wide_results.txt; half-B held-out loss, mean ± sd over 5 seeds)

2026-10-24 · Milestone 2a: per-H outer tuning, then the H curve again (planned before running)

### Outcome of 2a (experiments/numpy_h_sweep/tuned_h_sweep_results.txt; half-B held-out loss, nats/char, mean ± sd over 5 seeds)

2026-10-24 · Numerical note: float32 sync-equivalence drifts (a third, redundant torch harness)

2026-10-24 · A second, numpy-only harness and a first H sweep (run in parallel with the torch harness above)

2026-10-24 · Milestone 1: harness (planned before running)

### Outcome (all three pre-registered checks passed)

2026-10-24 · Programme opened

Paper, code and results

More in Decentralised training systems

All 23 Decentralised training systems projects →

Other research topics

Proper scoring & elicitation28Effort & peer prediction9Verification games & slashing19Detection & tolerances14Markets as routers13Prediction-market design9Paying contributors8Decentralised training systems23Digital twins & sim-to-real164LLM chip design loops40Robot manufacturing loops53Ambient AI assistant46Self-replicating manufacturing34Simulation-first design64Engineered clothing45Task-specific AI accelerators40Algorithmic chip-design loops42Open-source purpose-built robots44The software-engineering loop43Adversarial human imitation41Open-source residential construction41Autonomous multi-angle capture34Sensing, imaging and 3D31Energy supply and dense energy storage39Robot societies among people31Agentic co-design of low-cost robots27Laundry-hanging robots25Machine learning on qualitative data23Robots on the building site27Civilizations & group psychology1History & human sciences1

Produced with AI assistance (Claude). Results are from the code in this repository and are simulated or stylised unless the abstract says otherwise; nothing here implies affiliation with or endorsement by any lab, researcher or company cited. MIT licensed.