From 1c75243f5eda40dbcdfa7c262250661115112e98 Mon Sep 17 00:00:00 2001 From: zijiexia <37504505+zijiexia@users.noreply.github.com> Date: Thu, 2 Jul 2026 00:05:29 -0700 Subject: [PATCH] docs: add Qwen3.6-27B-NVFP4 variant to cookbook (#29905) Co-authored-by: Claude Opus 4.8 --- .../cookbook/autoregressive/Qwen/Qwen3.6.mdx | 8 +++ .../autoregressive/qwen36-deployment.jsx | 54 ++++++++++++++----- 2 files changed, 50 insertions(+), 12 deletions(-) diff --git a/docs_new/cookbook/autoregressive/Qwen/Qwen3.6.mdx b/docs_new/cookbook/autoregressive/Qwen/Qwen3.6.mdx index 38f447fc6..c39fb331e 100644 --- a/docs_new/cookbook/autoregressive/Qwen/Qwen3.6.mdx +++ b/docs_new/cookbook/autoregressive/Qwen/Qwen3.6.mdx @@ -57,6 +57,11 @@ Both variants share the same hybrid reasoning, tool-calling, and multimodal inte Dense 27B [Qwen/Qwen3.6-27B-FP8](https://huggingface.co/Qwen/Qwen3.6-27B-FP8) + + Qwen3.6-27B (NVFP4) + Dense 27B (Blackwell) + [nvidia/Qwen3.6-27B-NVFP4](https://huggingface.co/nvidia/Qwen3.6-27B-NVFP4) + @@ -75,6 +80,9 @@ uv pip install 'git+https://github.com/sgl-project/sglang.git#subdirectory=pytho # Or use Docker (NVIDIA GPUs) docker pull lmsysorg/sglang:latest + +# For the NVFP4 variant (nvidia/Qwen3.6-27B-NVFP4), use the dedicated dev image +docker pull lmsysorg/sglang:dev-cu13-dev-qwen36-27b-nvfp4 ``` For the full Docker setup and other installation methods, please refer to the [official SGLang installation guide](../../../docs/get-started/install). diff --git a/docs_new/src/snippets/autoregressive/qwen36-deployment.jsx b/docs_new/src/snippets/autoregressive/qwen36-deployment.jsx index d30008291..fd8e093de 100644 --- a/docs_new/src/snippets/autoregressive/qwen36-deployment.jsx +++ b/docs_new/src/snippets/autoregressive/qwen36-deployment.jsx @@ -23,10 +23,19 @@ export const Qwen36Deployment = () => { quantization: { name: 'quantization', title: 'Quantization', - items: [ - { id: 'fp8', label: 'FP8', default: true }, - { id: 'bf16', label: 'BF16', default: false }, - ], + // NVFP4 is a Blackwell-only, 27B-only checkpoint (nvidia/Qwen3.6-27B-NVFP4); + // only surface it when both conditions hold so we never emit an unrunnable command. + getDynamicItems: (values) => { + const items = [ + { id: 'fp8', label: 'FP8', default: true }, + { id: 'bf16', label: 'BF16', default: false }, + ]; + const nvfp4Supported = values.modelSize === '27b' && (values.hardware === 'b200' || values.hardware === 'b300'); + if (nvfp4Supported) { + items.push({ id: 'nvfp4', label: 'NVFP4', default: false }); + } + return items; + }, }, reasoning: { name: 'reasoning', @@ -93,8 +102,8 @@ export const Qwen36Deployment = () => { baseName: '27B', h100: { bf16: { tp: 1, mem: 0.8 }, fp8: { tp: 1, mem: 0.8 } }, h200: { bf16: { tp: 1, mem: 0.8 }, fp8: { tp: 1, mem: 0.8 } }, - b200: { bf16: { tp: 1, mem: 0.8 }, fp8: { tp: 1, mem: 0.8 } }, - b300: { bf16: { tp: 1, mem: 0.8 }, fp8: { tp: 1, mem: 0.8 } }, + b200: { bf16: { tp: 1, mem: 0.8 }, fp8: { tp: 1, mem: 0.8 }, nvfp4: { tp: 1 } }, + b300: { bf16: { tp: 1, mem: 0.8 }, fp8: { tp: 1, mem: 0.8 }, nvfp4: { tp: 1 } }, xeon: { bf16: { tp: 6 }, fp8: { tp: 6 } }, }, }; @@ -147,7 +156,7 @@ export const Qwen36Deployment = () => { } return next; }); - }, [values.speculative, values.hardware]); + }, [values.speculative, values.hardware, values.modelSize]); const handleRadioChange = (optionName, value) => { setValues((prev) => ({ ...prev, [optionName]: value })); @@ -161,6 +170,32 @@ export const Qwen36Deployment = () => { return '# Please select a valid hardware and quantization combination'; } + const adjustedValues = { + ...values, + mambaCache: speculative === 'enabled' ? 'v2' : values.mambaCache, + }; + + // NVFP4: nvidia/Qwen3.6-27B-NVFP4 on Blackwell (B200/B300). Follows the exact command + // shape from the checkpoint's docs — explicit --tp-size 1, --attention-backend trtllm_mha, + // new-style --mamba-radix-cache-strategy, and explicit --host/--port (no --mem-fraction-static + // or SGLANG_ENABLE_SPEC_V2 prefix). Reasoning / tool-call parsers still follow their toggles. + if (quantization === 'nvfp4') { + let cmd = `sglang serve --model-path nvidia/Qwen3.6-${sizeConfig.baseName}-NVFP4`; + cmd += ` \\\n --tp-size ${hwConfig.tp} --attention-backend trtllm_mha`; + const reasoningRule = options.reasoning.commandRule(values.reasoning); + if (reasoningRule) cmd += ` \\\n ${reasoningRule}`; + const toolcallRule = options.toolcall.commandRule(values.toolcall); + if (toolcallRule) cmd += ` \\\n ${toolcallRule}`; + if (speculative === 'enabled') { + cmd += ` \\\n --speculative-algorithm EAGLE --speculative-num-steps 3 \\\n --speculative-eagle-topk 1 --speculative-num-draft-tokens 4`; + } + if (adjustedValues.mambaCache === 'v2') { + cmd += ` \\\n --mamba-radix-cache-strategy extra_buffer`; + } + cmd += ` \\\n --host 0.0.0.0 --port 30000`; + return cmd; + } + const quantSuffix = quantization === 'fp8' ? '-FP8' : ''; const modelName = `Qwen/Qwen3.6-${sizeConfig.baseName}${quantSuffix}`; @@ -177,11 +212,6 @@ export const Qwen36Deployment = () => { cmd += ` \\\n --tp ${hwConfig.tp}`; } - const adjustedValues = { - ...values, - mambaCache: speculative === 'enabled' ? 'v2' : values.mambaCache, - }; - for (const [key, option] of Object.entries(options)) { if (key === 'quantization' || key === 'hardware' || key === 'modelSize') continue; if (option.condition && !option.condition(values)) continue;