Files
serverAppConfigs/serverAppConfigs-docs/LLM/Running Qwen3.6 35B A3B FP8 on Dankserver.md
T
Frank 87721ab0fe rename frank-small → frank-secondary (Dankclaw llama.cpp :7771)
Cross-cutting rename of the current llama.cpp endpoint on the RTX 3090
(port 7771) from frank-small to frank-secondary:

- Service trio: scripts/{frank-small.env,frank-small.service,
  serve-frank-small.sh,download-frank-small.sh} → frank-secondary.*
- Test: tests/frank_small_unit.bats → tests/frank_secondary_unit.bats
- Runbooks: serverAppConfigs-docs/LLM/frank-small-*.md →
  frank-secondary-*.md (9 files); the FreeToken runbook stays
  freetoken-frank-small.md (it documents the retired CUDA-era service)
- Identifiers: FRANK_SMALL→FRANK_SECONDARY, llm_small→llm_secondary,
  LLM_SMALL_*→LLM_SECONDARY_*, deploy_llm_small→deploy_llm_secondary
- Historical references to the OLD frank-small (FreeToken/CUDA on the
  3090, and the Dankserver service that became frank-medium) are
  preserved verbatim — they describe what the service was called
  at the time.
2026-10-06 15:37:13 -07:00

6.6 KiB

type, description, tags, timestamp
type description tags timestamp
reference Qwen3.6-35B-A3B is a Mixture-of-Experts vision-language model from the Qwen3.6 series.
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-secondary 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