|
| 1 | +# Candidate model: `mmangkad/Qwen3.6-27B-NVFP4` |
| 2 | + |
| 3 | +A candidate alternative runtime model. **Architecturally supported** by the |
| 4 | +vLLM image lepenseur already runs, but **not yet load-tested live** — see the |
| 5 | +benchmark plan below. Tracked by [issue #6](https://github.com/agentculture/lepenseur/issues/6). |
| 6 | + |
| 7 | +Source: <https://huggingface.co/mmangkad/Qwen3.6-27B-NVFP4> — public, Apache-2.0. |
| 8 | + |
| 9 | +## What it is |
| 10 | + |
| 11 | +- NVFP4 (NVIDIA ModelOpt) quantization of **`Qwen/Qwen3.6-27B`**. |
| 12 | +- `config.json`: `architectures: ["Qwen3_5ForConditionalGeneration"]`, |
| 13 | + `model_type: qwen3_5`, 64 layers, `hidden_size 5120`, |
| 14 | + `max_position_embeddings 262144` (**256K** context), multimodal RoPE |
| 15 | + (`mrope_interleaved`, `mrope_section`). |
| 16 | +- ~20B effective params after compression; ~20 GB on disk (BF16 / F8_E4M3 / U8 |
| 17 | + tensors). ModelOpt producer `0.42.0rc1.dev107` (a dev/rc build). |
| 18 | + |
| 19 | +## Is it supported here? — Yes (architecture), pending live load |
| 20 | + |
| 21 | +The deciding check: query the **running** vLLM engine's model registry rather |
| 22 | +than guess. |
| 23 | + |
| 24 | +```text |
| 25 | +$ docker exec lepenseur-vllm python3 -c \ |
| 26 | + "from vllm.model_executor.models.registry import ModelRegistry; \ |
| 27 | + print('Qwen3_5ForConditionalGeneration' in ModelRegistry.get_supported_archs())" |
| 28 | +True |
| 29 | +``` |
| 30 | + |
| 31 | +The `nvcr.io/nvidia/vllm:26.04-py3` image (engine `0.19.0+...nv26.04`) registers |
| 32 | +`Qwen3_5ForConditionalGeneration` (plus `Qwen3_5MoeForConditionalGeneration` and |
| 33 | +`Qwen3_5MTP`) — the exact architecture this checkpoint declares. The quant flag |
| 34 | +(`--quantization=modelopt_fp4`) and `--reasoning-parser=qwen3` are the same ones |
| 35 | +already working for the 32B. So the same compose can serve it. |
| 36 | + |
| 37 | +"Registered" means vLLM can instantiate the model class; it does not prove the |
| 38 | +weights load and serve cleanly. That requires the live load-test below. |
| 39 | + |
| 40 | +## How to run (same compose, model override) |
| 41 | + |
| 42 | +```bash |
| 43 | +# in .env |
| 44 | +VLLM_MODEL=mmangkad/Qwen3.6-27B-NVFP4 |
| 45 | +VLLM_SERVED_NAME=mmangkad/Qwen3.6-27B-NVFP4 # must match culture.yaml's vllm-local/<name> |
| 46 | +# keep --quantization=modelopt_fp4 and --reasoning-parser=qwen3 (already in compose) |
| 47 | +docker compose up -d |
| 48 | +``` |
| 49 | + |
| 50 | +Memory note: at 256K context the KV cache is large. Keep |
| 51 | +`VLLM_MAX_MODEL_LEN=32768` (or similar) for a first load; only raise it with |
| 52 | +headroom to spare. The GB10 has 121 GB unified memory total. |
| 53 | + |
| 54 | +## Caveats to validate during the load-test |
| 55 | + |
| 56 | +1. **SGLang is the blessed runtime.** The model card recommends `sglang serve` |
| 57 | + (with `--tool-call-parser qwen3_coder`), not vLLM. vLLM support is present in |
| 58 | + the registry but is not the card's documented path. |
| 59 | +2. **`ForConditionalGeneration` + multimodal RoPE.** The arch and `mrope` config |
| 60 | + suggest a vision/multimodal lineage; text-only chat should still serve, but |
| 61 | + confirm vLLM does not demand an image/processor path at load. |
| 62 | +3. **ModelOpt dev/rc producer** (`0.42.0rc1.dev107`) — verify the quant config |
| 63 | + parses under this vLLM build. |
| 64 | + |
| 65 | +## Benchmark plan (to be filled when load-tested) |
| 66 | + |
| 67 | +Run the same methodology used for the 32B (see |
| 68 | +[`qwen3-32b-nvfp4.md`](qwen3-32b-nvfp4.md)) so the two are comparable: |
| 69 | + |
| 70 | +- Health + `/v1/models` reachable. |
| 71 | +- Correctness on the same two probes (train-times, `17 × 23`), confirming the |
| 72 | + `reasoning` field populates. |
| 73 | +- Decode throughput: 512 tokens forced (`ignore_eos`), batch=1, greedy. |
| 74 | +- Prefill: ~2K-token prompt, 16-token gen. |
| 75 | +- Record image/engine version, weights-on-disk, and GPU memory reserved. |
| 76 | + |
| 77 | +| Property | Value | |
| 78 | +|---|---| |
| 79 | +| Decode throughput | _TBD_ | |
| 80 | +| Prefill | _TBD_ | |
| 81 | +| GPU memory reserved | _TBD_ | |
| 82 | +| Correctness | _TBD_ | |
| 83 | + |
| 84 | +### For comparison — 32B baseline (2026-05-27, GB10) |
| 85 | + |
| 86 | +~9.7 tok/s decode (batch=1), ~2,800 tok/s prefill, ~72 GB reserved at |
| 87 | +`gpu-memory-utilization=0.6`. |
0 commit comments