A Decade-Old Server Runs Qwen 3.5 4B: Three Counterintuitive Tuning Choices
A ten-year-old server can still host a small model for internal tools, but only by accepting minute-level latency in exchange for correctness: disabling flash attention and letting the CPU prefetch are the price of avoiding silent garbage output. The same trade-off applies to any unsupported GPU/backend combination where flash attention is known to be buggy.
The article documents running Qwen 3.5 4B on a ten-year-old Xeon E5-2670 v2 with an RX 580 2048SP. The hardware lacks AVX2 and ROCm support, leaving Vulkan as the only GPU path. Three decisions define the setup: turn off flash attention, let the CPU handle prefill, and lock all settings in a fixed alias. The result is a working OpenAI-compatible endpoint for LAN clients like WorkBuddy and Dify, but with minute-level latency and no room for GPU offload at larger context.
Seven parameter changes are detailed, with the most critical being OLLAMA_FLASH_ATTENTION=false. With it enabled, prompts over 1650 tokens silently produce a stream of zeros; turning it off drops GPU offload from 33/33 layers to 1/33 and generation speed from 8.6 to 5.5 tok/s, but eliminates the garbage. Other changes include raising num_ctx from 8192 to 16384 (costing ~20 extra seconds per turn), increasing num_predict to 2048 to avoid truncation, and setting OLLAMA_HOST, keep_alive, and max_loaded_models for LAN serving and memory limits.
Integration with WorkBuddy reveals that prompts are fixed at 4098 tokens with no history, so caching never helps and each turn is a full prefill plus generation. Reasoning mode must be disabled client-side via reasoning_effort: "none" on the /v1 endpoint; server-side attempts fail. The overall trade-off is predictable slowness over silent errors, and the author provides a troubleshooting table for common symptoms.
The decision to accept 5.5 tok/s and a 1/33 layer offload rather than risk silent garbage shows that for programmatic APIs, correctness beats speed; a wrong answer without an error flag is worse than a slow one.
The 1650-token threshold for flash-attention failures is specific to this Vulkan/Polaris combination, but it demonstrates that such bugs can be characterized and worked around; the risk is that someone later flips the knob and doesn't know the threshold.
Ollama's server-side inability to disable thinking (Modelfile PARAMETER think false fails) pushes the responsibility to clients, which is a design gap for OpenAI-compatible endpoints that expect a universal way to control reasoning.
The fixed 4098-token prompt from WorkBuddy is a client design decision that negates any benefit of KV-cache reuse; this is a reminder that prompt engineering and client behavior can dominate model-level optimizations.