Findings from the first real cross-machine test (Fedora CPU host +
Windows i3 worker over WiFi):
- round 0 ran the full inner_steps on every node before any speed data
existed, so the whole pool stalled minutes on the slowest CPU. Round
0 is now a short calibration round (5 steps) that measures real
steps/sec; proportional scaling applies from round 1
- the host was exempt from speed scaling — a slow coordinator stalled
every round forever. The host now scales its own steps like any node
- the coordinator prints a 'waiting for N worker(s) [names]' line every
30s during a barrier wait instead of sitting silent
- third-party warning spam (HF hub auth notice, peft fan_in_fan_out,
datasets fingerprint) silenced during training
Verified: 2-node run, calibration + 2 scaled rounds, loss 6.16 -> 4.67,
worker output clean.