TerslerThe little junk rig that could
Ermahgerd meme: a girl holding two Tesla P100 cards, captioned ERMAHGERD, TERSLER P-HERNDRERDS!
€623all parts, incl. 2 P100 cards and 64 GB RAM
56–64 tok/sQwen3.8 Flash-Next IQ3_S decode on Strata, MTP
357 tok/sprefill of a 32k-token prompt; decode there 46 tok/s
262kcontext, int8 KV; recall held at 204k tokens
Text + imagesvision encoder on the CPU
≤ 75 °Cunder sustained load, 150 W per card
0.983lean_bench, Flash-Next IQ3_S (Strata)
0.878lean_bench, 27B Q6_K (llama.cpp, the alternative)

Rebuild guide → · All benchmarks →

#Tersler

A ~€620 local-LLM box (GPUs included) built around two used NVIDIA Tesla P100 16 GB cards (32 GB HBM2). It serves Qwen3.8 Flash-Next (IQ3_S) on Strata (qr0n's P100 build): 56–64 tok/s decode with MTP, ~350 tok/s prefill, 262k context, image input, lean_bench 0.983. The original target was the reference build's ~50–67 tok/s on a 27B Q6_K model with MTP speculative decoding (reference recipe); the 27B on a P100-tuned llama.cpp fork reached 55–59 tok/s and stays installed as the alternative.

The name comes from the homepage meme ("ERMAHGERD, TERSLER P-HERNDRERDS!"). The working title was junk-rig; hostname, paths, commands and services were renamed on 2026-11-10 (install/rename-from-junk-rig.sh). /opt/junk-rig stays as a symlink to /opt/tersler for anything that still has the old path built in.

Status: running since 2026-11-06. Since 2026-11-10 it serves Qwen3.8 Flash-Next (IQ3_S) on Strata: lean_bench 0.983, ~45-65 tok/s, images, 262k context. The 27B Q6_K on llama.cpp (55-59 tok/s) stays installed as the alternative (benchmarks, changelog). To build one yourself, follow the rebuild guide. Open items: TODO.md.

#Hardware

BoardASUS Z10PA-U8 (C612, LGA2011-3); GPUs in PCIE6 + PCIE4 = x16/x16 Gen3
CPUXeon E5-2690 v3
RAM4 × 16 GB DDR4-2133 RDIMM in A1/B1/C1/C2 at 1866 MT/s; channel D dead (see hardware notes)
Storage256 GB SATA SSD
PSUSeasonic SSP-650RT 650 W; GPUs capped at 150 W each
Coolingone 120 × 38 mm fan + 3D-printed duct over both cards (shroud/)

Details: docs/bom.md (parts and links), docs/hardware-notes.md (slots, BIOS, power cable, cooling), docs/research.md (how the parts were chosen).

#Software

OS: a prebuilt headless Ubuntu 24.04 image that boots into SSH, written to the SSD with dd (image/README.md). Then, on the rig in ~/tersler:

cp install/tersler.local.conf.example install/tersler.local.conf   # set MODEL_URL
sudo ./install/install.sh          # all stages; reboot when told, run it again
sudo ./install/install.sh --list   # stages and their state
sudo systemctl start tersler-llama
Command (after install)Purpose
tersler-serverrun llama-server with the configured model and flags
tersler-strata-serverrun Strata (Flash-Next) instead; SERVE_ENGINE=strata makes it the boot default (research)
tersler-bench [build]benchmark a build, append to /opt/tersler/bench/results.csv
tersler-check-updateswhat changed upstream (fork, drivers, CUDA, model, new projects)
tersler-fan-control --discoverfind the board's PWM fan outputs for GPU-temperature fan control
tersler-gpu-setuppersistence mode + power limit (runs at boot)

Everything is pinned in install/tersler.conf. How to follow upstream safely: docs/keeping-up.md.

#Layout

image/     build-image.sh: dd-able Ubuntu 24.04 server image (cloud-init seed)
install/   install.sh, config, systemd units, watched upstreams
scripts/   runtime tools (installed to /opt/tersler/bin)
bench/     benchmark prompts
shroud/    OpenSCAD duct design + STL + previews
docs/      rebuild guide, research, BOM, hardware notes, reference recipe, keeping up, changelog
bench/data/  benchmark results (tersler-bench, lean_bench, load and multi-session tests)
site/      static website generator (python3 site/build.py)
docs/reference/  ASUS Z10PA-U8 user guide, Dell T5810 spec sheet