1 viewer
Foundry
Choose a recipe, train a small model, and inspect its weights and execution.
- Presets
- 4
- Layers
- ≤ 6
- Width
- ≤ 64
- Iterations
- ≤ 50,000
- Batch
- ≤ 128
- Render budget
- 400,000,000 mul-adds
Presets
| Preset | Shape | Seed | Iterations | Weight bytes | Root | Loss | About |
|---|---|---|---|---|---|---|---|
| demo | 16 → 8 → 4 | 7 | 2,000 | 160 | 4749998015ed… | 63,946 → 7,251 | The lane's demo shape — the model the two-executor pipeline tests run. |
| wide | 32 → 16 → 8 → 4 | 11 | 1,500 | 672 | d4ffb5a73f54… | 62,600 → 6,654 | A wider funnel: more weights per layer, so a chunk holds part of one matrix. |
| deep | 8 → 8 → 8 → 8 → 4 | 3 | 1,500 | 224 | ff2174b8d68e… | 72,573 → 9,042 | Four hidden layers of eight: the longest activation chain the emulator walks here. |
| tiny | 4 → 2 | 1 | 300 | 8 | 8c6a44237a97… | 10,927 → 763 | Eight weights in two chunks — small enough to read every byte off the page. |
How the identity rule works
The basis root is a Merkle root over the ordered chunk hashes of the weight blob. It names the bytes and nothing else: two recipes that produce the same bytes share a root; one flipped byte is a new root. A model page's URL carries the recipe (shape, seed, iterations, batch, chunk size, edits), and the page re-derives the model from it. The root in the path is checked against the root the recipe folds to. Integer hill-climbing on a seeded sparse-sum task: propose one int8 delta, keep it if the L1 loss over a fixed batch falls. Not gradient descent, not a useful model, but a real, reproducible, multi-layer int8 model whose forward pass is exactly the emulated kernel's arithmetic. Each layer is assembled into an RV64 ELF around its weight slice and run on the bare-metal emulator; layer k's requantized outputs are layer k+1's committed input. The page checks the chain and compares the end to the native forward pass. The Foundry reads no store and writes none. Bounds on the recipe keep one render to a fraction of a second of integer work.