Qwen3.8-Flash-Next NVFP4 2x CMP 170HX TEP2 GDS SSD PLE MTP6
00 upvotes — sign in to vote sign in to votecommunity Community submission — verify on your own hardware.
recipe by nguyenthimy2022kg-alt↗ · listed by localai-recipes
revision r3 · commit 7d911c7dd2 · updated 21 h ago · license CC-BY-4.0
chat code mtp-speculative long-context speculative prefix-caching nvme-offload nvfp4 modelopt cufile expert-parallel gds marlin mtp6 pcie-ipc ple ssd-ple tep2
Recipe by nguyenthimy2022kg-alt. Community patched vLLM run of the NVIDIA Qwen3.8-Flash-Next NVFP4 checkpoint on 2x unlocked CMP 170HX (SM80, ~63.4 GiB usable each) with TEP2 tensor+expert parallel and fixed MTP6 speculative decoding with per-request draft isolation. v0.3.0 supports 1-10 active requests (max_num_seqs accepts 1-10, defaults to 1 when omitted; repo example sets 10) with compact/topk vocabulary transport and expanded PCIe communication; history-copy (ngram hybrid) drafting removed. The ~51.2 GB FP8 PLE table stays on NVMe, read GPU-direct via GDS/cuFile with 32 persistent readers and 3 staging slots - no CPU-memory relay; optional host-read PLE backend off by default. FlashInfer PCIe IPC AllReduce, 36-token prefix matching, bayley/cmpunlocker BAR1/P2P driver + host GDS. Measured upstream (2026-10-11, thinking off): 10 requests x 5,000 tokens, 749.67 tok/s aggregate, 76.29/request; historical 2026-09-08 window 151.05-168.29 tok/s decode at 8K-128K inputs xhigh thinking.
Launch command
'docker run -d --pull=never --name <name> --label qwen-flash-sm80.managed=1' '--memory 21g --memory-swap 26g --gpus all --ipc=host -p 127.0.0.1:18420:8000' '-v <models_root>:/models:ro -v <ple_artifact>:/ple:ro' '-v config/cufile.json:/config/cufile.json:ro -v config/local-ple-identity.json:/config/ple-identity.json:ro' '-v /run/udev:/run/udev:ro' '-e HF_HUB_OFFLINE=1 -e VLLM_PLE_GDS=1 -e VLLM_PLE_GDS_RUNNER=1' '-e VLLM_PLE_GDS_WORKERS=32 -e VLLM_PLE_GDS_STAGING_SLOTS=3' '-e CUFILE_USE_PCIP2PDMA=1 -e Q38_DRAFT_INT8=1' '-e CUDA_VISIBLE_DEVICES=<uuid0>,<uuid1> -e VLLM_PLE_GDS_GPU_UUID=<uuid0> -e VLLM_PLE_GDS_GPU_BDF=<bdf0>' qwen-flash-sm80:0.3.0 'vllm serve /models/NVIDIA-Qwen3.8-Flash-Next-GDS' '--served-model-name qwen3.8-flash-next --host 0.0.0.0 --port 8000' '--load-format safetensors --safetensors-load-strategy lazy' '--distributed-executor-backend mp --tensor-parallel-size 2 --pipeline-parallel-size 1 --enable-expert-parallel' '--quantization modelopt --linear-backend marlin --moe-backend marlin --dtype bfloat16' '--max-model-len 262144 --block-size 3456 --max-num-seqs 10 --gpu-memory-utilization 0.93' '--enable-prefix-caching --mamba-cache-mode align --enable-chunked-prefill --max-num-batched-tokens 8192' '--no-async-scheduling --reasoning-parser qwen3 --enable-auto-tool-choice --tool-call-parser qwen3_coder' '--default-chat-template-kwargs {"enable_thinking": true, "preserve_thinking": true, "reasoning_effort": "xhigh"}' '--override-generation-config {"temperature": 1.0, "top_p": 0.95, "top_k": 20, "min_p": 0.0, "presence_penalty": 0.0, "frequency_penalty": 0.0, "repetition_penalty": 1.0, "max_new_tokens": 262144}' -cc.cudagraph_mode=FULL_AND_PIECEWISE '-cc.splitting_ops=["vllm::unified_attention_with_output","vllm::unified_mla_attention_with_output","vllm::mamba_mixer2","vllm::mamba_mixer","vllm::short_conv","vllm::qwen3_8_flash_next_ple_short_conv","vllm::qwen3_8_flash_next_qsa_with_output","vllm::linear_attention","vllm::qwen_gdn_attention_core","vllm::qwen_gdn_attention_core_fused_norm_packed","vllm::sparse_attn_indexer","vllm::ple_mmap_lookup","vllm::ple_gds_lookup"]' '-cc.inductor_compile_config={"combo_kernels":false,"benchmark_combo_kernel":false}' --no-enable-flashinfer-autotune '--speculative-config {"method": "mtp", "num_speculative_tokens": 6, "use_local_argmax_reduction": true, "draft_sample_method": "greedy", "rejection_sample_method": "standard"}' '--limit-mm-per-prompt {"image":128,"video":0} --prefix-match-unit 36'Use this recipe with your agent
Paste this into any agent chat — it fetches and applies the recipe:
Fetch https://localairecipes.com/api/v1/recipes/qwen3-8-flash-next-nvfp4-2x-cmp-170hx-tep2-gds-ssd-ple-mtp6.json and apply the inference recipe it describes (engine flags, model, quant, context) to my setup. Ask before overwriting any existing config.Or fetch it directly:
curl -fsSL https://localairecipes.com/api/v1/recipes/qwen3-8-flash-next-nvfp4-2x-cmp-170hx-tep2-gds-ssd-ple-mtp6.jsonDownloads
- Weights https://huggingface.co/nvidia/Qwen3.8-Flash-Next-NVFP4/tree/fc694b54fb0174e0913e6adf86691ef85a4ead47fc694b54fb0174e0913e6adf86691ef85a4ead47
- Engine image https://hub.docker.com/r/vllm/vllm-openai
- Reference https://github.com/nguyenthimy2022kg-alt/Qwen-Flash-SM80-170HX4d229f1438486fa759727f128fc28f3609423dbb
Revision notes
Recipe by nguyenthimy2022kg-alt (community project, Apache-2.0); submitter/listed_by = localai-recipes. Source pinned at 4d229f1438486fa759727f128fc28f3609423dbb (tag v0.3.0, 'feat: release v0.3.0 with ten-request MTP6 and compact transport', 2026-10-14; the v0.2.x-line optional PLE host-read backend f3bfb5d/93f34c8 is retained - default remains SSD-to-GPU GDS, disabled by default). Deploy docs are Chinese; launch argv transcribed verbatim from config/vllm-args.json + scripts/serve.py at 4d229f1438 (single vllm-args delta vs the prior pin: speculative-config num_speculative_tokens 32 -> 6), launch values max_num_seqs=10 / gpu_memory_utilization=0.93 per config/example.json + docs/DEPLOYMENT.en.md; flags verified against serve.py gates (mode tep2/tp2, exactly 2 distinct GPU ids, max_num_seqs 1-10 int, gpu_memory_utilization 0<v<=1, draft_int8 hard-required true, use_local_argmax_reduction tied to it, num_speculative_tokens forced to 6 - 'MTP6 uses six candidates for every request; history copying was removed'; tp2 mode strips --enable-expert-parallel). max_num_seqs accepts 1-10 and defaults to 1 when omitted; the repository example sets it to 10. Requests share the VRAM cache: the 262,144 context limit does not allocate that capacity to all ten requests simultaneously; keep synchronous scheduling. Capability at this pin: ten-request support, fixed MTP6, compact/topk vocabulary transport (NEW src/q38_topk_transport.py, sha256 efa75f6d88bf04c4233ae5dfa9a48547413790b0a950a317de0f0511a4d32796 per patches/runtime-sha256.json, source origin topk-vocab10-validated-20261012); the ngram_hybrid path was removed (src/hybrid-defaults.json + src/ngram_hybrid_runtime.py DELETED). patches/runtime-sha256.json / patches/upstream-sha256.json verified at this pin: 595 runtime files, matching release-validation runtime_files_verified_prepublication=595; model checkpoint revision pin unchanged fc694b54fb0174e0913e6adf86691ef85a4ead47 (per release-validation model.revision) and base image unchanged (Dockerfile diff-empty). Performance: historical 2026-09-08 pre-v0.2.0 RadixArk campaign (README/性能记录.md) kept, clearly dated; v0.3.0 ten-request numbers authored upstream per docs/release-validation-0.3.0.json + docs/MULTI_REQUEST.en.md (2026-10-11). context_len 2048 in the points array is a short-prompt band marker, not a measured context. The pre-v0.3.0 'window capacity 32 / 16-32-token history fragments (not MTP32)' wording is obsolete at this pin: the history-copy draft path and its num_speculative_tokens=32 window were deleted with ngram_hybrid. kanban t_69ea26f0 (owner go 2026-10-28, preprod only).
Revision history
- 7d911c7dd2 recipe: update qwen3-8-flash-next-nvfp4-2x-cmp-170hx-tep2-gds-ssd-ple-mtp6 (r3: /artifacts, /config/launch, /engine, /performance, /summary, /provenance/notes) 15 h ago diff
- b31ce8fa1a recipe: update qwen3-8-flash-next-nvfp4-2x-cmp-170hx-tep2-gds-ssd-ple-mtp6 (r3: /max_context_len) 10 d ago diff
- e33e389f37 recipe: update qwen3-8-flash-next-nvfp4-2x-cmp-170hx-tep2-gds-ssd-ple-mtp6 (r2: /summary) 16 d ago diff
- 01067d27d2 recipe: create qwen3-8-flash-next-nvfp4-2x-cmp-170hx-tep2-gds-ssd-ple-mtp6 16 d ago
Fork
Sign in to fork this recipe — a fork is your own copy; you own it and only you can update it.