From 98ef7d8ae62ec4e189ed42f34d90a12fdecc8210 Mon Sep 17 00:00:00 2001 From: Yash Akhauri Date: Wed, 2 Sep 2026 20:52:05 -0700 Subject: [PATCH] docs: add K2 Horizon cookbook recipes and H200 results (#37655) --- docs/cards/logos/ifm.png | Bin 0 -> 67084 bytes .../autoregressive/IFM/K2-Horizon.mdx | 254 +++++++++++++++ docs/cookbook/autoregressive/intro.mdx | 6 + docs/docs.json | 6 + .../configs/IFM/k2-horizon-benchmarks.jsx | 125 ++++++++ docs/src/snippets/configs/IFM/k2-horizon.jsx | 303 ++++++++++++++++++ 6 files changed, 694 insertions(+) create mode 100644 docs/cards/logos/ifm.png create mode 100644 docs/cookbook/autoregressive/IFM/K2-Horizon.mdx create mode 100644 docs/src/snippets/configs/IFM/k2-horizon-benchmarks.jsx create mode 100644 docs/src/snippets/configs/IFM/k2-horizon.jsx diff --git a/docs/cards/logos/ifm.png b/docs/cards/logos/ifm.png new file mode 100644 index 0000000000000000000000000000000000000000..1b76c749cc6bc7faa2edd0222ac7e7eda14df67c GIT binary patch literal 67084 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 + + + +Install from a source checkout that includes the K2 Horizon runtime support in [PR #37654](https://github.com/sgl-project/sglang/pull/37654) before using the generated commands: + +```bash Command +pip install --upgrade pip +pip install -e "python" +``` + +For general source-install guidance, see [Install → Method 2: From source](/docs/get-started/install#method-2-from-source). + + + +Choose a model size to generate its validated single-node H200 launch command. The serving settings in all six base recipes completed two independent H200 benchmark launches at the pinned model revisions using the K2 Horizon runtime support in [PR #37654](https://github.com/sgl-project/sglang/pull/37654). + +import { Deployment } from "/src/snippets/_deployment.jsx"; +import { config } from "/src/snippets/configs/IFM/k2-horizon.jsx"; +import { benchmarks } from "/src/snippets/configs/IFM/k2-horizon-benchmarks.jsx"; + + + +Each speed and accuracy value in the benchmark cards is the arithmetic mean of two independent server launches. + +## Playground + +The base recipes enable the `k2_horizon` reasoning parser. Use the Playground to configure the `k2_horizon` tool-call parser, TP and MoE expert-parallel overrides, NGRAM speculative decoding, PD disaggregation, and HiCache. A separate validation pass functionally exercised the tool-call parser on all six checkpoints; every other Playground override remains unverified. + +import { Playground } from "/src/snippets/_playground.jsx"; + + + +## 1. Model introduction + +**K2 Horizon** is an IFM model family spanning six checkpoints from **0.9B** to **375B** parameters. The family includes dense models, Mixture-of-Experts models, and the 36B checkpoint's routed Mixture-of-Value-Attention path. This page provides native SGLang serving recipes for the family. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
CheckpointArchitectureContext lengthH200 recipe
0.9BDense131,072BF16 · TP1
3.7BDense524,288BF16 · TP1
7BDense524,288BF16 · TP1
32BDense524,288BF16 · TP2
36BMoE + MoVA524,288BF16 · TP2
375BMoE524,288BF16 · TP8
+ + + All six checkpoints use the Apache License 2.0. + + +**Resources:** [K2 Horizon collection](https://huggingface.co/collections/IFM/k2-horizon) · [K2 Horizon 375B model card](https://huggingface.co/IFM/K2-Horizon-375B). + +## 2. Configuration tips + +- **Hardware and precision:** The current matrix covers NVIDIA H200 GPUs and BF16 checkpoints only. +- **Parallelism:** Use TP1 for 0.9B, 3.7B, and 7B; TP2 for 32B and 36B; and TP8 for 375B. Each recipe stays within one node. +- **Attention:** The verified base recipes select FlashAttention-3 with `--attention-backend fa3`. +- **Revisions:** The recipes pin revisions `9b9ec1f7e17f62ed218df542687a144116219d84` (0.9B), `c177771836a4c460743c00002c22483f6f18d1eb` (3.7B), `69ada542b68fe13d767479db2ab9421baff88681` (7B), `e1fd0277713e4eefcd3416348fd6fedacf7f2392` (32B), `16d20c739c687c08423422d1a2fbba6c529014cd` (36B), and `12812264242a14dce44aa7ae27f931ff4584bcbf` (375B). +- **Parsers:** The base recipes enable reasoning with `--reasoning-parser k2_horizon`. Enable `--tool-call-parser k2_horizon` from the **Parsers** card in the [Playground](#playground) when you need tool calling. +- **36B router provenance:** The 36B checkpoint's source xLLM router used two GEMM partitions. `--json-model-override-args '{"xllm_source_router_gemm_partitions":2}'` preserves its BF16 partial-GEMM rounding and FP32 reduction order; SGLang does not infer this source topology from runtime TP. +- **375B loading:** The 375B recipe disables multithreaded weight loading with `--model-loader-extra-config '{"enable_multithread_load":false}'`. +- **Playground features:** TP, EP, NGRAM, PD disaggregation, and HiCache are optional, unverified command overrides. The tool-call parser was functionally exercised separately. +- **Deliberate omissions:** Context parallelism is unsupported or unvalidated for xLLM. DP-attention and alternate MoE backend selectors are not exposed until they are validated. +- **Validation:** All six recipes completed native speed and full GSM8K evaluation on H200 using the K2 Horizon runtime support in [PR #37654](https://github.com/sgl-project/sglang/pull/37654). +- **375B provenance:** The 375B benchmark launched a directly mounted checkpoint and passed revision `12812264242a14dce44aa7ae27f931ff4584bcbf` to the server. The other five launches used materialized Hugging Face snapshots at their pinned revisions. + +## 3. Benchmark results + +Speed was measured with native `sglang.benchmark.serving` using fixed random token IDs: 8,192 input tokens, 1,024 output tokens, 64 warmup requests, a cache flush, and seed `20260901`. The latency run used 32 prompts at concurrency 1. The throughput run used 256 prompts at concurrency 64 for TP1, 32 for TP2, and 8 for TP8. TTFT and TPOT are medians within each launch; the benchmark cards show the arithmetic mean across the two launches. Throughput per GPU is `(total input tokens + total output tokens) / duration / TP`. + +GSM8K used the full 1,319-example test split with `sgl-eval`, 32 client threads, a 32,768-token output limit, temperature 0, top-p 0.95, seed 0, and high reasoning effort. The mean and both independent server-launch scores are shown below. All requests completed without errors. Responses that reached the output limit remain in the score: truncation was 6.90% in both 0.9B launches, 4.09% and 4.70% for 3.7B, and at most 1.14% for the other checkpoints. + +| Checkpoint | Launch 1 | Launch 2 | Mean | +| --- | ---: | ---: | ---: | +| 0.9B | 85.22% | 85.29% | 85.25% | +| 3.7B | 92.12% | 91.89% | 92.00% | +| 7B | 95.30% | 94.47% | 94.88% | +| 32B | 95.75% | 96.21% | 95.98% | +| 36B | 95.45% | 94.84% | 95.15% | +| 375B | 95.53% | 95.60% | 95.56% | + +## 4. Advanced usage + +### 4.1 Reasoning + +The base recipes include `--reasoning-parser k2_horizon`. The parser returns thinking in `reasoning_content` and the final answer in `content`. + +The example output below was captured with the 3.7B checkpoint and both parser flags enabled. + + + +```python Example +from openai import OpenAI + +client = OpenAI(base_url="http://localhost:30000/v1", api_key="EMPTY") +response = client.chat.completions.create( + model="IFM/K2-Horizon-3.7B", + messages=[{"role": "user", "content": "Hello"}], +) + +message = response.choices[0].message +reasoning = getattr(message, "reasoning_content", None) +if reasoning is None: + reasoning = (message.model_extra or {}).get("reasoning_content") +print("Reasoning:", reasoning) +print("Answer:", message.content) +``` + + + + + +```text Output +Reasoning: We have a user who just said "Hello". We need to respond. As an AI, we should be friendly, perhaps ask how can we help. If says "Hello" alone, respond with greeting and offer assistance. Potentially ask what they need. There's no special instruction; just typical. + +But maybe we must think about the context: The user gave just a greeting; we should respond with a greeting and ask how we can help. Could also ask if they want anything specific. + +We should be concise but friendly: "Hello! How can I assist you today?" Provide some content. + +But maybe the user expects something else. But in this scenario, we just reply with a greeting. + +Thus answer: "Hello! What can I do for you?" Etc. + +Check any style guidelines: We want to keep it short or perhaps ask follow-up. The user didn't ask any question, just saying hello. Could also respond: "Hello! ..." + +Thus arguably the answer: "Hi there! How can I help you today?" Let's do that. + +But also maybe we could ask if they need help with something specific. That's appropriate. + +Thus the final answer: "Hello! How can I assist you today?" Possibly add friendly banter. + +We'll respond. + +Answer: +Hello! 👋 How can I help you today? +``` + + + +### 4.2 Tool calling + +Enable **Tool Call Parser** in the **Parsers** card of the [Playground](#playground) to add `--tool-call-parser k2_horizon`. The parser exposes K2 tool output as OpenAI-compatible `message.tool_calls`. + +The example output below was captured with the 32B checkpoint and both parser flags enabled. + + + +```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": "Return weather for a city.", + "parameters": { + "type": "object", + "properties": {"city": {"type": "string"}}, + "required": ["city"], + }, + }, + } +] + +response = client.chat.completions.create( + model="IFM/K2-Horizon-32B", + messages=[{"role": "user", "content": "Call get_weather for Paris."}], + tools=tools, + tool_choice={"type": "function", "function": {"name": "get_weather"}}, + max_tokens=1024, +) + +message = response.choices[0].message +reasoning = getattr(message, "reasoning_content", None) +if reasoning is None: + reasoning = (message.model_extra or {}).get("reasoning_content") +print("Reasoning:", reasoning) +print("Content:", message.content or "") +for tool_call in message.tool_calls or []: + print(f"Tool call: {tool_call.function.name}({tool_call.function.arguments})") +``` + + + + + +```text Output +Reasoning: Okay, the user wants me to call the get_weather function for Paris. Let me check the tools available. There's a function called get_weather that takes a city parameter. The required parameter is city, and it's a string. So I need to make sure to pass "Paris" as the city. I don't see any other parameters needed. The user didn't mention any other details, so I'll just use the city name. Let me structure the tool call correctly. The function name is get_weather, and the arguments should be a JSON object with "city": "Paris". I need to make sure the JSON is properly formatted. Alright, that should do it. + +Content: +Tool call: get_weather({"city": "Paris"}) +``` + + + +### 4.3 HiCache + +For large checkpoints or repeated long-context prefixes, enable **HiCache** in the [Playground](#playground), then choose a storage backend and write policy. Treat the generated override as unverified until it is exercised on your storage stack. diff --git a/docs/cookbook/autoregressive/intro.mdx b/docs/cookbook/autoregressive/intro.mdx index 69b565570..39740eebf 100644 --- a/docs/cookbook/autoregressive/intro.mdx +++ b/docs/cookbook/autoregressive/intro.mdx @@ -7,6 +7,12 @@ metatags: --- + :{{PREFILL_PORT}} \\ + --decode http://:{{DECODE_PORT}} \\ + --host 0.0.0.0 --port {{ROUTER_PORT}} \\ + --disable-circuit-breaker \\ + --health-check-interval-secs 999999`, + }, + }, + + hicache: { + backends: [ + { id: null, label: "Auto" }, + { id: "file", label: "File" }, + { id: "mooncake", label: "Mooncake" }, + { id: "hf3fs", label: "HF3FS" }, + { id: "nixl", label: "NiXL" }, + ], + writePolicies: [ + { id: "auto", label: "Auto" }, + { id: "write_through", label: "Write-through" }, + { id: "write_back", label: "Write-back" }, + { id: "write_through_selective", label: "Write-through (selective)" }, + ], + }, + }, + + cells: [ + { + match: { hw: "h200", variant: "0.9b", quant: "bf16", strategy: "balanced", nodes: "single" }, + verified: true, + env: [], + flags: [ + "--model-path {{MODEL_NAME}}", + "--revision 9b9ec1f7e17f62ed218df542687a144116219d84", + "--tp 1", + "--dtype bfloat16", + "--attention-backend fa3", + "--reasoning-parser k2_horizon", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + { + match: { hw: "h200", variant: "3.7b", quant: "bf16", strategy: "balanced", nodes: "single" }, + verified: true, + env: [], + flags: [ + "--model-path {{MODEL_NAME}}", + "--revision c177771836a4c460743c00002c22483f6f18d1eb", + "--tp 1", + "--dtype bfloat16", + "--attention-backend fa3", + "--reasoning-parser k2_horizon", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + { + match: { hw: "h200", variant: "7b", quant: "bf16", strategy: "balanced", nodes: "single" }, + verified: true, + env: [], + flags: [ + "--model-path {{MODEL_NAME}}", + "--revision 69ada542b68fe13d767479db2ab9421baff88681", + "--tp 1", + "--dtype bfloat16", + "--attention-backend fa3", + "--reasoning-parser k2_horizon", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + { + match: { hw: "h200", variant: "32b", quant: "bf16", strategy: "balanced", nodes: "single" }, + verified: true, + env: [], + flags: [ + "--model-path {{MODEL_NAME}}", + "--revision e1fd0277713e4eefcd3416348fd6fedacf7f2392", + "--tp 2", + "--dtype bfloat16", + "--attention-backend fa3", + "--reasoning-parser k2_horizon", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + { + match: { hw: "h200", variant: "36b", quant: "bf16", strategy: "balanced", nodes: "single" }, + verified: true, + env: [], + flags: [ + "--model-path {{MODEL_NAME}}", + "--revision 16d20c739c687c08423422d1a2fbba6c529014cd", + "--tp 2", + "--dtype bfloat16", + "--json-model-override-args '{\"xllm_source_router_gemm_partitions\":2}'", + "--attention-backend fa3", + "--reasoning-parser k2_horizon", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + { + match: { hw: "h200", variant: "375b", quant: "bf16", strategy: "balanced", nodes: "single" }, + verified: true, + env: [], + flags: [ + "--model-path {{MODEL_NAME}}", + "--revision 12812264242a14dce44aa7ae27f931ff4584bcbf", + "--tp 8", + "--dtype bfloat16", + "--attention-backend fa3", + "--model-loader-extra-config '{\"enable_multithread_load\":false}'", + "--reasoning-parser k2_horizon", + "--host {{HOST_IP}}", + "--port {{PORT}}", + ], + }, + ], +};