| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- # Qwen3.8-Flash-Next (NVFP4, SGLang) — 2× DGX Spark / GB10 (sm_121), TP=2.
- #
- # Qwen4-architecture preview: 176B total (6B active) GDN + QSA hybrid MoE,
- # 512 routed experts (top-10) + shared expert, 51B n-gram "engram" table
- # (PLE, offloaded to host RAM), in-checkpoint MTP draft. Text + vision.
- # Native 262144 ctx (YaRN to 1M). Always-thinking.
- #
- # QUANT: NVFP4 (RadixArk), NOT the official FP8. FP8 cannot serve on 2×
- # Spark: its MoE weight_block_size=[128,128] + moe_intermediate_size=640
- # violates SGLang's (intermediate/tp) % block_n == 0 at tp=2 (sgl-project/
- # sglang #21810) — only tp in {1,5} align, and tp=1 can't hold 125B. NVFP4
- # is the community-verified 2× Spark path. SGLang's own cookbook lists the
- # FP8 quant's supported HW as H200/B200/B300/GB300 — not GB10.
- #
- # Image: qwen38-flashnext-nvfp4:local — built by the launcher from
- # docker-images/qwen38-flashnext-nvfp4/ (base lmsysorg/sglang:qwen38flashnext
- # + a SM121 QSA decode kernel fix). The stock day-0 image cannot serve
- # qwen4_exp on GB10: QSA's packed varlen decode resolves to flash-attn-4
- # CuTe-DSL kernels that fail MLIR compilation on SM121; the overlay swaps in
- # a CUDA-graph-safe Triton fallback. Provenance/validation:
- # https://github.com/MiaAI-Lab/Qwen3.8-Flash-Next-Dual-DGX-Sparks
- #
- # Model: RadixArk/Qwen3.8-Flash-Next-NVFP4 (~135 GB)
- # https://huggingface.co/RadixArk/Qwen3.8-Flash-Next-NVFP4
- #
- # REFERENCE:
- # https://forums.developer.nvidia.com/t/qwen3-8-flash-next/381228
- engine = "sglang"
- name = "Qwen3.8-Flash-Next NVFP4 (SGLang, 2× Spark)"
- docker_image = "qwen38-flashnext-nvfp4:local"
- docker_image_dir = "qwen38-flashnext-nvfp4"
- model = "RadixArk/Qwen3.8-Flash-Next-NVFP4"
- parent_model = "Qwen/Qwen3.8-Flash-Next"
- required_nodes = 2
- tensor_parallel_size = 2
- pipeline_parallel_size = 1
- distributed_backend = "mp"
- shm_size = "32gb"
- entrypoint = ["python3", "-m", "sglang.launch_server"]
- args = [
- # Stable served name — quant-agnostic, shared with qwen38-flash-next-fp8 so
- # swapping quants never changes what agents/clients pin against.
- "--served-model-name", "qwen3.8-flash-next",
- "--trust-remote-code",
- # NVFP4 (ModelOpt) weights
- "--quantization", "modelopt_fp4",
- # flashinfer is required on SM120/SM121 (trtllm_mha is SM100-only)
- "--attention-backend", "flashinfer",
- # page 64 is pinned by SGLang for compressed QSA (full//ratio addressing)
- "--page-size", "64",
- # GDN (DeltaNet) hybrid state pool
- "--mamba-ssm-dtype", "bfloat16",
- "--mamba-radix-cache-strategy", "extra_buffer",
- "--mamba-track-interval", "64",
- # Memory — 0.70 leaves DRAM for the ~26 GB/rank pinned PLE (engram) table
- "--mem-fraction-static", "0.70",
- "--chunked-prefill-size", "4096",
- "--max-running-requests", "16",
- "--context-length", "262144",
- # NEXTN speculative decoding — draft = the in-checkpoint MTP layer
- "--speculative-algorithm", "NEXTN",
- "--speculative-num-steps", "3",
- "--speculative-eagle-topk", "1",
- "--speculative-num-draft-tokens", "4",
- # Parsers (auto = resolve from the checkpoint chat template)
- "--reasoning-parser", "auto",
- "--tool-call-parser", "auto",
- "--allow-auto-truncate",
- # Observability
- "--enable-metrics",
- "--enable-cache-report",
- # SM121 house rule: prefill CUDA graphs unreliable on GB10
- "--disable-prefill-cuda-graph",
- # Pin decode-graph batch list (default list OOMs the graph pool on GB10)
- "--cuda-graph-bs-decode", "1", "2", "3", "4", "5", "6", "7", "8", "10", "12", "14", "16",
- ]
- [env]
- # Offline — weights must be cached on each node
- HF_HUB_OFFLINE = "1"
- TRANSFORMERS_OFFLINE = "1"
- # Architecture (aarch64 / sm_121a DGX Spark)
- TORCH_CUDA_ARCH_LIST = "12.1a"
- FLASHINFER_CUDA_ARCH_LIST = "12.1a"
- CUTE_DSL_ARCH = "sm_121a"
- OMP_NUM_THREADS = "4"
|