| # Troubleshooting |
|
|
| Common failure modes, what the log messages mean, and what to do. |
|
|
| ## Connection problems |
|
|
| **Devices don't see each other.** |
| - Same network? Auto-grouping is by **public IP** β devices on different |
| networks (e.g. phone on cellular) will never auto-group. Use |
| `?room=CODE` on every device instead. |
| - Room joins need **host approval** β the first device in the room must click |
| Accept for each newcomer. |
| - Corporate/CGNAT networks can block WebRTC (only STUN is configured, no TURN |
| relay). Try a room over the hosted Space, or another network. |
|
|
| **"WebGPU not available" / backend shows CPU.** |
| - WebGPU needs a **secure context**: `localhost` or HTTPS. Plain |
| `http://192.168.x.x` never gets WebGPU β tunnel it or use the Space. |
| - Old hardware/drivers without a modern GPU backend fall back to CPU. That's |
| supported β CPU devices compute the identical bits, just slower. |
|
|
| **A kernel warning at startup** (e.g. "failed verification β using CPU LUT |
| mirrors"). The device's GPU produced values that don't match the verified |
| units bit-for-bit, so that kernel was refused and a slower-but-exact path is |
| used. This is the system working as designed; the run stays correct. |
|
|
| ## Training problems |
|
|
| **"SYNC GUARD: stopped β weight hash mismatch."** Replicas forked β the run |
| is stopped rather than trained past a divergence. The most common cause is |
| **mixed builds**: devices running different versions of the page whose math |
| specs differ (the quantize respec is a real, bounded spec change β old and |
| new builds must not co-train). Make sure every device has the same version |
| (hard-refresh: Ctrl+Shift+R), then restart the run or restore from a |
| checkpoint. |
|
|
| **"missing a roster gradient β¦ requesting repair from the leader."** A |
| gradient reached some peers but not others (asymmetric mesh). The follower |
| re-requests it from the leader, who retains the last 8 steps β normally the |
| run continues by itself. If repair fails repeatedly, the sync guard stops the |
| run; check whether a device went offline. |
|
|
| **"probe hash mismatch."** A device's *kernel* is producing wrong values at |
| runtime (the seeded probe GEMM no longer matches the fleet). That device |
| should rejoin β its gates will re-run at init and demote it to CPU if its GPU |
| misbehaves. |
|
|
| **Loss looks stuck / falls very slowly.** Small widths and short runs are |
| modest models β try more steps, a wider model, or more devices (each adds |
| its batch to the effective batch). Remember the envelope: this pools |
| compute, not memory; it is a proof of concept for small models. |
|
|
| **A slow device paces everyone.** Steps are synchronous: the group advances |
| when every roster gradient arrives. Removing (or upgrading) the slowest |
| device speeds up everyone. |
|
|
| ## Data problems |
|
|
| **"dataset unreachable β using built-in corpus."** The `/data` endpoint |
| couldn't read the FineWeb-Edu shards (offline, or the CDN hiccuped β the |
| server reads parquet slices straight off the HF CDN with range requests). |
| Training continues on the built-in fallback text; generation quality will |
| reflect the smaller corpus. |
|
|
| ## Checkpoint problems |
|
|
| **"tokenizer mismatch."** The checkpoint was trained with a different vocab |
| than the tokenizer this page loaded β it cannot be resumed here. |
|
|
| **"bad dims in checkpoint."** Width/sequence outside the supported 16β128 |
| range β likely a corrupted or foreign file. |
|
|
| Loading a valid checkpoint on **one** device broadcasts it to the whole |
| group; you don't need to load it everywhere. |
|
|
| ## Verifying your install |
|
|
| ```bash |
| npm test |
| ``` |
|
|
| All ten suites should pass on a clean clone (Node only, no browser/GPU |
| required). If a suite fails on unmodified code, please report it β the tests |
| are deterministic apart from bounded random sweeps that are designed not to |
| flake. See [TEST_RESULTS.md](../TEST_RESULTS.md) for what each suite proves. |
|
|