Skip to content

RTX 2050 4GB: Qwen3.6-35B-A3B-NVFP4 runs at ~21 tok/s with single-layer CPU MoE prefill buffer #239

Description

@yakuto4

This is my first time submitting a technical report on GitHub.
I am not an expert on FreeToken internals. I tested this with the assistance of AI (ChatGPT), which helped me diagnose the errors and modify the configuration/source code. I am reporting the result because it may be useful for low-VRAM GPU support.
My goal was to see whether Qwen3.6-35B-A3B-NVFP4 could run practically on a GPU with only 4 GB VRAM.
Environment

  • GPU: NVIDIA GeForce RTX 2050, 4 GB VRAM
  • OS: Windows 11 + WSL2 / Ubuntu 24.04
  • FreeToken: current main branch, version 0.1.2
  • Model: nvidia/Qwen3.6-35B-A3B-NVFP4
  • CPU MoE threads: 8
    With the default CPU MoE configuration, FreeToken allocates a two-layer prefill buffer:
    override("moe_cache_size", 2 * num_experts)
    override("moe_prefill_overlap", True)

On my 4 GB GPU this eventually failed with CUDA device not ready errors during GPU allocations.
I changed only these two source lines in python/freetoken/engine/engine.py:

  • override("moe_cache_size", 2 * num_experts)
  • override("moe_prefill_overlap", True)
  • override("moe_cache_size", num_experts)
  • override("moe_prefill_overlap", False)

For this model, num_experts = 256, so this reduces the GPU MoE cache from 512 slots to 256 slots and disables prefill overlap.
I also used:
export FREETOKEN_PIN_BUDGET_GB=10
export FREETOKEN_MAMBA_SSM_DTYPE=float16

ft serve
--model-path nvidia/Qwen3.6-35B-A3B-NVFP4
--max-seq-len-override 1024
--num-tokens 512
--memory-ratio 0.98
--attention-backend triton
--moe-backend cpu
--expert-load serial
--moe-cpu-threads 8
--max-running-requests 1
--host 127.0.0.1
--port 1919
The server successfully initialized and accepted OpenAI-compatible /v1/chat/completions requests.
Example measured decode throughput:
Decode batch ... gen throughput (token/s): 20.70
Decode batch ... gen throughput (token/s): 21.33
So the steady-state decode throughput was approximately 21 tokens/sec on an RTX 2050 with only 4 GB VRAM.
For comparison, in my previous testing with a 12 GB GPU, the same general FreeToken/Qwen3.6-35B-A3B-NVFP4 setup was around 30 tokens/sec.
There are still limitations. The expert banks could not all be OS-locked and FreeToken reported that they were left pageable. The configuration is also deliberately using a very small 512-token KV cache. Therefore, I am not suggesting that this is an optimal general-purpose configuration.
However, I thought the result was interesting because reducing the CPU-MoE prefill GPU cache from two expert layers to one allowed this 35B-A3B NVFP4 model to run and generate successfully on a 4 GB GPU.
Perhaps a low-VRAM option to use a single-layer prefill buffer with prefill overlap disabled could be useful upstream.
Again, this report was prepared with AI assistance, so please let me know if I have misunderstood any FreeToken internals or if additional logs/tests would be useful.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions