Why your local LLM feels dumber than it is
-
Core Premise:
- When locally hosted open-weights models underperform compared to official benchmarks or hosted APIs, the issue is rarely the base model weights—it is the underlying inference runtime, quantization, kernels, and configurations.
- Rather than relying on subjective "vibes" or generic perplexity scores, the author ran rigorous tests tracking raw logit outputs and "top-1 token flips" during real-world, long-context tool-calling workloads (96k–100k tokens).
-
Key Findings from the Inference Stack:
- Attention Kernels: Switching attention backends (e.g., FlashAttention 2 vs. Flash Inference vs. Triton) on identical weights and prompts produced clustered token flips, leading to completely divergent execution paths.
- KV Cache Quantization vs. Weight Quantization:
- Cache quantization proved far more volatile than weight quantization.
- INT8 weight quantization (W8A16) remained relatively stable, whereas INT4 KV cache caused unrecoverable errors in tool-calling workflows.
- Tensor Parallelism (TP): Splitting weights across different GPU counts shifted deterministic token choices back and forth despite identical prompts and models.
- Runtime Dependency Bloat: Production inference images (like vLLM) package hundreds of underlying libraries, any of which can introduce silent numerical inaccuracies.
- Abliteration / Uncensoring Degradation: "Uncensored" model modifications caused measurable drops in formatting reliability and instruction-following, altering hostnames or port definitions.
- Sampler Pitfalls: Defaulting to very low temperatures (e.g., 0.1) for "determinism" frequently causes models (like Qwen) to enter infinite reasoning loops.
-
Impact & Recommendations:
- Graceful vs. Catastrophic Degradation: Conversational prose degrades gracefully under bad stack choices, but agentic tool-calling fails catastrophically when a single token flips (e.g., malformed JSON, incorrect CLI syntax).
- Evaluation Strategy: Self-hosters should create a golden dataset of 10–20 real tasks with known-good outputs, change one variable at a time (runtime → weight quant → KV cache → sampler), and avoid aggressive cache quantization.
Hacker News Discussion
-
Parser & Token Formatting Bugs:
- Commenters shared real-world debugging stories where minute parser bugs—such as an extra trailing newline
\ncaptured inside a<think>block—caused models to enter repetitive self-correction loops ("Actually...") in multi-turn sessions. - Subtle tolerance settings (
rtol/atol) in ML frameworks and unit tests were cited as hiding major zeroed-out attention rows or numerical drift.
- Commenters shared real-world debugging stories where minute parser bugs—such as an extra trailing newline
-
Local Hardware & Experience Comparisons:
- Users debated performance across hardware setups (8GB VRAM consumer GPUs vs. unified-memory MacBooks), noting mixed results depending on model architecture (Qwen, Gemma, MoE models) and quantization backends (llama.cpp, MLX, LM Studio).
- Several pointed out that reasoning settings (e.g.,
reasoning_effortset toxhighvs.medium) often distract local models into overthinking and hallucinating unnecessary complexity.
-
The Reality of "Open Source" vs. Stack Complexity:
- Discussion emphasized that downloading a model file is only a fraction of the pipeline; the runtime, spec-decoding drafts (MTP), context window sizes, and KV cache quantizations create thousands of permutations that alter model capability.