Summary
The milestone needs one artefact that proves the pieces work together for a user who is not the maintainer: a small model trained end to end on each available device with a recorded loss trajectory, a saved checkpoint that resumes, and a documented wall-clock number produced by the benchmark harness. Today the only example is train_mnist, which trains but does not checkpoint, does not compare devices and records no number.
Where (main at 853a224)
crates/oxmera/examples/train_mnist.rs (167 lines); ROADMAP.md "Next" lists "Model zoo examples: CNN on MNIST/CIFAR".
Content
examples/01_tensor_and_strides.rs, 02_the_tape.rs, 03_a_kernel_in_two_languages.rs (the MSL/CUDA pair side by side) as a reading path, and 04_train_resume.rs as the workload: a Conv2d + BatchNorm2d + Linear network on MNIST (synthetic fallback), Module::to_device, save at epoch k, resume, assert the resumed trajectory matches the uninterrupted one.
- A CI step that runs
04_train_resume on the CPU with the synthetic dataset and asserts the final loss is below a fixed threshold, so a numerical regression in any layer fails CI.
- The same run on Metal (macOS CI) and CUDA (
--features hardware, manual) with the loss trajectories recorded under docs/perf/.
Done when
The example runs on a CPU-only box in under two minutes; CI asserts its loss; the README's quick start points at it.
Summary
The milestone needs one artefact that proves the pieces work together for a user who is not the maintainer: a small model trained end to end on each available device with a recorded loss trajectory, a saved checkpoint that resumes, and a documented wall-clock number produced by the benchmark harness. Today the only example is
train_mnist, which trains but does not checkpoint, does not compare devices and records no number.Where (main at 853a224)
crates/oxmera/examples/train_mnist.rs(167 lines);ROADMAP.md"Next" lists "Model zoo examples: CNN on MNIST/CIFAR".Content
examples/01_tensor_and_strides.rs,02_the_tape.rs,03_a_kernel_in_two_languages.rs(the MSL/CUDA pair side by side) as a reading path, and04_train_resume.rsas the workload: aConv2d+BatchNorm2d+Linearnetwork on MNIST (synthetic fallback),Module::to_device, save at epoch k, resume, assert the resumed trajectory matches the uninterrupted one.04_train_resumeon the CPU with the synthetic dataset and asserts the final loss is below a fixed threshold, so a numerical regression in any layer fails CI.--features hardware, manual) with the loss trajectories recorded underdocs/perf/.Done when
The example runs on a CPU-only box in under two minutes; CI asserts its loss; the README's quick start points at it.