everybit

On-device learning and inference for edge devices.

Here are some of the projects we've built. We're open about our approach, sharing what we've learned and how we build it.

ShakesGPT

We trained a char-level teeny tiny LM(44k) on a Waveshare ESP32-S3 Touch LCD 1.69 (ESP32-S3R8, 8 MB PSRAM, 16 MB Flash, ST7789V2 240×280 SPI LCD), no external GPU, no pre-trained weights, starting from random initialization. It learns from the full 1,115,394-byte TinyShakespeare corpus (65 unique bytes), embedded directly into firmware .rodata via board_build.embed_txtfiles rather than LittleFS, so a checkpoint upload never wipes the training data. While it trains, the on-board LCD shows live loss, moving average, learning rate, a progress bar, and a loss curve graph. The best checkpoint is saved to flash, and on the next boot the board generates Shakespearesque (is it even a word?) word salad (sadly 5k steps are not enough) from what it learned. There's no autograd anywhere in the pipeline, the entire backward pass is hand-derived, gradient-checked against PyTorch, and validated in QEMU (xtensa) before ever touching hardware. Both LX7 cores split each batch and train in parallel. The build is pinned to espressif32@6.12.0, board esp32-s3-devkitc-1 and framework arduino.

Teeny tiny LM (44k param, 65 vocab) lol

[image or embed]

— aloobun (@aloobun.bsky.social) August 20, 2026 at 8:35 PM

Notes on Challenges & discoveries

Some more notes on what we built

Current state

Params:    44K  (NC=56, NF=224, NT=32, NV=65)
RAM:       6.5%  (21,312 / 327,680 B)
Flash:     22.4% (1,466,133 / 6,553,600 B)
Step time: 1,483 ms  →  5,000 steps ≈ 2 hours
Loss:      4.17 (step 0) → 3.11 → 3.27 → 2.83 (step 200)
Gradcheck: PASS, worst relative error 2.86e-07

The board is currently mid-run and will finish autonomously, generating text on the LCD and over serial.

What's next(probably)

Contact via email