diff --git a/reference/qwen3.5-running-parameters.md b/reference/qwen3.5-running-parameters.md new file mode 100644 index 0000000..1962f24 --- /dev/null +++ b/reference/qwen3.5-running-parameters.md @@ -0,0 +1,329 @@ +--- +created: '2026-04-09T17:58:20+00:00' +id: c923cbfa-95ba-4ce2-b635-c2e8b15c69ca +keywords: +- Qwen3.5 +- Alibaba +- temperature +- top_p +- top_k +- min_p +- presence_penalty +- GGUF +- quantization +- UD-Q4_K_XL +- thinking mode +- hybrid reasoning +- llama.cpp +- llama-server +- MoE +- 397B-A17B +- 35B-A3B +- 27B +- 122B-A10B +- YaRN +- Unsloth Dynamic 2.0 +- MXFP4 +links: [] +modified: '2026-04-09T17:58:20+00:00' +summary: Optimal running parameters for Alibaba's Qwen3.5 family of models, covering + inference settings for thinking vs non-thinking modes across all task types, hardware + requirements for all variants (0.8B through 397B-A17B), quantization recommendations, + thinking mode control, and llama.cpp example commands. +tags: +- reference +- qwen3.5 +- llm +- inference +- llama-cpp +- local-ai +title: Qwen3.5 — Optimal Running Parameters +--- + +# Qwen3.5 — Optimal Running Parameters + +A reference for optimally running Alibaba's Qwen3.5 family of models locally. + +## Model Variants + +| Variant | Architecture | Context | Languages | Best Fit | +|---|---|---|---|---| +| **0.8B** | Dense | 256K | 201 | Smallest edge inference | +| **2B** | Dense | 256K | 201 | Small device inference | +| **4B** | Dense | 256K | 201 | Lightweight local use | +| **9B** | Dense | 256K | 201 | Capable small model | +| **27B** | Dense | 256K | 201 | Slightly more accurate than 35B-A3B; fits 18GB devices | +| **35B-A3B** | MoE (3B active) | 256K | 201 | Best speed/quality tradeoff; fits 22GB devices | +| **122B-A10B** | MoE (10B active) | 256K | 201 | High quality; needs ~70GB (4-bit) | +| **397B-A17B** | MoE (17B active) | 256K (extendable to 1M via YaRN) | 201 | Gemini 3 Pro / Claude Opus 4.5 / GPT-5.2 tier | + +### 27B vs 35B-A3B Decision + +- **27B** — Choose for slightly more accurate results when you can't fit a larger model. +- **35B-A3B** — Choose for much faster inference. MoE architecture with only 3B active parameters. + +## Hardware Requirements (Total Memory: RAM + VRAM, or Unified Memory) + +| Variant | 3-bit | 4-bit | 6-bit | 8-bit | BF16 | +|---|---|---|---|---|---| +| **0.8B + 2B** | 3 GB | 3.5 GB | 5 GB | 7.5 GB | 9 GB | +| **4B** | 4.5 GB | 5.5 GB | 7 GB | 10 GB | 14 GB | +| **9B** | 5.5 GB | 6.5 GB | 9 GB | 13 GB | 19 GB | +| **27B** | 14 GB | 17 GB | 24 GB | 30 GB | 54 GB | +| **35B-A3B** | 17 GB | 22 GB | 30 GB | 38 GB | 70 GB | +| **122B-A10B** | 60 GB | 70 GB | 106 GB | 132 GB | 245 GB | +| **397B-A17B** | 180 GB | 214 GB | 340 GB | 512 GB | 810 GB | + +> **Rule of thumb:** Total available memory should exceed the quantized model file size. If it doesn't, llama.cpp can use SSD/HDD offloading but inference will be slower. + +### Notable 397B Configurations + +- **3-bit**: fits on **192GB RAM** systems (e.g., 192GB Mac) +- **4-bit (UD-Q4_K_XL)**: ~214GB on disk — loads directly on **256GB M3 Ultra** +- **Single 24GB GPU + 256GB system RAM** via MoE offloading → **25+ tokens/s** +- **8-bit**: needs ~512GB RAM/VRAM + +## Recommended Inference Parameters + +Qwen3.5 is a hybrid reasoning model, so parameters differ between **thinking** and **non-thinking (instruct)** modes, and further by **task type**. + +### Thinking Mode Parameters + +| Parameter | General Tasks | Precise Coding (e.g. WebDev) | +|---|---|---| +| `temperature` | **1.0** | **0.6** | +| `top_p` | **0.95** | **0.95** | +| `top_k` | **20** | **20** | +| `min_p` | **0.0** | **0.0** | +| `presence_penalty` | **1.5** | **0.0** | +| `repetition_penalty` | **1.0** (disabled) | **1.0** (disabled) | + +### Non-Thinking (Instruct) Mode Parameters + +| Parameter | General Tasks | Reasoning Tasks | +|---|---|---| +| `temperature` | **0.7** | **1.0** | +| `top_p` | **0.8** | **0.95** | +| `top_k` | **20** | **20** | +| `min_p` | **0.0** | **0.0** | +| `presence_penalty` | **1.5** | **1.5** | +| `repetition_penalty` | **1.0** (disabled) | **1.0** (disabled) | + +### Quick Reference — One-Liners + +**Thinking + General:** +``` +temperature=1.0, top_p=0.95, top_k=20, min_p=0.0, presence_penalty=1.5, repetition_penalty=1.0 +``` + +**Thinking + Precise Coding:** +``` +temperature=0.6, top_p=0.95, top_k=20, min_p=0.0, presence_penalty=0.0, repetition_penalty=1.0 +``` + +**Non-Thinking + General:** +``` +temperature=0.7, top_p=0.8, top_k=20, min_p=0.0, presence_penalty=1.5, repetition_penalty=1.0 +``` + +**Non-Thinking + Reasoning:** +``` +temperature=1.0, top_p=0.95, top_k=20, min_p=0.0, presence_penalty=1.5, repetition_penalty=1.0 +``` + +## Context & Output Settings + +| Setting | Value | +|---|---| +| Max context window | **262,144** (256K) | +| Context extension | Up to **1M** via YaRN | +| Recommended starting context | **16,384** (16K) for responsiveness | +| Adequate output length | **32,768** tokens | +| `presence_penalty` range | 0.0–2.0 (default off; higher values may slightly decrease performance) | + +> **Gibberish fix:** If you get gibberish output, your context length may be too low. Try `--cache-type-k bf16 --cache-type-v bf16`. + +## Quantization Recommendations + +- All GGUFs use **Unsloth Dynamic 2.0** quantization — important layers upcasted to 8 or 16-bit even in 4-bit quants. +- Recommended starting point: **Dynamic 4-bit** (`UD-Q4_K_XL`) for all variants. +- Minimum recommended: **Dynamic 2-bit** (`UD-Q2_K_XL`) to balance size and accuracy. +- **MXFP4 layers retired** from Q2_K_XL, Q3_K_XL, and Q4_K_XL quants (except pure MXFP4_MOE). + +### 397B-A17B Quantization Benchmarks (Third-Party, Benjamin Marie) + +| Quant | Accuracy | Change vs Original | Relative Error Increase | +|---|---|---|---| +| Original | 81.3% | — | — | +| UD-Q4_K_XL | 80.5% | −0.8 points | +4.3% | +| UD-Q3_K_XL | 80.7% | −0.6 points | +3.5% | + +> Q3 and Q4 are effectively similar quality. Pick **Q3 for smallest footprint**, **Q4 for a slightly more conservative option**. + +## Thinking Mode Control + +### Enabling Thinking + +```bash +--chat-template-kwargs '{"enable_thinking":true}' +``` + +**Windows PowerShell:** +```bash +--chat-template-kwargs "{\"enable_thinking\":true}" +``` + +### Disabling Thinking + +```bash +--chat-template-kwargs '{"enable_thinking":false}' +``` + +**Windows PowerShell:** +```bash +--chat-template-kwargs "{\"enable_thinking\":false}" +``` + +### Default Thinking Behavior by Variant + +| Variant | Thinking Default | +|---|---| +| **0.8B, 2B, 4B, 9B** (Small) | **Disabled** — must explicitly enable | +| **27B, 35B-A3B, 122B-A10B, 397B-A17B** | **Enabled** — must explicitly disable if unwanted | + +> Use `llama-server` for thinking control (more reliable than `llama-cli`). + +## Critical Warnings + +- ⚠️ **No Qwen3.5 GGUF works in Ollama** due to separate mmproj vision files. Use llama.cpp-compatible backends. +- ⚠️ `presence_penalty` above 0.0 may cause a **slight decrease in performance**. +- ⚠️ If getting gibberish, check context length or use `--cache-type-k bf16 --cache-type-v bf16`. +- Redownload older GGUFs — all updated with improved quantization algorithm, new imatrix data, and tool-calling chat template fixes. + +## Example llama.cpp Commands + +### 35B-A3B — Thinking Mode (General Tasks) + +```bash +export LLAMA_CACHE="unsloth/Qwen3.5-35B-A3B-GGUF" +./llama.cpp/llama-cli \ + -hf unsloth/Qwen3.5-35B-A3B-GGUF:UD-Q4_K_XL \ + --ctx-size 16384 \ + --temp 1.0 --top-p 0.95 --top-k 20 --min-p 0.00 +``` + +### 35B-A3B — Thinking Mode (Precise Coding) + +```bash +export LLAMA_CACHE="unsloth/Qwen3.5-35B-A3B-GGUF" +./llama.cpp/llama-cli \ + -hf unsloth/Qwen3.5-35B-A3B-GGUF:UD-Q4_K_XL \ + --ctx-size 16384 \ + --temp 0.6 --top-p 0.95 --top-k 20 --min-p 0.00 +``` + +### 35B-A3B — Non-Thinking Mode (General) + +```bash +export LLAMA_CACHE="unsloth/Qwen3.5-35B-A3B-GGUF" +./llama.cpp/llama-server \ + -hf unsloth/Qwen3.5-35B-A3B-GGUF:UD-Q4_K_XL \ + --ctx-size 16384 \ + --temp 0.7 --top-p 0.8 --top-k 20 --min-p 0.00 \ + --chat-template-kwargs '{"enable_thinking":false}' +``` + +### 27B — Thinking Mode (Precise Coding) + +```bash +export LLAMA_CACHE="unsloth/Qwen3.5-27B-GGUF" +./llama.cpp/llama-cli \ + -hf unsloth/Qwen3.5-27B-GGUF:UD-Q4_K_XL \ + --ctx-size 16384 \ + --temp 0.6 --top-p 0.95 --top-k 20 --min-p 0.00 +``` + +### 9B (Small) — Enable Thinking (Disabled by Default) + +```bash +export LLAMA_CACHE="unsloth/Qwen3.5-9B-GGUF" +./llama.cpp/llama-server \ + -hf unsloth/Qwen3.5-9B-GGUF:UD-Q4_K_XL \ + --ctx-size 16384 \ + --temp 0.6 --top-p 0.95 --top-k 20 --min-p 0.00 \ + --alias "unsloth/Qwen3.5-9B-GGUF" \ + --port 8001 \ + --chat-template-kwargs '{"enable_thinking":true}' +``` + +### 9B (Small) — Non-Thinking (Default) + +```bash +export LLAMA_CACHE="unsloth/Qwen3.5-9B-GGUF" +./llama.cpp/llama-cli \ + -hf unsloth/Qwen3.5-9B-GGUF:UD-Q4_K_XL \ + --ctx-size 16384 \ + --temp 0.7 --top-p 0.8 --top-k 20 --min-p 0.00 +``` + +### 397B-A17B — Thinking Mode + +```bash +export LLAMA_CACHE="unsloth/Qwen3.5-397B-A17B-GGUF" +./llama.cpp/llama-cli \ + -hf unsloth/Qwen3.5-397B-A17B-GGUF:UD-Q4_K_XL \ + --ctx-size 16384 \ + --temp 0.6 --top-p 0.95 --top-k 20 --min-p 0.00 +``` + +### llama-server Deployment (with Vision) + +```bash +./llama.cpp/llama-server \ + --model unsloth/Qwen3.5-35B-A3B-GGUF/Qwen3.5-35B-A3B-UD-Q4_K_XL.gguf \ + --mmproj unsloth/Qwen3.5-35B-A3B-GGUF/mmproj-F16.gguf \ + --alias "unsloth/Qwen3.5-35B-A3B" \ + --temp 0.6 --top-p 0.95 --ctx-size 16384 \ + --top-k 20 --min-p 0.00 \ + --port 8001 +``` + +### 397B — Conversation Mode with Vision + Tuning Knobs + +```bash +./llama.cpp/llama-cli \ + --model unsloth/Qwen3.5-397B-A17B-GGUF/UD-Q4_K_XL/Qwen3.5-397B-A17B-UD-Q4_K_XL-00001-of-00006.gguf \ + --mmproj unsloth/Qwen3.5-397B-A17B-GGUF/mmproj-F16.gguf \ + --ctx-size 16384 \ + --threads 32 \ + --n-gpu-layers 2 \ + --temp 0.6 --top-p 0.95 --top-k 20 --min-p 0.00 +``` + +> Adjust `--threads` for CPU threads, `--n-gpu-layers` for GPU offloading (remove if CPU-only). + +## OpenAI-Compatible Client Usage + +After deploying via `llama-server`: + +```python +from openai import OpenAI + +openai_client = OpenAI( + base_url = "http://127.0.0.1:8001/v1", + api_key = "sk-no-key-required", +) + +completion = openai_client.chat.completions.create( + model = "unsloth/Qwen3.5-35B-A3B", + messages = [{"role": "user", "content": "Create a Snake game."}], +) + +print(completion.choices[0].message.content) +``` + +## Sources + +- Unsloth Qwen3.5 Documentation (How to Run Locally) +- Qwen3.5 GGUF collection: +- Third-party 397B benchmarks: Benjamin Marie (750-prompt mixed suite: LiveCodeBench v6, MMLU Pro, GPQA, Math500) \ No newline at end of file