TerslerThe little junk rig that could

#Changelog

Record every change to the pinned setup (fork commit, driver, CUDA, flags, model) together with the benchmark result that justified it.

DateChangeBench (tg tok/s puzzle / document)Notes
2026-11-03Initial pins: Kmic-68/llama.cpp p100-optimizations @ d90ec36a3, driver 580-server, CUDA 12.9, 150 W— (hardware not assembled)reference video: 66.7 / 49.2
2026-11-03First check-updates run: fork head 83a7f0839 is 803 commits past the pin (29 on the fork's own line, incl. MTP stop-rule options LLAMA_SPEC_STOP_ISO/_THINK, q5_K/q6_K matvec changes, upstream merge of 2026-10-24)—plan: reproduce the video on the pin first, then bench the head
2026-11-06First bring-up on the pin d90ec36a3: driver 580.178.04, CUDA 12.9, 150 W, P2P on, model unsloth Qwen3.8-27B-UD-Q6_K.gguf (MTP head), flags as in tersler.conf54.5 / 57.2 (code 56.9; pp document ~5k tok: 412)tersler-bench default (thinking on, 512 tok, 3 runs); draft accept 53–58 %. Thinking off, 4096-tok answers: 52–69, avg 62 (20-min load test). Earlier rows of 2026-11-06 21:5x in results.csv have bogus pp (prompt cache)
2026-11-06Pin d90ec36a3 → 790a3eaa1 (next commit: fixes GGML_ASSERT(!ggml_cuda_gemm_fold_glu_pending()) on 9–16-token prompts under -sm tensor, which crashed the server on short follow-up chat turns)54.1 / 55.8 (code 51.7; pp document 415)same speed as the old pin; 2-turn chat test passes
2026-11-06Candidate: fork head 83a7f0839 (803 commits incl. upstream merge 2026-10-24), not pinned54.0 / 53.9 (code 54.4; pp document 434, short prompts 166–211 vs 118–132)decode with thinking off, 1024 tok, 2 runs each, head vs pin: min-heap 77.1 vs 77.2, refrigerator 56.2 vs 57.7, CSV 66.4 vs 67.5 tok/s; same draft acceptance. Prefill +5 % (long) to +40–60 % (short). Fork's perplexity gate not run yet
2026-11-06Context -c 131072 → 262144 (the model's maximum; q4_0 KV, ~18 KiB/token: 16 of 64 layers have attention)—VRAM 12.8 → 13.7 GB per card, 2.6 GB free each
2026-11-07Test only (not adopted): power limit 150 → 125 W, fan curve holding the hotter card at 75 °C150 W: 58.7 / 59.5 (code 57.3; pp doc 406). 125 W: 51.7 / 53.2 (code 48.1; pp doc 361)load test, 4096-tok answers, thinking off: 61.5 → 57.5 tok/s (−7 %); power 140 → 119 W per card; fan 2490 → 2140 rpm (≈ −3 dB) at the same 74–75 °C
2026-11-07Test only (reverted): LLAMA_SPEC_SAMPLE_TEMP 1.0 → 0, per the channel's recipe 2.01.0: 58.7 / 59.5 (code 57.3), draft accept 0.56-0.63. 0: 50.2 / 51.0 (code 45.9), accept 0.43-0.50in Kmic's build, T > 0 samples the draft and verifies with the speculative-sampling rule, so T = the target's --temp 1.0 is right; the video's gain was on junkgpulab's own fork
2026-11-07Test only (not adopted): -np 4 --kv-unified, with and without MTPproduction stays -np 1 with MTP4 slots + MTP: OOM at 262k, 6.5 tok/s each at 131k; 4 slots no MTP: 17.4 each / 51 total; same-prefix subagent in another slot re-reads its whole prompt (see research.md)
2026-11-08--cache-ram 3072 -ctxcp 8 (were defaults 8192 MiB / 32)—llama-server OOM-killed at 01:29: 14.4 GB anon RSS on 16 GB RAM, no swap; one prompt-cache entry for a 212k-token chat was 6.2 GB. Raise after the RAM upgrade
2026-11-08Test only: pin + server-prompt-cache-keep.patch (shared prefixes across slots)—3 parallel subagents with the root's 29k system prompt: 196 s → 8.5 s to first token; not in production (needs RAM + a multi-slot config)
2026-11-10--mmproj (unsloth mmproj-F16.gguf) via MMPROJ_URL in the local confimage input worksVRAM after load 14.9 / 13.7 GB, after one image 15.1 / 14.0 GB (of 16.3)
2026-11-10RAM 16 → 64 GB (4× 16 GB in A1, A2, C1, C2)—B1/C1/D1 hangs POST at 0xB7; 2 channels × 2 DIMMs at 1866 MT/s, triad 20 GB/s; EDAC 0 errors
2026-11-10RAM layout A1/A2/C1/C2 → A1/B1/C1/C2—channel D dead (0x55 + 4 long beeps with any stick in D); 3 channels at 1866 MT/s give the same 28.4 GB/s read / 20.2 GB/s triad as 2 channels
2026-11-10--cache-ram 3072 -ctxcp 8 → 16384 -ctxcp 32 (64 GB RAM)—context checkpoints are ~150 MiB each; prompt-cache entries can overshoot the limit
2026-11-10Serving engine: llama.cpp 27B Q6_K → Strata (qr0n/p100-strata 8b1b0f5 + dp4a fix), Flash-Next GSQ-RCO IQ3_S, service tersler-strata on port 8080 (SERVE_ENGINE=strata)speed test: decode 56-65 short, 42-50 at 8k, 46-47 at 32k; prefill 330-360lean_bench 0.983 vs 0.878 for the 27B (32k cap). No vision; 131k context. The 27B stays installed: sudo systemctl start tersler-llama
2026-11-10Strata: image input (strata-vision on the CPU, ISTA mmproj-Qwen3.8-Flash-Next-BF16.gguf) and --max-context 262144 (32k KV cells in VRAM, the rest in pinned RAM)image test passesload 3.5 min; 4,704 experts on GPU 0 (was 4,822); RAM 55 of 62 GB used
2026-11-10Renamed junk-rig → Tersler: hostname tersler (mDNS tersler.local), /opt/tersler (symlink from /opt/junk-rig), /etc/tersler, tersler-* commands and services (install/rename-from-junk-rig.sh)—Strata back up in about 4 min, same config