A working notebook, not a blog

Large language models on hardware you own and can touch.

Field notes from building, breaking, and fixing local LLM setups: quantization, inference tuning, hardware that actually matters, and the honest benchmarks behind each claim. Written slow, tested twice, updated when something stops working. If you would rather have it set up than read about it, book a free 30-minute call.

lived
11 months
hardware
gpu ×8 · apple silicon ×2
entries
74 field notes
hype
off

Latest entries

All 74 posts →
  1. Two Crash Fixes That Cost Throughput and Fixed Nothing

    A daily inference-server crash got two mitigations, both matched to the symptom by name, both 'validated' by a load test that passed 12 of 12. One mechanism was impossible, the other flag routed traffic into the failing path, and one of them cost 24% of decode.

  2. The Win Was Four Slots, Not the Prefix Cache

    Three agent conversations against two serving slots: time to first token grew from 16 to 61 seconds a turn. Against four slots it stayed flat at 1.6-1.9 seconds, and the prefix cache we had just switched on recorded zero hits.

  3. The Chat Template Ignored enable_thinking

    Three different ways of switching thinking off all left one model thinking at its maximum setting, because its chat template never reads any of them. It reads only reasoning_effort, and treats every value except two as 'Max'. A two-render check at startup finds this in any template.

  4. fp16 Residual Streams and a Two-Million Activation

    A model whose hyper-connection streams peak around 2.0e6 on an ordinary prompt cannot store them in fp16, whose ceiling is 65,504: every logit becomes NaN. Our fixture never left fp16's range, so no test could see it. The fix is preventive, and it is not the fix for our open copy bug.

  5. The Tag Was 128 Tokens Back: An Open Bug

    Our engine's copy of a model cannot finish its own tool-call tags; another engine running the same prompt can. Here is everything we ruled out, the one test that 'failed' by 10% without finding anything, and the suspect our reference cannot see. Still open.

  6. We Sent a V4 Model a V3.1 Tool Prompt

    Our renderer wrote the previous generation's tool-call format for a model trained on a different one. The model copied the placeholder words from the instructions, or ended its turn with one token. The fix was to port the vendor's encoder step for step and test it byte for byte.