diff --git a/docs_new/cards/logos/thinkingmachines.png b/docs_new/cards/logos/thinkingmachines.png new file mode 100644 index 000000000..c4c6771e9 Binary files /dev/null and b/docs_new/cards/logos/thinkingmachines.png differ diff --git a/docs_new/cookbook/autoregressive/ThinkingMachines/Inkling.mdx b/docs_new/cookbook/autoregressive/ThinkingMachines/Inkling.mdx new file mode 100644 index 000000000..4a62e0f0e --- /dev/null +++ b/docs_new/cookbook/autoregressive/ThinkingMachines/Inkling.mdx @@ -0,0 +1,302 @@ +--- +title: Inkling +description: "Deploy Inkling with SGLang — verified launch commands, tuning, and multimodal / reasoning / tool-calling usage for Thinking Machines' 975B Mixture-of-Experts model with 1M-token context." +tag: NEW +--- + +## Deployment + + + + + +For all install methods and hardware platforms, see the [official SGLang installation guide](../../../docs/get-started/install). + + + + + +Inkling support isn't in a `pip` release yet — install from the `inkling-support` branch: + +```bash Command +pip install --upgrade pip +pip install "sglang[all] @ git+https://github.com/sgl-project/sglang.git@inkling-support" +``` + +Then run the **Python** output of the command panel below. + + + + + +The Inkling images are being published to [`lmsysorg/sglang`](https://hub.docker.com/r/lmsysorg/sglang/tags) — watch the tag list for status. + +There are two multi-arch (amd64 / arm64) CUDA builds plus a ROCm build; pick the CUDA build by your CUDA version, not your GPU: + +```bash Command +docker pull lmsysorg/sglang:inkling-cu13 # CUDA 13 +docker pull lmsysorg/sglang:inkling-cu12 # CUDA 12 +docker pull lmsysorg/sglang:inkling-rocm700-mi35x # AMD MI350X / MI355X +``` + +For how to launch the image, see [Install → Method 3: Using Docker](../../../docs/get-started/install#method-3-using-docker). Substitute the inner `sglang serve ...` with what the command generator below produces. + + + + + + + +Pick your hardware to generate the launch command. Each platform ships a **Balanced** recipe plus an **MTP** (speculative decoding) tier and a **Long Context (MXFP8 KV)** tier where validated; the **LoRA** variant serves adapters on top of the frozen base model. Set `MAX_LORAS` to the number of distinct adapters you serve (1 is fastest for single-adapter serving). + +import { Deployment } from "/src/snippets/_deployment.jsx"; +import { config } from "/src/snippets/configs/thinkingmachines/inkling.jsx"; +import { benchmarks } from "/src/snippets/configs/thinkingmachines/inkling-benchmarks.jsx"; + + + +
+

Panel controls (top of the command box):

+
    +
  • ⧉ Copy — copies the current command to your clipboard.
  • +
  • $ cURL — a sample request against localhost:30000 to confirm the server is up.
  • +
  • ⚙ Env — edits the placeholders (HOST_IP, PORT, NODE_RANK, NODE0_IP) the command and cURL share.
  • +
  • Verified / Not Verified badge — green when the (hw, variant, quant, strategy, nodes) combo has been run end-to-end on real hardware; yellow when auto-derived from a neighbor and not yet re-checked.
  • +
+
+ +## Playground + +The Playground is where you experiment with **SGLang features beyond the verified matrix**. The Deploy panel above only emits combinations that have been signed off; the Playground lets you turn on additional knobs on top of whichever cell the Deploy panel is currently showing. The base is read live from your Deploy selection — only your overrides change. + +Lines highlighted **green** are added by your overrides; lines with **red strikethrough** were in the verified base but stripped by an override. Any change flips the badge to **Not Verified** until the new configuration is run end-to-end. + +import { Playground } from "/src/snippets/_playground.jsx"; + + + +## 1. Model Introduction + +**Inkling** is a Mixture-of-Experts model from Thinking Machines — **975B** total parameters, **41B** active per token, with a **1M-token** context window and **open weights** (BF16 and NVFP4 checkpoints below). It handles text, image, and audio inputs natively, and exposes a **variable reasoning-effort** control to trade latency and cost against answer quality. This page covers serving Inkling on SGLang, including its **MTP** speculative-decoding path and long-context prefix caching (unified radix cache + HiCache). + +**Resources:** HuggingFace — [Inkling](https://huggingface.co/thinkingmachines/Inkling) (BF16) · [Inkling-NVFP4](https://huggingface.co/thinkingmachines/Inkling-NVFP4). + +## 2. Configuration Tips + +**Multimodal.** The recipes pass `--enable-multimodal` so the server accepts image and audio inputs alongside text — drop it for text-only serving. + +**Memory pool ratios.** `--swa-full-tokens-ratio` and `--mamba-full-memory-ratio` (both default `0.1`) size the SWA and Mamba/sconv state pools; tune them to your workload's usage. + +**MTP needs `--enable-multi-layer-eagle`.** The MTP recipe drives Inkling's multi-layer draft head; without this flag the standard EAGLE worker runs against it and outputs garbage. + +**Reasoning effort.** Pass `reasoning_effort` as one of the named levels below; requests that omit it default to `high`, and `max` is the strongest. Each level maps to an internal effort value (max at `0.99`): + + + + + + + + + + + + + + + + +
reasoning_effortvalue
none0.0
low0.2
medium0.7
high0.9
xhigh0.99
max0.99
+ +## 3. Advanced Usage + +### 3.1 Reasoning + +Enable the `inkling` reasoning parser (toggle **Reasoning Parser** in the **Parsers** card of the [Playground above](#playground)) to separate thinking from the final answer into `reasoning_content` vs `content`. + + + +```python Example +from openai import OpenAI + +client = OpenAI(base_url="http://localhost:30000/v1", api_key="EMPTY") + +resp = client.chat.completions.create( + model="thinkingmachines/Inkling-NVFP4", + messages=[{"role": "user", "content": "What is 17 times 24?"}], + extra_body={"chat_template_kwargs": {"thinking": True}}, +) +msg = resp.choices[0].message +print("Reasoning:", getattr(msg, "reasoning_content", None)) +print("Answer:", msg.content) +``` + + + + + +```text Output +Reasoning: The user is asking for the product of 17 and 24. Let me calculate that. + +17 × 24 + +I can break this down: +17 × 20 = 340 +17 × 4 = 68 +340 + 68 = 408 + +Alternatively: +24 × 10 = 240 +24 × 7 = 168 +240 + 168 = 408 + +So the answer is 408. +Answer: 17 times 24 is **408**. + +Here's a quick breakdown: +- 17 × 20 = 340 +- 17 × 4 = 68 +- 340 + 68 = **408** +``` + + + +### 3.2 Tool Calling + +Enable the `inkling` tool-call parser (toggle **Tool Call Parser** in the **Parsers** card of the [Playground above](#playground)) to surface structured tool calls via `message.tool_calls`. + + + +```python Example +from openai import OpenAI + +client = OpenAI(base_url="http://localhost:30000/v1", api_key="EMPTY") + +tools = [ + { + "type": "function", + "function": { + "name": "get_weather", + "description": "Get the current weather for a location", + "parameters": { + "type": "object", + "properties": {"location": {"type": "string", "description": "The city name"}}, + "required": ["location"], + }, + }, + } +] + +resp = client.chat.completions.create( + model="thinkingmachines/Inkling-NVFP4", + messages=[{"role": "user", "content": "What's the weather in Beijing?"}], + tools=tools, +) +msg = resp.choices[0].message +print("Reasoning:", getattr(msg, "reasoning_content", None)) +print("Content:", msg.content) +print("Tool calls:", msg.tool_calls) +``` + + + + + +```text Output +Reasoning: The user is asking for the weather in Beijing. I have a tool called `get_weather` that can get the current weather for a location. Let me call it with "Beijing" as the location. +Content: +Tool calls: [ChatCompletionMessageFunctionToolCall(id='call_98f772f3a0044f45b80c5ba5', function=Function(arguments='{"location": "Beijing"}', name='get_weather'), type='function', index=0)] +``` + + + +### 3.3 Multimodal Input (Image + Audio) + +Inkling is multimodal: a single user message can mix **text**, **images**, and **audio**. Pass each media item as its own content part — `image_url` for images, `audio_url` for audio — with the `url` set to either an HTTP(S) link or a base64 `data:` URI. The server must be started with `--enable-multimodal` (already included in every recipe above). + + + +```python Example +import base64 +from openai import OpenAI + +client = OpenAI(base_url="http://localhost:30000/v1", api_key="EMPTY") + +with open("image.png", "rb") as f: + image_b64 = base64.b64encode(f.read()).decode() +with open("audio.wav", "rb") as f: + audio_b64 = base64.b64encode(f.read()).decode() + +resp = client.chat.completions.create( + model="thinkingmachines/Inkling-NVFP4", + messages=[ + { + "role": "user", + "content": [ + {"type": "image_url", "image_url": {"url": f"data:image/png;base64,{image_b64}"}}, + {"type": "audio_url", "audio_url": {"url": f"data:audio/wav;base64,{audio_b64}"}}, + {"type": "text", "text": "Describe the image, then transcribe the audio."}, + ], + } + ], + max_tokens=1024, +) +print(resp.choices[0].message.content) +``` + + + + +Images and audio can be sent as public HTTP(S) URLs instead of base64 — e.g. `{"type": "image_url", "image_url": {"url": "https://.../photo.jpg"}}`. Use one content part per media item; mix as many as the context budget allows. + + +### 3.4 LoRA (Serving Adapters) + +The **LoRA** deploy variant serves adapters on top of the frozen base model. Its launch command adds `--enable-lora --lora-paths lora0={{ADAPTER_PATH}} --max-loras-per-batch {{MAX_LORAS}}` — each adapter is registered under the **name** to the left of `=` (here `lora0`). Adapters can also be added/removed at runtime via the `POST /load_lora_adapter` endpoint. To serve several adapters, pass multiple `--lora-paths name=path` at launch and reference each by its name. + +Pick the adapter per request by that name — either in the `model` field with `base-model:adapter` syntax (recommended), or explicitly via `lora_path` in `extra_body`: + + + +```python Example +from openai import OpenAI + +client = OpenAI(base_url="http://localhost:30000/v1", api_key="EMPTY") + +# Option A (recommended): ":" in the model field +resp = client.chat.completions.create( + model="thinkingmachines/Inkling-NVFP4:lora0", + messages=[{"role": "user", "content": "Summarize the changelog."}], +) + +# Option B: explicit lora_path via extra_body +resp = client.chat.completions.create( + model="thinkingmachines/Inkling-NVFP4", + messages=[{"role": "user", "content": "Summarize the changelog."}], + extra_body={"lora_path": "lora0"}, +) + +print(resp.choices[0].message.content) +``` + + + + +One adapter per request — omit the `:adapter` suffix (and `lora_path`) to hit the base model. Different requests **in the same batch** may use different adapters; the number of *distinct* adapters co-resident in a batch is capped by `--max-loras-per-batch` (the `MAX_LORAS` field, default `1`). If both `model:adapter` and `lora_path` are supplied, the `model` suffix takes precedence. + + +### 3.5 HiCache (Hierarchical KV Caching) + +Inkling serves on SGLang's **unified radix cache**: the historically separate full-attention, SWA, and Mamba/sconv caches are combined into one radix tree with typed components, and native HiCache offloads cold prefix pages across tiers (GPU HBM → host DRAM → disk / remote). This expands effective prefix-cache capacity for multi-turn and long-context workloads. + +To enable HiCache, open the **HiCache** card in the [Playground above](#playground) and flip **Enable**, then pick a storage backend (`file` / `mooncake` / `nixl`) for the L3 tier. The Write policy defaults to `write_through`. + +### 3.6 Long Context (MXFP8 KV) + +The **Long Context** deploy strategy adds `--kv-cache-dtype mxfp8` on top of the Balanced recipe. KV entries are stored as block-scaled MXFP8 instead of BF16, so the SWA + Mamba/sconv memory pool holds roughly 2x as many tokens on the same GPU. Use it when you're context-bound or concurrency-bound. + +**Blackwell only.** MXFP8 KV cache requires Blackwell (B200 / B300 / GB200 / GB300), it's not offered on Hopper (H200). + +The tradeoff is a ~5% decode latency penalty from the extra quantize/dequantize work versus BF16 KV, so treat it as a capacity lever, not a speed one — stay on **Balanced** if you have headroom in the memory pool and just want lower latency. + +To try it, select the **Long Context** strategy in the Deploy panel above for any NVFP4 cell; the panel regenerates the launch command with `--kv-cache-dtype mxfp8` inserted. Verified end-to-end on B200. diff --git a/docs_new/cookbook/autoregressive/intro.mdx b/docs_new/cookbook/autoregressive/intro.mdx index 8183d9170..5dac02921 100644 --- a/docs_new/cookbook/autoregressive/intro.mdx +++ b/docs_new/cookbook/autoregressive/intro.mdx @@ -37,6 +37,12 @@ metatags: href="/cookbook/autoregressive/GLM/GLM-5.2" img="/cards/logos/glm.png" /> + a single honest `balanced` tier. + strategies: [ + { id: "balanced", label: "Balanced" }, + { id: "mtp", label: "MTP" }, + { id: "long_context", label: "Long Context (MXFP8 KV)" }, + ], + nodesOptions: [ + { id: "single", label: "Single Node" }, + { id: "multi-2", label: "Multi-Nodes" }, + ], + + // HF repos under the thinkingmachines org. + modelNames: { + "default|nvfp4": "thinkingmachines/Inkling-NVFP4", + "default|bf16": "thinkingmachines/Inkling", + "lora|nvfp4": "thinkingmachines/Inkling-NVFP4", + "lora|bf16": "thinkingmachines/Inkling", + }, + + placeholders: { + HOST_IP: { target: "command", label: "Bind host", default: "0.0.0.0" }, + PORT: { target: "command", label: "Bind port", default: "30000" }, + NODE0_IP: { target: "command", label: "Head node IP", default: "" }, + NODE_RANK: { target: "command", label: "This node rank", default: "" }, + HF_TOKEN: { target: "command", label: "HF token (Docker)", default: "" }, + ADAPTER_PATH: { target: "command", label: "LoRA adapter dir", default: "" }, + MAX_LORAS: { target: "command", label: "Max LoRAs per batch", default: "1" }, + CURL_HOST: { target: "curl", label: "Server host", default: "localhost" }, + CURL_PORT: { target: "curl", label: "Server port", default: "30000" }, + }, + + curl: `curl http://{{CURL_HOST}}:{{CURL_PORT}}/v1/chat/completions \\ +-H 'Content-Type: application/json' \\ +-d '{ "model": "{{MODEL_NAME}}", "messages": [{"role":"user","content":"Hello"}] }'`, + + // NVIDIA: two multi-arch CUDA builds (inkling-cu12 / inkling-cu13) — pick by your + // CUDA version, not by GPU. AMD: inkling-rocm700-mi35x. Panel defaults to cu13. + dockerImages: { + h200: "lmsysorg/sglang:inkling-cu13", + b200: "lmsysorg/sglang:inkling-cu13", + b300: "lmsysorg/sglang:inkling-cu13", + gb200: "lmsysorg/sglang:inkling-cu13", + gb300: "lmsysorg/sglang:inkling-cu13", + mi350x: "lmsysorg/sglang:inkling-rocm700-mi35x", + mi355x: "lmsysorg/sglang:inkling-rocm700-mi35x", + }, + + github: { + cookbookModel: "thinkingmachines/inkling", + }, + + playgroundFeatures: { + + // ----- Card: "Attention Parallelism" ----- + // TP only. Inkling needs TP=8 to hold the 1M-token SWA + Mamba/sconv pools + // (TP=4 can't fit — see §2). TP=16 is cross-node (multi-node path). + attention: { + knobs: [ + { id: "tp", label: "TP", values: [ + null, 4, 8, + { value: 16, disable: { nodes: ["single"] }, + disableReason: "TP=16 requires 16 ranks — switch the Deploy panel's Nodes to Multi-Nodes first." }, + ]}, + ], + }, + + // ----- Card: "MoE Parallelism" ----- + // Blackwell (SM100) runs the FlashInfer TRT-LLM routed FP4 experts; Hopper (SM90) + // has no FP4 runner and falls back to Marlin W4A16. + moe: { + backend: { + options: [ + { id: null, label: "Inherited" }, + // NVIDIA backends hidden on AMD; AITER/Triton hidden on NVIDIA. + { id: "flashinfer_trtllm_routed", label: "FlashInfer TRT-LLM (routed FP4)", + flags: ["--moe-runner-backend flashinfer_trtllm_routed"], + requiresHw: ["b200", "b300", "gb200", "gb300"], + hide: { hw: ["mi350x", "mi355x"] } }, + { id: "marlin", label: "Marlin (W4A16)", + flags: ["--moe-runner-backend marlin"], + hide: { hw: ["mi350x", "mi355x"] } }, + { id: "aiter", label: "AITER", + flags: ["--moe-runner-backend aiter"], + hide: { hw: ["h200", "b200", "b300", "gb200", "gb300"] } }, + { id: "triton", label: "Triton", + flags: ["--moe-runner-backend triton"], + hide: { hw: ["h200", "b200", "b300", "gb200", "gb300"] } }, + ], + }, + }, + + // ----- Card: "Parsers" ----- + parsers: { + items: [ + { id: "reasoning", label: "Reasoning Parser", flag: "--reasoning-parser inkling" }, + { id: "toolCall", label: "Tool Call Parser", flag: "--tool-call-parser inkling" }, + ], + }, + + // ----- Card: "Speculative Decoding" ----- Inkling ships an MTP draft head. + speculative: { + options: [ + { id: "current", label: "Inherited from base" }, + { id: "off", label: "Off (greedy)" }, + { id: "mtp", label: "EAGLE / MTP 8-1-9", + flags: ["--speculative-algorithm EAGLE", "--speculative-num-steps 8", + "--speculative-eagle-topk 1", "--speculative-num-draft-tokens 9", + "--enable-multi-layer-eagle", "--speculative-use-rejection-sampling"] }, + ], + }, + + // ----- Card: "PD Disaggregation" ----- NVIDIA only; Mooncake MNNVL env gated to GB200/GB300. + pdDisagg: { + modes: [ + { id: "off", label: "Off" }, + { id: "prefill", label: "Prefill role", hide: { hw: ["mi350x", "mi355x"] } }, + { id: "decode", label: "Decode role", hide: { hw: ["mi350x", "mi355x"] } }, + ], + transferBackends: [ + { id: "mooncake", label: "Mooncake", + env: [ + "MC_FORCE_MNNVL=1", + "NCCL_MNNVL_ENABLE=1", + "NCCL_CUMEM_ENABLE=1", + "SGLANG_MOONCAKE_CUSTOM_MEM_POOL=True", + ], + envWhen: { hw: ["gb200", "gb300"] } }, + ], + // Router fronting both roles; 8998 = prefill bootstrap port (default). + router: { + port: 30080, + command: +`python3 -m sglang_router.launch_router \\ + --pd-disaggregation \\ + --prefill http://:{{PREFILL_PORT}} 8998 \\ + --decode http://:{{DECODE_PORT}} \\ + --host 0.0.0.0 --port {{ROUTER_PORT}} \\ + --disable-circuit-breaker \\ + --health-check-interval-secs 999999`, + }, + }, + + // ----- Card: "Hierarchical KV Cache" ----- Native HiCache over the unified radix tree. + hicache: { + backends: [ + { id: null, label: "Auto" }, + { id: "file", label: "File" }, + { id: "mooncake", label: "Mooncake" }, + { id: "nixl", label: "NiXL" }, + ], + writePolicies: [ + { id: "auto", label: "Auto" }, + { id: "write_through", label: "Write-through" }, + { id: "write_back", label: "Write-back" }, + ], + }, + }, + + cells: [ + // ==================================================================== + // NVIDIA Blackwell (SM100) + NVFP4 — FlashInfer TRT-LLM routed FP4 experts. + // B200 verified; B300 / GB200 / GB300 same-arch (GB300 in active validation). + // ==================================================================== + { + match: { hw: "b200", variant: "default", quant: "nvfp4", strategy: "balanced", nodes: "single" }, + verified: true, + env: [ + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 8", + "--quantization modelopt_fp4", + "--attention-backend fa4", + "--page-size 128", + "--fp4-gemm-backend flashinfer_trtllm", + "--moe-runner-backend flashinfer_trtllm_routed", + "--enable-torch-symm-mem", + "--mamba-radix-cache-strategy extra_buffer", + "--mem-fraction-static 0.85", + "--swa-full-tokens-ratio 0.1", + "--mamba-full-memory-ratio 0.1", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + { + match: { hw: "b300", variant: "default", quant: "nvfp4", strategy: "balanced", nodes: "single" }, + env: [ + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 8", + "--quantization modelopt_fp4", + "--attention-backend fa4", + "--page-size 128", + "--fp4-gemm-backend flashinfer_trtllm", + "--moe-runner-backend flashinfer_trtllm_routed", + "--enable-torch-symm-mem", + "--mamba-radix-cache-strategy extra_buffer", + "--mem-fraction-static 0.85", + "--swa-full-tokens-ratio 0.1", + "--mamba-full-memory-ratio 0.1", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + { + match: { hw: "gb200", variant: "default", quant: "nvfp4", strategy: "balanced", nodes: "single" }, + env: [ + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 4", + "--quantization modelopt_fp4", + "--attention-backend fa4", + "--page-size 128", + "--fp4-gemm-backend flashinfer_trtllm", + "--moe-runner-backend flashinfer_trtllm_routed", + "--enable-torch-symm-mem", + "--mamba-radix-cache-strategy extra_buffer", + "--mem-fraction-static 0.85", + "--swa-full-tokens-ratio 0.1", + "--mamba-full-memory-ratio 0.1", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + { + match: { hw: "gb300", variant: "default", quant: "nvfp4", strategy: "balanced", nodes: "single" }, + env: [ + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 4", + "--quantization modelopt_fp4", + "--attention-backend fa4", + "--page-size 128", + "--fp4-gemm-backend flashinfer_trtllm", + "--moe-runner-backend flashinfer_trtllm_routed", + "--enable-torch-symm-mem", + "--mamba-radix-cache-strategy extra_buffer", + "--mem-fraction-static 0.85", + "--swa-full-tokens-ratio 0.1", + "--mamba-full-memory-ratio 0.1", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + // ==================================================================== + // NVIDIA Hopper (SM90) + NVFP4 — no FP4 MoE runner on Hopper -> Marlin W4A16. + // fa4 SplitKV auto-sets num_splits=1 on SM90. H200 verified. + // ==================================================================== + { + match: { hw: "h200", variant: "default", quant: "nvfp4", strategy: "balanced", nodes: "single" }, + verified: true, + env: [ + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 8", + "--quantization modelopt_fp4", + "--attention-backend fa4", + "--page-size 128", + "--fp4-gemm-backend marlin", + "--moe-runner-backend marlin", + "--enable-torch-symm-mem", + "--mamba-radix-cache-strategy extra_buffer", + "--mem-fraction-static 0.85", + "--swa-full-tokens-ratio 0.1", + "--mamba-full-memory-ratio 0.1", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + // AMD ROCm (MI350X / MI355X) + BF16 — verified, TP=8. `--moe-runner-backend` + // sits right after `--tp` so the Playground AITER override (re-inserted at + // that anchor) reproduces this command exactly. + { + match: { hw: "mi350x", variant: "default", quant: "bf16", strategy: "balanced", nodes: "single" }, + verified: true, + env: [ + "SGLANG_USE_AITER=1", + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 8", + "--moe-runner-backend aiter", + "--attention-backend triton", + "--disable-custom-all-reduce", + "--disable-prefill-cuda-graph", + "--mamba-radix-cache-strategy extra_buffer", + "--page-size 128", + "--mem-fraction-static 0.87", + "--swa-full-tokens-ratio 0.2", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + { + match: { hw: "mi355x", variant: "default", quant: "bf16", strategy: "balanced", nodes: "single" }, + verified: true, + env: [ + "SGLANG_USE_AITER=1", + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 8", + "--moe-runner-backend aiter", + "--attention-backend triton", + "--disable-custom-all-reduce", + "--disable-prefill-cuda-graph", + "--mamba-radix-cache-strategy extra_buffer", + "--page-size 128", + "--mem-fraction-static 0.87", + "--swa-full-tokens-ratio 0.2", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + + // ==================================================================== + // Long Context (MXFP8 KV) — block-scaled KV cache shrinks the per-token + // KV footprint, raising how many tokens fit in the memory pool (longer + // context / more concurrent sequences) vs the default BF16 KV. Same base + // command as Balanced + `--kv-cache-dtype mxfp8`. B200 verified + // end-to-end. + // ==================================================================== + { + match: { hw: "b200", variant: "default", quant: "nvfp4", strategy: "long_context", nodes: "single" }, + verified: true, + env: [ + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 8", + "--quantization modelopt_fp4", + "--attention-backend fa4", + "--page-size 128", + "--fp4-gemm-backend flashinfer_trtllm", + "--moe-runner-backend flashinfer_trtllm_routed", + "--enable-torch-symm-mem", + "--mamba-radix-cache-strategy extra_buffer", + "--mem-fraction-static 0.85", + "--swa-full-tokens-ratio 0.1", + "--mamba-full-memory-ratio 0.1", + "--kv-cache-dtype mxfp8", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + { + match: { hw: "b300", variant: "default", quant: "nvfp4", strategy: "long_context", nodes: "single" }, + env: [ + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 8", + "--quantization modelopt_fp4", + "--attention-backend fa4", + "--page-size 128", + "--fp4-gemm-backend flashinfer_trtllm", + "--moe-runner-backend flashinfer_trtllm_routed", + "--enable-torch-symm-mem", + "--mamba-radix-cache-strategy extra_buffer", + "--mem-fraction-static 0.85", + "--swa-full-tokens-ratio 0.1", + "--mamba-full-memory-ratio 0.1", + "--kv-cache-dtype mxfp8", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + { + match: { hw: "gb200", variant: "default", quant: "nvfp4", strategy: "long_context", nodes: "single" }, + env: [ + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 4", + "--quantization modelopt_fp4", + "--attention-backend fa4", + "--page-size 128", + "--fp4-gemm-backend flashinfer_trtllm", + "--moe-runner-backend flashinfer_trtllm_routed", + "--enable-torch-symm-mem", + "--mamba-radix-cache-strategy extra_buffer", + "--mem-fraction-static 0.85", + "--swa-full-tokens-ratio 0.1", + "--mamba-full-memory-ratio 0.1", + "--kv-cache-dtype mxfp8", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + { + match: { hw: "gb300", variant: "default", quant: "nvfp4", strategy: "long_context", nodes: "single" }, + env: [ + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 4", + "--quantization modelopt_fp4", + "--attention-backend fa4", + "--page-size 128", + "--fp4-gemm-backend flashinfer_trtllm", + "--moe-runner-backend flashinfer_trtllm_routed", + "--enable-torch-symm-mem", + "--mamba-radix-cache-strategy extra_buffer", + "--mem-fraction-static 0.85", + "--swa-full-tokens-ratio 0.1", + "--mamba-full-memory-ratio 0.1", + "--kv-cache-dtype mxfp8", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + + // ==================================================================== + // MTP (speculative decoding) — Inkling's multi-layer MTP draft head. + // --enable-multi-layer-eagle is REQUIRED (without it the standard EAGLE + // worker runs against the multi-layer draft and outputs garbage). + // B200 verified end-to-end; H200 from the same validated command set. + // ==================================================================== + { + match: { hw: "b200", variant: "default", quant: "nvfp4", strategy: "mtp", nodes: "single" }, + verified: true, + env: [ + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 8", + "--quantization modelopt_fp4", + "--attention-backend fa4", + "--page-size 128", + "--fp4-gemm-backend flashinfer_trtllm", + "--moe-runner-backend flashinfer_trtllm_routed", + "--enable-torch-symm-mem", + "--mamba-radix-cache-strategy extra_buffer", + "--mem-fraction-static 0.75", + "--swa-full-tokens-ratio 0.1", + "--mamba-full-memory-ratio 0.1", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--speculative-algorithm EAGLE", + "--speculative-num-steps 8", + "--speculative-eagle-topk 1", + "--speculative-num-draft-tokens 9", + "--enable-multi-layer-eagle", + "--speculative-use-rejection-sampling", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + { + match: { hw: "b300", variant: "default", quant: "nvfp4", strategy: "mtp", nodes: "single" }, + env: [ + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 8", + "--quantization modelopt_fp4", + "--attention-backend fa4", + "--page-size 128", + "--fp4-gemm-backend flashinfer_trtllm", + "--moe-runner-backend flashinfer_trtllm_routed", + "--enable-torch-symm-mem", + "--mamba-radix-cache-strategy extra_buffer", + "--mem-fraction-static 0.75", + "--swa-full-tokens-ratio 0.1", + "--mamba-full-memory-ratio 0.1", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--speculative-algorithm EAGLE", + "--speculative-num-steps 8", + "--speculative-eagle-topk 1", + "--speculative-num-draft-tokens 9", + "--enable-multi-layer-eagle", + "--speculative-use-rejection-sampling", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + { + match: { hw: "gb200", variant: "default", quant: "nvfp4", strategy: "mtp", nodes: "single" }, + env: [ + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 4", + "--quantization modelopt_fp4", + "--attention-backend fa4", + "--page-size 128", + "--fp4-gemm-backend flashinfer_trtllm", + "--moe-runner-backend flashinfer_trtllm_routed", + "--enable-torch-symm-mem", + "--mamba-radix-cache-strategy extra_buffer", + "--mem-fraction-static 0.75", + "--swa-full-tokens-ratio 0.1", + "--mamba-full-memory-ratio 0.1", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--speculative-algorithm EAGLE", + "--speculative-num-steps 8", + "--speculative-eagle-topk 1", + "--speculative-num-draft-tokens 9", + "--enable-multi-layer-eagle", + "--speculative-use-rejection-sampling", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + { + match: { hw: "gb300", variant: "default", quant: "nvfp4", strategy: "mtp", nodes: "single" }, + env: [ + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 4", + "--quantization modelopt_fp4", + "--attention-backend fa4", + "--page-size 128", + "--fp4-gemm-backend flashinfer_trtllm", + "--moe-runner-backend flashinfer_trtllm_routed", + "--enable-torch-symm-mem", + "--mamba-radix-cache-strategy extra_buffer", + "--mem-fraction-static 0.75", + "--swa-full-tokens-ratio 0.1", + "--mamba-full-memory-ratio 0.1", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--speculative-algorithm EAGLE", + "--speculative-num-steps 8", + "--speculative-eagle-topk 1", + "--speculative-num-draft-tokens 9", + "--enable-multi-layer-eagle", + "--speculative-use-rejection-sampling", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + { + match: { hw: "h200", variant: "default", quant: "nvfp4", strategy: "mtp", nodes: "single" }, + env: [ + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 8", + "--quantization modelopt_fp4", + "--attention-backend fa4", + "--page-size 128", + "--fp4-gemm-backend marlin", + "--moe-runner-backend marlin", + "--enable-torch-symm-mem", + "--mamba-radix-cache-strategy extra_buffer", + "--mem-fraction-static 0.78", + "--swa-full-tokens-ratio 0.1", + "--mamba-full-memory-ratio 0.1", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--speculative-algorithm EAGLE", + "--speculative-num-steps 8", + "--speculative-eagle-topk 1", + "--speculative-num-draft-tokens 9", + "--enable-multi-layer-eagle", + "--speculative-use-rejection-sampling", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + // ==================================================================== + // GB300 BF16 — 2x GB300 nodes (4 GPUs each) over MNNVL. The NCCL_MNNVL / + // NVLS / CUMEM envs are required: 2-node NCCL init hangs without them. + // MTP on BF16 requires the v3 MTP checkpoint + an SGLang revision with + // v3 MTP support. + // ==================================================================== + { + match: { hw: "gb300", variant: "default", quant: "bf16", strategy: "balanced", nodes: "multi-2" }, + env: [ + "NCCL_MNNVL_ENABLE=1", + "NCCL_NVLS_ENABLE=1", + "NCCL_CUMEM_ENABLE=1", + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 8", + "--dist-timeout 3600", + "--moe-runner-backend flashinfer_trtllm_routed", + "--attention-backend fa4", + "--disable-custom-all-reduce", + "--enable-torch-symm-mem", + "--page-size 128", + "--mamba-radix-cache-strategy extra_buffer", + "--mem-fraction-static 0.87", + "--swa-full-tokens-ratio 0.1", + "--mamba-full-memory-ratio 0.1", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + { + match: { hw: "gb300", variant: "default", quant: "bf16", strategy: "mtp", nodes: "multi-2" }, + env: [ + "NCCL_MNNVL_ENABLE=1", + "NCCL_NVLS_ENABLE=1", + "NCCL_CUMEM_ENABLE=1", + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 8", + "--dist-timeout 3600", + "--moe-runner-backend flashinfer_trtllm_routed", + "--attention-backend fa4", + "--disable-custom-all-reduce", + "--enable-torch-symm-mem", + "--page-size 128", + "--mamba-radix-cache-strategy extra_buffer", + "--mem-fraction-static 0.87", + "--swa-full-tokens-ratio 0.1", + "--mamba-full-memory-ratio 0.1", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--speculative-algorithm EAGLE", + "--speculative-num-steps 8", + "--speculative-eagle-topk 1", + "--speculative-num-draft-tokens 9", + "--enable-multi-layer-eagle", + "--speculative-use-rejection-sampling", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + { + match: { hw: "b300", variant: "default", quant: "bf16", strategy: "balanced", nodes: "single" }, + env: [ + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 8", + "--attention-backend fa4", + "--page-size 128", + "--moe-runner-backend flashinfer_trtllm_routed", + "--enable-torch-symm-mem", + "--mamba-radix-cache-strategy extra_buffer", + "--mem-fraction-static 0.85", + "--swa-full-tokens-ratio 0.1", + "--mamba-full-memory-ratio 0.1", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + { + match: { hw: "b300", variant: "default", quant: "bf16", strategy: "mtp", nodes: "single" }, + env: [ + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 8", + "--attention-backend fa4", + "--page-size 128", + "--moe-runner-backend flashinfer_trtllm_routed", + "--enable-torch-symm-mem", + "--mamba-radix-cache-strategy extra_buffer", + "--mem-fraction-static 0.85", + "--swa-full-tokens-ratio 0.1", + "--mamba-full-memory-ratio 0.1", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--speculative-algorithm EAGLE", + "--speculative-num-steps 8", + "--speculative-eagle-topk 1", + "--speculative-num-draft-tokens 9", + "--enable-multi-layer-eagle", + "--speculative-use-rejection-sampling", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + { + match: { hw: "b200", variant: "default", quant: "bf16", strategy: "balanced", nodes: "multi-2" }, + env: [ + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 16", + "--moe-runner-backend flashinfer_trtllm_routed", + "--attention-backend fa4", + "--disable-custom-all-reduce", + "--page-size 128", + "--mamba-radix-cache-strategy extra_buffer", + "--mem-fraction-static 0.87", + "--swa-full-tokens-ratio 0.1", + "--mamba-full-memory-ratio 0.1", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + { + match: { hw: "b200", variant: "default", quant: "bf16", strategy: "mtp", nodes: "multi-2" }, + env: [ + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 16", + "--moe-runner-backend flashinfer_trtllm_routed", + "--attention-backend fa4", + "--disable-custom-all-reduce", + "--page-size 128", + "--mamba-radix-cache-strategy extra_buffer", + "--mem-fraction-static 0.87", + "--swa-full-tokens-ratio 0.1", + "--mamba-full-memory-ratio 0.1", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--speculative-algorithm EAGLE", + "--speculative-num-steps 8", + "--speculative-eagle-topk 1", + "--speculative-num-draft-tokens 9", + "--enable-multi-layer-eagle", + "--speculative-use-rejection-sampling", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + // ==================================================================== + // LoRA serving. Prefill CUDA graphs auto-disable under --enable-lora. + // Set MAX_LORAS to the number of distinct adapters served (1 is fastest + // for single-adapter serving). All three cells verified end-to-end + // (coherence + trainer-logprob parity + throughput). + // ==================================================================== + { + match: { hw: "b200", variant: "lora", quant: "nvfp4", strategy: "balanced", nodes: "single" }, + verified: true, + env: [ + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + "SGLANG_EXPERIMENTAL_LORA_OPTI=1", + "SGLANG_OPT_LORA_OVERLAP_MAIN_ALLOC=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 8", + "--quantization modelopt_fp4", + "--attention-backend fa4", + "--page-size 128", + "--fp4-gemm-backend marlin", + "--moe-runner-backend experimental_sgl_marlin", + "--enable-torch-symm-mem", + "--mamba-radix-cache-strategy extra_buffer", + "--mem-fraction-static 0.80", + "--swa-full-tokens-ratio 0.1", + "--mamba-full-memory-ratio 0.1", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--enable-lora", + "--lora-backend triton", + "--lora-use-virtual-experts", + "--max-loras-per-batch {{MAX_LORAS}}", + "--lora-paths lora0={{ADAPTER_PATH}}", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + { + match: { hw: "b300", variant: "lora", quant: "nvfp4", strategy: "balanced", nodes: "single" }, + env: [ + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + "SGLANG_EXPERIMENTAL_LORA_OPTI=1", + "SGLANG_OPT_LORA_OVERLAP_MAIN_ALLOC=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 8", + "--quantization modelopt_fp4", + "--attention-backend fa4", + "--page-size 128", + "--fp4-gemm-backend marlin", + "--moe-runner-backend experimental_sgl_marlin", + "--enable-torch-symm-mem", + "--mamba-radix-cache-strategy extra_buffer", + "--mem-fraction-static 0.80", + "--swa-full-tokens-ratio 0.1", + "--mamba-full-memory-ratio 0.1", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--enable-lora", + "--lora-backend triton", + "--lora-use-virtual-experts", + "--max-loras-per-batch {{MAX_LORAS}}", + "--lora-paths lora0={{ADAPTER_PATH}}", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + { + match: { hw: "gb200", variant: "lora", quant: "nvfp4", strategy: "balanced", nodes: "single" }, + env: [ + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + "SGLANG_EXPERIMENTAL_LORA_OPTI=1", + "SGLANG_OPT_LORA_OVERLAP_MAIN_ALLOC=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 4", + "--quantization modelopt_fp4", + "--attention-backend fa4", + "--page-size 128", + "--fp4-gemm-backend marlin", + "--moe-runner-backend experimental_sgl_marlin", + "--enable-torch-symm-mem", + "--mamba-radix-cache-strategy extra_buffer", + "--mem-fraction-static 0.80", + "--swa-full-tokens-ratio 0.1", + "--mamba-full-memory-ratio 0.1", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--enable-lora", + "--lora-backend triton", + "--lora-use-virtual-experts", + "--max-loras-per-batch {{MAX_LORAS}}", + "--lora-paths lora0={{ADAPTER_PATH}}", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + { + match: { hw: "gb300", variant: "lora", quant: "nvfp4", strategy: "balanced", nodes: "single" }, + env: [ + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + "SGLANG_EXPERIMENTAL_LORA_OPTI=1", + "SGLANG_OPT_LORA_OVERLAP_MAIN_ALLOC=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 4", + "--quantization modelopt_fp4", + "--attention-backend fa4", + "--page-size 128", + "--fp4-gemm-backend marlin", + "--moe-runner-backend experimental_sgl_marlin", + "--enable-torch-symm-mem", + "--mamba-radix-cache-strategy extra_buffer", + "--mem-fraction-static 0.80", + "--swa-full-tokens-ratio 0.1", + "--mamba-full-memory-ratio 0.1", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--enable-lora", + "--lora-backend triton", + "--lora-use-virtual-experts", + "--max-loras-per-batch {{MAX_LORAS}}", + "--lora-paths lora0={{ADAPTER_PATH}}", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + { + match: { hw: "h200", variant: "lora", quant: "nvfp4", strategy: "balanced", nodes: "single" }, + verified: true, + env: [ + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + "SGLANG_EXPERIMENTAL_LORA_OPTI=1", + "SGLANG_OPT_LORA_OVERLAP_MAIN_ALLOC=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 8", + "--quantization modelopt_fp4", + "--attention-backend fa4", + "--page-size 128", + "--fp4-gemm-backend marlin", + "--moe-runner-backend experimental_sgl_marlin", + "--enable-torch-symm-mem", + "--mamba-radix-cache-strategy extra_buffer", + "--mem-fraction-static 0.85", + "--swa-full-tokens-ratio 0.1", + "--mamba-full-memory-ratio 0.1", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--enable-lora", + "--lora-backend triton", + "--lora-use-virtual-experts", + "--max-loras-per-batch {{MAX_LORAS}}", + "--lora-paths lora0={{ADAPTER_PATH}}", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + { + match: { hw: "gb300", variant: "lora", quant: "bf16", strategy: "balanced", nodes: "multi-2" }, + verified: true, + env: [ + "NCCL_MNNVL_ENABLE=1", + "NCCL_NVLS_ENABLE=1", + "NCCL_CUMEM_ENABLE=1", + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + "SGLANG_EXPERIMENTAL_LORA_OPTI=1", + "SGLANG_OPT_LORA_OVERLAP_MAIN_ALLOC=1", + "SGLANG_OPT_USE_JIT_KERNEL_MOE_ALIGN=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 8", + "--moe-runner-backend experimental_sgl_trtllm", + "--attention-backend fa4", + "--page-size 128", + "--enable-torch-symm-mem", + "--mamba-radix-cache-strategy extra_buffer", + "--mem-fraction-static 0.87", + "--swa-full-tokens-ratio 0.1", + "--mamba-full-memory-ratio 0.1", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--enable-lora", + "--lora-backend triton", + "--lora-use-virtual-experts", + "--max-loras-per-batch {{MAX_LORAS}}", + "--lora-paths lora0={{ADAPTER_PATH}}", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + { + match: { hw: "h200", variant: "lora", quant: "bf16", strategy: "balanced", nodes: "single" }, + env: [ + "SGLANG_ENABLE_UNIFIED_RADIX_TREE=1", + "SGLANG_EXPERIMENTAL_LORA_OPTI=1", + "SGLANG_OPT_LORA_OVERLAP_MAIN_ALLOC=1", + ], + flags: [ + "--trust-remote-code", + "--model-path {{MODEL_NAME}}", + "--tp 8", + "--moe-runner-backend triton", + "--attention-backend fa4", + "--page-size 128", + "--enable-torch-symm-mem", + "--mamba-radix-cache-strategy extra_buffer", + "--mem-fraction-static 0.87", + "--swa-full-tokens-ratio 0.1", + "--mamba-full-memory-ratio 0.1", + "--enable-multimodal", + "--reasoning-parser inkling", + "--tool-call-parser inkling", + "--enable-lora", + "--lora-backend triton", + "--lora-use-virtual-experts", + "--max-loras-per-batch {{MAX_LORAS}}", + "--lora-paths lora0={{ADAPTER_PATH}}", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + ], +};