The weights are fixed — training set them once, and running the model never changes them. What changes is the residual stream: a running vector that enters as a plain word and gets edited, layer by layer, into a next-word prediction.
Each layer's vector is projected through the model's own final LayerNorm and unembedding, turning any point mid-stack into a distribution over the vocabulary. Layer 11's residual equals the model's real output — which is the check that the projection is being done correctly.
When you press Run, GPT-2 small (124M parameters, fp16) downloads once and then runs entirely on your device in a background thread. Each layer's vector is projected through the model's own final LayerNorm and unembedding to read out what it "predicts", with no server round-trip.
The per-layer MLP write column is why this is a from-scratch forward pass rather than an off-the-shelf runtime: no packaged GPT-2 exposes each layer's MLP output on its own. The output is verified token-for-token against a PyTorch reference before shipping.
Compute for five tokens takes a few seconds on a laptop. Layer 11's residual read-out equals the model's actual output, which is the built-in check that the projection is correct.