Skip to content
1 viewer
Model Foundry

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

PresetShapeSeedIterationsWeight bytesRootLossAbout
demo16 → 8 → 472,0001604749998015ed…63,946 → 7,251The lane's demo shape — the model the two-executor pipeline tests run.
wide32 → 16 → 8 → 4111,500672d4ffb5a73f54…62,600 → 6,654A wider funnel: more weights per layer, so a chunk holds part of one matrix.
deep8 → 8 → 8 → 8 → 431,500224ff2174b8d68e…72,573 → 9,042Four hidden layers of eight: the longest activation chain the emulator walks here.
tiny4 → 2130088c6a44237a97…10,927 → 763Eight weights in two chunks — small enough to read every byte off the page.

Forge a model

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.

Elsewhere