C03 Solutions¶
Reference answers for ../exercises/. Read them after writing your own —
these include the reasoning and the tradeoff commentary, which is the part that transfers.
| # | Solution | Headline |
|---|---|---|
| 1 | 01_diagnose_slow_training_solution.md |
Two overlapping problems: input-pipeline starvation from the re-export, and a straggler tail that grows with rank count. The loss bump at restart is a third, separate bug. |
| 2 | 02_checkpoint_strategy_solution.md |
T* = 65.7 min synchronous → 5.2 min sharded+async, overhead 14.8% → 3.6%. Spot wins on cost by ~54%, and the deciding variable is restart time, not the checkpoint interval. |
| 3 | 03_repro_audit_solution.md |
The +1.3 claim is unsupported, not merely unverified: the eval set changed and there is one seed. Fix the comparison before fixing determinism. |
How these are written¶
Each solution follows the structure the exercises ask for: assumptions stated, arithmetic shown,
tradeoff named, "it depends on X" pivot given, and a next measurement proposed. Where a number
appears it is either given in the problem or derived — and where it comes from one of the
../tools/ models, that is labelled explicitly, because a model output is not a
measurement.
A note on grading yourself¶
The most common gap between a competent answer and a strong one is not knowledge — it is ordering and honesty:
- A competent answer lists the right causes. A strong one lists them in the order it would actually check them, and says why that order.
- A competent answer recommends improvements. A strong one names the thing it would decline to do and the money that saves.
- A competent answer gives a number. A strong one gives the number, its sensitivity, and the fact that would change it.
If your answer had no numbers, or recommended everything, redo it before reading further.