Run Qwen3.5-9B text chat on an Intel i5-12400 desktop
Serve Qwen3.5-9B using Unsloth’s exact Q4_K_M derivative and pinned llama.cpp 0.7.0. Use an owned Intel Core i5-12400 desktop with 32 GiB RAM. This bounded text-only recipe disables thinking, uses one CPU sequence and 4096 total context tokens, and keeps chat authenticated on loopback. It does not enable image/video input, full advertised context, or claim measured memory fit or speed.
- Hardware
- Intel Core i5-12400 desktop, 4 inference threads, 32 GiB RAM
- Runtime
- llama.cpp v0.7.0 (620d2225cc436ab0b001e3200e590e3b286ef9ab) · CPU
- Model format
- GGUF · GGUF Q4_K_M mixed quantization · Q4_K_M post-training GGUF derivative published by Unsloth
- Workload
- 4,096 token context · 1 concurrent
Based on source documentation; this setup has not been executed by OpenTools. Memory: unknown. No compatible measurement available.
Read the complete setup guide
Before you start
- Use an owned Intel Core i5-12400 desktop (6 cores/12 threads, Intel-documented AVX2) with Ubuntu 24.04 x86_64. Allocate four inference threads, 32 GiB installed RAM and 40 GiB free disk. Build natively on this same machine; do not copy a binary from another CPU.
- RAM/thread/disk values are author resource allocations, not measured minimums or guarantees of full fit. Exact process memory, latency and speed are unknown.
- Read Apache License 2.0 and the quantizer’s base-model/license linkage. The downloaded GGUF is an Unsloth derivative, not a Qwen-published GGUF.
- This recipe accepts plain text messages only and downloads no mmproj vision projector. It does not configure image/video preprocessing, multimodal input, tools or MTP speculative decoding.
Exact model and requirements
- Artifact:
- Unsloth (GGUF quantization); Qwen (base model) / Qwen3.5-9B Q4_K_M, Unsloth derivative · checkpoint unsloth/Qwen3.5-9B-GGUF
- Publisher revision:
- 3885219b6810b007914f3a7950a8d1b469d598a5
- Artifact digest:
- sha256:03b74727a860a56338e042c4420bb3f04b2fec5734175f4cb9fa853daf52b7e8
- Download size:
- 5.29 GiB
- Memory requirement (unknown):
- Unknown — No exact process peak for this Qwen3.5 GGUF, recurrent-state and text workload.
- System RAM / disk:
- Unknown / Unknown
- Placement:
- single device. One CPU host; no tensor/pipeline sharding. CPU-only execution; --device none and zero GPU layers. No disk or accelerator offload.
- KV cache:
- F16 attention K/V cache; Gated DeltaNet recurrent state is separately runtime-managed, with no claimed state precision or full-cache byte estimate.
- Workload:
- 4,096 token context; Unknown; Unknown; concurrency 1; batch 1; cache unknown; repetitions Unknown.
- Tokenizer:
- Qwen3.5-9B GGUF tokenizer with separately pinned Qwen native Jinja template · 3885219b6810b007914f3a7950a8d1b469d598a5; template c202236235762e1c871ad0ccb60c8ee5ba337b9a
- Sampling / reasoning:
- Qwen non-thinking general-task preset: temperature 0.7, top_p 0.8, top_k 20, min_p 0.0, presence_penalty 1.5, repeat_penalty 1.0. Validation max_tokens 512. Non-thinking text-only mode: native Qwen Jinja template, enable_thinking=false, --reasoning off. No /think or /nothink soft switch. Raw output mode; no tool parser, MTP drafter or vision projector.
- Runtime prerequisites:
- Ubuntu 24.04 x86_64; See prerequisites above.
Qwen publishes the base under Apache License 2.0; Unsloth’s derivative metadata declares Apache-2.0 and links that license. Read the full license and retain required license, copyright and attribution notices; mark modifications when redistributing covered work. Unsloth’s repository has no separate LICENSE file at this revision (404); attribution is based on its explicit metadata plus the linked Qwen license. Access is public/ungated as checked; no provider API subscription is required.
- qwen35-chat-template.jinja · 0 GiB · revision c202236235762e1c871ad0ccb60c8ee5ba337b9a
- Gated DeltaNet recurrent state, full-attention cache, weights, buffers and OS share CPU system RAM. GGUF file bytes alone do not prove fit.
- F16 cache flags describe attention K/V only; recurrent-state precision/overhead is not measured or inferred. No sibling or GPU throughput is transferred.
One-time setup and hardware
- hardware
- Unknown — Existing desktop purchase price and incremental hardware cost depend on the reader; unknown.
- Existing desktop purchase price and incremental hardware cost depend on the reader; unknown. Tax: unknown.
- setup
- Unknown — Initial provisioning/build time and labor cost are unknown.
- Initial provisioning/build time and labor cost are unknown. Tax: unknown.
Recurring costs
- electricity
- Unknown — Actual wall power, electricity rate and powered hours are unknown; no TDP-to-wall-power conversion.
- Actual wall power, electricity rate and powered hours are unknown; no TDP-to-wall-power conversion. Tax: unknown.
- storage
- Unknown — Incremental cost of local disk capacity is unknown. The 40 GiB free-disk walkthrough allocation is an author choice, not a measured requirement.
- Incremental cost of local disk capacity is unknown. The 40 GiB free-disk walkthrough allocation is an author choice, not a measured requirement. Tax: unknown.
- egress
- Unknown — Data transfer price, allowances and traffic volume are unknown.
- Data transfer price, allowances and traffic volume are unknown. Tax: unknown.
- administration
- Unknown — Maintenance labor rate and hours are unknown.
- Maintenance labor rate and hours are unknown. Tax: unknown.
Install the runtime
1. Build the pinned CPU server
Install build dependencies and compile the exact official source revision. These packages are system shared dependencies; no CUDA/GPU driver is required. GGML_NATIVE=ON selects -march=native for this GNU/Linux x86 build, compiling for the host CPU. Build and run on the same machine; no AVX-512 requirement is imposed on the i5-12400.
Commandsudo apt-get update sudo apt-get install -y build-essential cmake git curl ca-certificates openssl mkdir -p "$HOME/qwen35-9b-hosting/models" cd "$HOME/qwen35-9b-hosting" git clone https://github.com/ggml-org/llama.cpp.git cd llama.cpp git checkout --detach 620d2225cc436ab0b001e3200e590e3b286ef9ab cmake -S . -B build -DCMAKE_BUILD_TYPE=Release -DGGML_METAL=OFF -DGGML_NATIVE=ON cmake --build build --config Release -j 4 ./build/bin/llama-server --versionExpected result: Build succeeds and server version identifies pinned source. Stop if checkout or build fails.
Download the model
1. Download the pinned Unsloth GGUF and Qwen template
Verify both public immutable inputs. Qwen base/template and Unsloth quantization have separate revisions and authors. Use the explicit native Jinja template so non-thinking control does not depend on an uninspected embedded-template version. Stop on either hash mismatch.
Commandcd "$HOME/qwen35-9b-hosting" curl --fail --location --output models/Qwen3.5-9B-Q4_K_M.gguf 'https://huggingface.co/unsloth/Qwen3.5-9B-GGUF/resolve/3885219b6810b007914f3a7950a8d1b469d598a5/Qwen3.5-9B-Q4_K_M.gguf' curl --fail --location --output models/qwen35-chat-template.jinja 'https://huggingface.co/Qwen/Qwen3.5-9B/raw/c202236235762e1c871ad0ccb60c8ee5ba337b9a/chat_template.jinja' sha256sum --check <<'SHA256' 03b74727a860a56338e042c4420bb3f04b2fec5734175f4cb9fa853daf52b7e8 models/Qwen3.5-9B-Q4_K_M.gguf a4aee8afcf2e0711942cf848899be66016f8d14a889ff9ede07bca099c28f715 models/qwen35-chat-template.jinja SHA256Expected result: Both files report OK. GGUF metadata size 5,680,522,464 bytes; template 7756 bytes. No projector is downloaded.
Configure
1. Create a private service credential
Generate this only on your own host when following the guide. It is a local service password, not an OpenAI/provider credential. Keep it private and never paste it into tickets. Create it only when absent; preserve an existing key so a repeated setup does not silently rotate access. It is not created during this documentation run.
Commandcd "$HOME/qwen35-9b-hosting" umask 077 if [ ! -e .api-key ]; then openssl rand -hex 32 > .api-key fi test -s .api-key || { echo 'Existing .api-key is empty; restore it before continuing.'; exit 1; } chmod 600 .api-keyExpected result: A non-empty private .api-key file exists; existing key preserved. No secret is printed.
Start the model
1. Start one CPU-only sequence
Run the foreground CPU server with the exact Qwen3.5 dense/hybrid architecture. Native template enable_thinking=false supplies a closed empty thinking prefix; --reasoning off makes this intent explicit. Raw-content mode does not promise separate reasoning_content. Use 4,096 total prompt/output context and one slot; reserve 512 output tokens. Qwen recommends at least 128K context for preserving thinking capabilities, so this 4K guide deliberately uses non-thinking general chat. No vision projector or image/video requests.
Commandcd "$HOME/qwen35-9b-hosting" export QWEN35_9B_SERVICE_KEY="$(cat .api-key)" ./llama.cpp/build/bin/llama-server -m models/Qwen3.5-9B-Q4_K_M.gguf --alias qwen35-9b --host 127.0.0.1 --port 8080 --api-key "$QWEN35_9B_SERVICE_KEY" --device none -ngl 0 -t 4 -c 4096 -np 1 --cache-type-k f16 --cache-type-v f16 --jinja --chat-template-file models/qwen35-chat-template.jinja --chat-template-kwargs '{"enable_thinking":false}' --reasoning off --reasoning-format none --skip-chat-parsing --temp 0.7 --top-p 0.8 --top-k 20 --min-p 0.0 --presence-penalty 1.5 --repeat-penalty 1.0Expected result: Model initializes and listener starts. Pass health and authenticated chat checks before relying on the service. Command-line credentials may be visible to privileged/local users; trusted host required.
Connect to your endpoint
http://127.0.0.1:8080/v1
Same desktop loopback only; no LAN/public listener. Use on a trusted single-user host.
Access: loopback. Reader-generated private service key in Authorization: Bearer header for chat; /health is public on loopback. Run the client on this same desktop. Keep the key private; this is not an OpenAI API key.
Verify the setup
1. Check readiness and authenticated text generation
Use a second server terminal and the private service key. Send only plain text. Check final response against the supplied source passage and verify finish_reason is not length; no exact wording is guaranteed. Do not expect reasoning_content in raw mode. If extended thinking appears, non-thinking setup validation failed.
Commandcd "$HOME/qwen35-9b-hosting" export QWEN35_9B_SERVICE_KEY="$(cat .api-key)" curl --fail http://127.0.0.1:8080/health curl --fail http://127.0.0.1:8080/v1/chat/completions -H "Authorization: Bearer $QWEN35_9B_SERVICE_KEY" -H 'Content-Type: application/json' -d '{"model":"qwen35-9b","messages":[{"role":"user","content":"Summarize this supplied passage in one sentence without adding facts: The community library opens at 9am on weekdays and closes at 6pm. On Saturday it opens at 10am and closes at 4pm. It is closed on Sunday."}],"max_tokens":512,"temperature":0.7,"top_k":20,"top_p":0.8,"min_p":0.0,"presence_penalty":1.5,"repeat_penalty":1.0}' curl -o /dev/null -s -w '%{http_code}\n' http://127.0.0.1:8080/v1/chat/completions -H 'Content-Type: application/json' -d '{"model":"qwen35-9b","messages":[{"role":"user","content":"Hello"}]}'Expected result: Health HTTP 200 when ready; authenticated response contains non-empty choices[0].message.content with an accurate final summary and finish_reason not length, without a generated extended thinking trace. Unauthenticated chat returns HTTP 401. Verify facts yourself; output can be wrong.
Performance evidence
No compatible measurement available. Documented support and estimated memory do not establish response speed.
Limits and troubleshooting
- Documented configuration only. No weights, build, inference, full-fit, throughput or latency benchmark was executed by OpenTools.
- Unsloth Q4_K_M GGUF is 5,680,522,464 bytes. It is a derivative of Qwen/Qwen3.5-9B with separate quantizer revision; no equivalence to full precision quality is claimed.
- The native 9B model is a dense language backbone with a vision encoder, 32 layers and alternating three Gated DeltaNet layers per full-attention layer. Family-wide MoE marketing does not make this 9B checkpoint a sparse MoE. Attention KV and recurrent state must not be collapsed into a transformer-only cache formula.
- This guide is text-only. No mmproj/projector is provided and image/video requests are outside its configuration. The model’s multimodal capability is not a claim that this text recipe validates vision.
- Qwen thinks by default. This guide pins its native template and disables thinking via enable_thinking=false plus --reasoning off. /think and /nothink are not officially supported soft switches. A 4K non-thinking recipe does not preserve/validate full thinking capability; the publisher advises at least 128K context for that purpose.
- The publisher advertises 262,144 native context with extension options. This recipe configures 4,096 total prompt and output, one active sequence and 512 validation output tokens. Longer context, thinking, concurrent users and another cache policy create different configurations.
- Use Qwen’s non-thinking general-task sampler (temperature 0.7, top-p 0.8, top-k 20, min-p 0, presence penalty 1.5 and repetition penalty 1.0). The model card gives conflicting non-thinking reasoning presets in two sections; this recipe avoids that task/mode and uses the consistent general-task preset.
- Summarization validation checks a short text request only. It does not establish coding, multilingual, long-context, retrieval, agentic, structured-output or multimodal quality; generated answers can be wrong.
- Operating system packages and build tool dependencies resolve when installed. Save tool versions/build logs with any actual execution. Local hardware is Intel Core i5-12400 with four inference threads allocated; no exact-hardware benchmark is claimed.
- Loopback and a service key do not isolate the service from privileged local users. A shared/public service needs separately designed TLS, authentication and operations.
- Download or checksum failure
- Verify exact uppercase filename and pinned URL; remove only the incomplete dedicated model file and retry. Do not run a mismatching file.
- Architecture unsupported or build fails
- Confirm exact pinned source commit, Ubuntu compiler/CMake dependencies and GGUF. Do not substitute an older packaged llama.cpp silently.
- Out of memory or context overflow
- Stop server, free/provision RAM or reduce context and restart; shorten input/output within configured total. Allocation is not a measured guarantee; record any changed configuration.
- Connection refused or HTTP 401
- Check foreground server logs, 8080 binding, matching private key and Bearer header. Run the client on this same desktop and keep the loopback listener.
- Unexpected thinking trace, template error or image request failure
- Confirm both exact GGUF/template hashes, --jinja, enable_thinking=false and --reasoning off. Do not use /nothink as a substitute. Send only text; this recipe has no mmproj and does not support images/videos. If template or architecture loading fails, confirm exact pinned runtime and stop rather than substituting a different checkpoint.
Stop the model
1. Stop the service
Press Ctrl+C in server terminal. Unset key in each shell. Confirm this desktop localhost:8080 no longer serves the model.
Commandunset QWEN35_9B_SERVICE_KEYExpected result: Server stops and localhost:8080 stops serving.
Uninstall
1. Remove dedicated model, build and credential files
Back up wanted logs/files first. Remove only this walkthrough directory after confirming its path. Shared apt packages can remain; do not remove other workloads.
Commandrm -r -- "$HOME/qwen35-9b-hosting"Expected result: Dedicated files and local service credential removed; shared system dependencies remain.
Sources and verification
Sources checked Oct 16, 2026. Verification source
- https://huggingface.co/api/models/Qwen/Qwen3.5-9Bpublisher · retrieved Oct 16, 2026
- https://huggingface.co/Qwen/Qwen3.5-9B/raw/c202236235762e1c871ad0ccb60c8ee5ba337b9a/README.mdpublisher · retrieved Oct 16, 2026 · revision c202236235762e1c871ad0ccb60c8ee5ba337b9a
- https://huggingface.co/Qwen/Qwen3.5-9B/raw/c202236235762e1c871ad0ccb60c8ee5ba337b9a/config.jsonpublisher · retrieved Oct 16, 2026 · revision c202236235762e1c871ad0ccb60c8ee5ba337b9a
- https://huggingface.co/Qwen/Qwen3.5-9B/raw/c202236235762e1c871ad0ccb60c8ee5ba337b9a/chat_template.jinjapublisher · retrieved Oct 16, 2026 · revision c202236235762e1c871ad0ccb60c8ee5ba337b9a
- https://huggingface.co/Qwen/Qwen3.5-9B/raw/c202236235762e1c871ad0ccb60c8ee5ba337b9a/LICENSEpublisher · retrieved Oct 16, 2026 · revision c202236235762e1c871ad0ccb60c8ee5ba337b9a
- https://huggingface.co/api/models/unsloth/Qwen3.5-9B-GGUFpublisher · retrieved Oct 16, 2026
- https://huggingface.co/unsloth/Qwen3.5-9B-GGUF/raw/3885219b6810b007914f3a7950a8d1b469d598a5/README.mdpublisher · retrieved Oct 16, 2026 · revision 3885219b6810b007914f3a7950a8d1b469d598a5
- https://huggingface.co/api/models/unsloth/Qwen3.5-9B-GGUF/tree/3885219b6810b007914f3a7950a8d1b469d598a5?recursive=false&expand=falsepublisher · retrieved Oct 16, 2026
- https://raw.githubusercontent.com/ggml-org/llama.cpp/620d2225cc436ab0b001e3200e590e3b286ef9ab/src/models/qwen35.cppruntime maintainer · retrieved Oct 16, 2026
- https://raw.githubusercontent.com/ggml-org/llama.cpp/620d2225cc436ab0b001e3200e590e3b286ef9ab/ggml/src/ggml-cpu/ggml-cpu.cruntime maintainer · retrieved Oct 16, 2026
- https://docs.liquid.ai/lfm/inference/llama-cppruntime maintainer · retrieved Oct 16, 2026
- https://raw.githubusercontent.com/ggml-org/llama.cpp/620d2225cc436ab0b001e3200e590e3b286ef9ab/docs/build.mdruntime maintainer · retrieved Oct 16, 2026 · revision 620d2225cc436ab0b001e3200e590e3b286ef9ab
- https://www.intel.com/content/www/us/en/products/sku/134586/intel-core-i512400-processor-18m-cache-up-to-4-40-ghz/specifications.htmlmanufacturer · retrieved Oct 16, 2026
- https://raw.githubusercontent.com/ggml-org/llama.cpp/620d2225cc436ab0b001e3200e590e3b286ef9ab/tools/server/README.mdruntime maintainer · retrieved Oct 16, 2026 · revision 620d2225cc436ab0b001e3200e590e3b286ef9ab
- https://raw.githubusercontent.com/ggml-org/llama.cpp/620d2225cc436ab0b001e3200e590e3b286ef9ab/common/arg.cppruntime maintainer · retrieved Oct 16, 2026 · revision 620d2225cc436ab0b001e3200e590e3b286ef9ab
- https://api.github.com/repos/ggml-org/llama.cpp/releases/latestruntime maintainer · retrieved Oct 16, 2026
- https://raw.githubusercontent.com/ggml-org/llama.cpp/620d2225cc436ab0b001e3200e590e3b286ef9ab/ggml/src/ggml-cpu/CMakeLists.txtruntime maintainer · retrieved Oct 16, 2026 · revision 620d2225cc436ab0b001e3200e590e3b286ef9ab