Files
serverAppConfigs/serverAppConfigs-docs/LLM/Running Qwen3.6 35B A3B FP8 on Dankserver.md
T
Frank a5fe045b58 docs(vault): one fact, one owner — repair the doubled pages, single-source the facts
Structural repair:
- 13 pages were the same document twice (each exactly 2x its HEAD size),
  a second frontmatter block whose closing fence had been glued onto a body
  line by a frontmatter rewrite that re-read its own output. Un-doubled by
  cutting at the second frontmatter and keeping the copy whose body is a
  superset; the orphan census reports 0 lost tokens against HEAD.
- log.md: one entry per date, bare `## YYYY-MM-DD` headings, newest first —
  66 dated headings merged into 34, titles demoted to bold leads, every
  content line verified present. The file had been descending at the head
  and ascending at the tail.

Ownership moves:
- New `LLM/frank-medium.md` is the locator for the retired Dankserver
  endpoint: era windows quoted from each era page's own banner, no numbers
  restated, and the two unresolved date conflicts recorded instead of
  silently resolved. `frank-archon.md` links to it instead of restating the
  pre-rename window.
- The four Pipeline-Parallelism stubs (frontmatter only, no body) are gone;
  `Multi-Node Runtimes.md` owns runtime construction, launch, mixed-vendor
  verdicts and cross-split spec decode, and the four links that pointed at
  the stubs were repointed at it or at the drafter page.
- Authentik's three stub pages fold into `Authentik.md`, with the process
  detail and the outpost reference split out so the parent stays under the
  length hint.

Verified corrections (host census + live probe, 2026-10-19):
- The MXFP4 checkpoint two pages called the "on-disk rollback" is gone:
  /home/dank/models/ holds StillDeadcode, rad and tpl.jinja. Stated once, on
  the era page that owns that payload; the swap page now links to it.
- frank-medium-radiance-mxfp4: the 4.24/7 accept rate belongs to the DFlash2
  arm measured on the FP8 target, not to the MXFP4 era; the 3-family soak run
  census is kept once (155 requests) instead of twice (~120 and 155).
- Fleet shapes re-confirmed against the live endpoints before touching any
  page: 3x200000 fp8 KV, 2x200704, 2x262144.

Index rows are regenerated, not hand-carved. Net -1,849 vault lines.
2026-10-19 05:00:43 -07:00

6.7 KiB

type, description, tags, timestamp
type description tags timestamp
reference Serving a mixture-of-experts FP8 checkpoint on the R9700 host: the load path, the format gate, the offload shape.
llm
2026-09-03

Running Qwen3.6 35B A3B FP8 on Dankserver

RETIRED. This page documents the FP8 vLLM path for Qwen3.6-35B-A3B on Dankserver. The llama.cpp 35B service is retired (2026-08-16), its unit file was removed (2026-08-17), and the FP8 vLLM unit (vllm-qwen36) never shipped and is disabled. The content is kept as research history. The RTX 3090 now runs the PP worker: see Qwen3.8 PP Deployment.

Model Information

Qwen3.6-35B-A3B is a Mixture-of-Experts vision-language model from the Qwen3.6 series. It uses 35B total parameters with only 3B activated per token.

Property Value
HuggingFace ID Qwen/Qwen3.6-35B-A3B-FP8
Base Model Qwen/Qwen3.6-35B-A3B
Architecture Qwen3_5MoeForConditionalGeneration
Total Parameters 35B
Activated Parameters 3B
Experts 256 (8 routed + 1 shared per token)
Layers 40 (10 blocks of 3 DeltaNet + 1 Attention)
Attention Heads 16 Q, 2 KV (head dim 256)
DeltaNet Heads 32 V, 16 QK (head dim 128)
Expert Intermediate Dim 512
Vocab Size 248,320 (padded)
Context Length 262,144 (natively extensible to 1,010,000)
Quantization FP8 (block size 128)
Vision Encoder Yes (image-text-to-text)

Hardware: Dankserver

Property Value
GPU NVIDIA GeForce RTX 3090
VRAM 24 GB
System RAM 62 GB
Swap 127 GB

Memory Calculation

Component BF16 FP8
Activated weights (3B) 6 GB 1.5 GB
Inactive experts (32B) 64 GB 16 GB
Vision encoder ~1 GB ~0.5 GB
Total weights ~71 GB ~18 GB

The FP8 variant requires approximately 18 GB for weights. This leaves approximately 6 GB of the RTX 3090's 24 GB VRAM for KV cache and overhead. Use aggressive memory settings.

Prerequisites

Install vLLM. Version 0.19.0 or later is required for Qwen3.6:

uv pip install vllm --torch-backend=auto

Hardware Quantization Notes (RTX 3090 / Ampere)

The RTX 3090 is an Ampere GPU (compute capability 8.6). It has no native FP8 tensor cores. FP8 W8A8 compute runs through a fallback/dequantization path, so the FP8 model gives memory savings but not full compute speedup. vLLM loads these models and runs them; verify quality against a BF16 run. --kv-cache-dtype fp8 is still valid on CUDA 12 for an FP8 KV cache.

Do not run on production without a BF16 comparison. The FP8 precision path may differ from native-FP8 hardware.

vLLM Serve Commands

Skip the vision encoder to free VRAM for KV cache:

vllm serve Qwen/Qwen3.6-35B-A3B-FP8 \
    --port 8000 \
    --kv-cache-dtype fp8 \
    --gpu-memory-utilization 0.75 \
    --swap-space 32 \
    --max-model-len 131072 \
    --max-num-batched-tokens 2048 \
    --max-num-seqs 32 \
    --reasoning-parser qwen3 \
    --dtype auto

With Vision Encoder

If you need multimodal input, expect higher VRAM usage:

vllm serve Qwen/Qwen3.6-35B-A3B-FP8 \
    --port 8000 \
    --kv-cache-dtype fp8 \
    --gpu-memory-utilization 0.7 \
    --swap-space 32 \
    --max-model-len 131072 \
    --max-num-batched-tokens 1024 \
    --max-num-seqs 16 \
    --reasoning-parser qwen3 \
    --dtype auto

Parameters Explained

Parameter Value Reason
--kv-cache-dtype fp8 FP8 KV cache Cuts KV cache memory by 50%
--gpu-memory-utilization 0.75 75% of VRAM Leaves room for all MoE weights
--swap-space 32 (removed) 32 GB CPU overflow Modern vLLM removed swap-space; use --kv-offloading-size
--max-model-len 131072 128K context Full 262K context is too large for 24 GB
--max-num-batched-tokens 2048 Conservative batch Prevents OOM with MoE
--reasoning-parser qwen3 Qwen3 parser Required for thinking mode output

Model Storage

Root disk has only 20 GB free. Store models on /mnt/entropy:

export HF_HOME=/mnt/entropy/huggingface

Active Service Conflict

The retired frank-zealot service (llama.cpp) used about 22 GB of the 24 GB VRAM. The current PP worker holds ~23.8 GiB. The vllm-awq-qwen36 (Podman) and vllm-qwen36 units are disabled. Before starting any research service, verify that the GPU is free:

nvidia-smi  # verify GPU is free

Sampling Parameters

Mode Temperature Top P Top K Min P Presence Penalty
Thinking (general) 1.0 0.95 20 0.0 0.0
Thinking (coding) 0.6 0.95 20 0.0 0.0
Non-thinking 0.7 0.80 20 0.0 1.5

Set max_tokens to 32768 for general use. Set to 81920 for complex reasoning.

API Examples

Chat with Thinking

curl http://localhost:8000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "Qwen/Qwen3.6-35B-A3B-FP8",
        "messages": [{"role": "user", "content": "Solve: 2+2"}],
        "max_tokens": 32768,
        "temperature": 1.0,
        "top_p": 0.95,
        "top_k": 20
    }'

Non-Thinking Mode

curl http://localhost:8000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "Qwen/Qwen3.6-35B-A3B-FP8",
        "messages": [{"role": "user", "content": "Hello"}],
        "max_tokens": 2048,
        "temperature": 0.7,
        "top_p": 0.8,
        "top_k": 20,
        "presence_penalty": 1.5,
        "extra_body": {
            "chat_template_kwargs": {"enable_thinking": false}
        }
    }'

Ultra-Long Context (YaRN)

Extend context beyond 262,144 tokens. Use this environment variable and override:

VLLM_ALLOW_LONG_MAX_MODEL_LEN=1 vllm serve Qwen/Qwen3.6-35B-A3B-FP8 \
    --hf-overrides '{"text_config": {"rope_parameters": {"mrope_interleaved": true, "mrope_section": [11, 11, 10], "rope_type": "yarn", "rope_theta": 10000000, "partial_rotary_factor": 0.25, "factor": 4.0, "original_max_position_embeddings": 262144}}}' \
    --max-model-len 524288

Troubleshooting

Out of Memory

  1. Kill llama-server to free 20 GB VRAM
  2. Use --language-model-only to skip vision encoder
  3. Reduce --max-model-len to 65536
  4. Reduce --max-num-batched-tokens to 512
  5. Reduce --max-num-seqs to 8

Slow Inference

  1. Verify GPU is exclusive to vLLM
  2. Check temperature with nvidia-smi
  3. Ensure --kv-cache-dtype fp8 is set
  4. Increase --max-num-batched-tokens if memory allows

See Also