[Cookbook] Kimi-K3: add measured B300 1x8 Unified 8k/1k speed numbers (#37878)

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
zijiexia
2026-09-04 17:44:00 -07:00
committed by GitHub
co-authored by Claude Opus 5
parent a44bb397a9
commit 3b64169f9d
3 changed files with 91 additions and 10 deletions
@@ -81,6 +81,16 @@ import { KimiK3MambaRatioCalculator } from "/src/snippets/_kimi_k3_mamba_ratio_c
<Deployment config={config} benchmarks={benchmarks} /> <Deployment config={config} benchmarks={benchmarks} />
<Note>
B300 1×8 Unified speed numbers are measured on `v0.5.18 @ 71de97b2` with `--random-range-ratio 1.0`,
`--warmup-requests 64`, `--flush-cache`, at ISL 8192 / OSL 1024. DSPARK cells pin the acceptance
length via the serve env `SGLANG_SIMULATE_ACC_LEN=4.5` — they report what block size 7 delivers at
that acceptance, not a measured acceptance rate for this workload. Balanced DSPARK adds
`--max-running-requests 256`; without it speculation resets the cap to 48. The KDA state pool still
clamps admission below that (101 / 68 / 91 / 60 concurrent requests for MXFP4 NOSPEC / MXFP4 DSPARK /
NVFP4 NOSPEC / NVFP4 DSPARK), which is why no point past concurrency 64 is published for Balanced.
</Note>
### Mamba ratio calculator ### Mamba ratio calculator
<KimiK3MambaRatioCalculator /> <KimiK3MambaRatioCalculator />
@@ -124,9 +134,10 @@ are scheduled to release by July 27, 2026**. The recipes on this page were valid
repository (`moonshotai/Kimi-K3`) and a public `lmsysorg/sglang` image with K3 support will be repository (`moonshotai/Kimi-K3`) and a public `lmsysorg/sglang` image with K3 support will be
available at launch. available at launch.
Every cell in the Deploy panel above is currently marked **Final Verification In Progress**: the The B300 1×8 `Unified` Low-Latency and Balanced cells are **Verified** — a speed round on the final
recipe runs, but its serving round on the final weights and current code is still open. Re-measure weights is published below. Every other cell is still marked **Final Verification In Progress**: the
throughput and accuracy before you rely on any of them. recipe runs, but its serving round on the final weights and current code is still open. Accuracy has
not been re-measured on any cell — re-measure before you rely on one.
</Note> </Note>
**Recommended generation:** `temperature=1.0`, `top_p=0.95`, `presence_penalty=0`, `frequency_penalty=0` (fixed by the model; informational — do not hardcode in sample code). **Recommended generation:** `temperature=1.0`, `top_p=0.95`, `presence_penalty=0`, `frequency_penalty=0` (fixed by the model; informational — do not hardcode in sample code).
@@ -155,7 +166,7 @@ Speculation: DSPARK holds block size + 1 (= 8) intermediate states per request
**Context length.** `--context-length` bounds the longest accepted request plus some context-scaled buffers; it does not size the KV pool. For long context the lever that adds capacity is `fp8_e4m3` KV. **Context length.** `--context-length` bounds the longest accepted request plus some context-scaled buffers; it does not size the KV pool. For long context the lever that adds capacity is `fp8_e4m3` KV.
**DSPARK.** Adds `--speculative-algorithm DSPARK` plus the draft checkpoint on top of the showing strategy. Leave `--speculative-draft-attention-backend` unset. No serving round on the final draft checkpoint has landed — measure against the same recipe running NOSPEC before adopting. **DSPARK.** Adds `--speculative-algorithm DSPARK` plus the draft checkpoint on top of the showing strategy. Leave `--speculative-draft-attention-backend` unset. The published B300 DSPARK numbers pin the acceptance length with `SGLANG_SIMULATE_ACC_LEN`, so no measured acceptance rate exists for a real workload yet — measure against the same recipe running NOSPEC before adopting.
**Per-platform notes:** **Per-platform notes:**
@@ -179,7 +190,7 @@ Speculation: DSPARK holds block size + 1 (= 8) intermediate states per request
- Calculator ratios run well above 1 here (`r > 1` is legal): `bfloat16` state buys admission, `fp8` KV buys context. - Calculator ratios run well above 1 here (`r > 1` is legal): `bfloat16` state buys admission, `fp8` KV buys context.
- Don't use EP with an a2a backend: a2a buffers reclaim the KV that DCP buys. Compose only to measure. a2a backend is set when `--moe-a2a-backend` is set. - Don't use EP with an a2a backend: a2a buffers reclaim the KV that DCP buys. Compose only to measure. a2a backend is set when `--moe-a2a-backend` is set.
No cell has a serving round in this exact shape — treat them as starting points to verify. Outside the two verified B300 1×8 `Unified` cells, no cell has a serving round in this exact shape — treat those as starting points to verify.
<a id="amd-env" /> <a id="amd-env" />
@@ -19,4 +19,76 @@ export const benchmarks = [
{ match: { hw: "gb200", pdMode: "unified", strategy: "low-latency" } }, { match: { hw: "gb200", pdMode: "unified", strategy: "low-latency" } },
{ match: { hw: "gb200", pdMode: "unified", strategy: "balanced" } }, { match: { hw: "gb200", pdMode: "unified", strategy: "balanced" } },
{ match: { hw: "gb200", pdMode: "unified", strategy: "high-throughput" } }, { match: { hw: "gb200", pdMode: "unified", strategy: "high-throughput" } },
{
match: { hw: "b300", pdMode: "unified", strategy: "low-latency", quant: "mxfp4", spec: "none" },
sglang_version: "v0.5.18 @ 71de97b2",
speed: [
{ workload: { dataset: "random", isl: 8192, osl: 1024, max_concurrency: 1 },
ttft_ms: 378, tpot_ms: 8.51, tokens_per_sec_per_gpu: 127 },
{ workload: { dataset: "random", isl: 8192, osl: 1024, max_concurrency: 16 },
ttft_ms: 3539, tpot_ms: 19.47, tokens_per_sec_per_gpu: 785 },
],
},
{
match: { hw: "b300", pdMode: "unified", strategy: "low-latency", quant: "mxfp4", spec: "dspark" },
sglang_version: "v0.5.18 @ 71de97b2",
speed: [
{ workload: { dataset: "random", isl: 8192, osl: 1024, max_concurrency: 1 },
ttft_ms: 389, tpot_ms: 2.84, tokens_per_sec_per_gpu: 351 },
{ workload: { dataset: "random", isl: 8192, osl: 1024, max_concurrency: 16 },
ttft_ms: 3942, tpot_ms: 9.88, tokens_per_sec_per_gpu: 1319 },
],
},
{
match: { hw: "b300", pdMode: "unified", strategy: "low-latency", quant: "nvfp4", spec: "none" },
sglang_version: "v0.5.18 @ 71de97b2",
speed: [
{ workload: { dataset: "random", isl: 8192, osl: 1024, max_concurrency: 1 },
ttft_ms: 369, tpot_ms: 10.12, tokens_per_sec_per_gpu: 107 },
{ workload: { dataset: "random", isl: 8192, osl: 1024, max_concurrency: 16 },
ttft_ms: 3387, tpot_ms: 20.94, tokens_per_sec_per_gpu: 742 },
],
},
{
match: { hw: "b300", pdMode: "unified", strategy: "low-latency", quant: "nvfp4", spec: "dspark" },
sglang_version: "v0.5.18 @ 71de97b2",
speed: [
{ workload: { dataset: "random", isl: 8192, osl: 1024, max_concurrency: 1 },
ttft_ms: 380, tpot_ms: 3.24, tokens_per_sec_per_gpu: 313 },
{ workload: { dataset: "random", isl: 8192, osl: 1024, max_concurrency: 16 },
ttft_ms: 3765, tpot_ms: 9.77, tokens_per_sec_per_gpu: 1345 },
],
},
{
match: { hw: "b300", pdMode: "unified", strategy: "balanced", quant: "mxfp4", spec: "none" },
sglang_version: "v0.5.18 @ 71de97b2",
speed: [
{ workload: { dataset: "random", isl: 8192, osl: 1024, max_concurrency: 64 },
ttft_ms: 11635, tpot_ms: 40.19, tokens_per_sec_per_gpu: 1395 },
],
},
{
match: { hw: "b300", pdMode: "unified", strategy: "balanced", quant: "mxfp4", spec: "dspark" },
sglang_version: "v0.5.18 @ 71de97b2",
speed: [
{ workload: { dataset: "random", isl: 8192, osl: 1024, max_concurrency: 64 },
ttft_ms: 12038, tpot_ms: 24.47, tokens_per_sec_per_gpu: 1987 },
],
},
{
match: { hw: "b300", pdMode: "unified", strategy: "balanced", quant: "nvfp4", spec: "none" },
sglang_version: "v0.5.18 @ 71de97b2",
speed: [
{ workload: { dataset: "random", isl: 8192, osl: 1024, max_concurrency: 64 },
ttft_ms: 11063, tpot_ms: 41.55, tokens_per_sec_per_gpu: 1373 },
],
},
{
match: { hw: "b300", pdMode: "unified", strategy: "balanced", quant: "nvfp4", spec: "dspark" },
sglang_version: "v0.5.18 @ 71de97b2",
speed: [
{ workload: { dataset: "random", isl: 8192, osl: 1024, max_concurrency: 64 },
ttft_ms: 11664, tpot_ms: 22.17, tokens_per_sec_per_gpu: 1946 },
],
},
]; ];
@@ -454,7 +454,7 @@ export const config = {
--dataset-name {{DATASET}} \\ --dataset-name {{DATASET}} \\
--random-input-len {{ISL}} --random-output-len {{OSL}} --random-range-ratio 1.0 \\ --random-input-len {{ISL}} --random-output-len {{OSL}} --random-range-ratio 1.0 \\
--num-prompts {{NUM_PROMPTS}} --max-concurrency {{MAX_CONCURRENCY}} \\ --num-prompts {{NUM_PROMPTS}} --max-concurrency {{MAX_CONCURRENCY}} \\
--flush-cache`, --warmup-requests 64 --flush-cache`,
// num_prompts = 5 × concurrency (measured floor 16). // num_prompts = 5 × concurrency (measured floor 16).
numPromptsByConc: { 1: 16, 16: 80, 64: 320, 256: 1280, 1024: 5120 }, numPromptsByConc: { 1: 16, 16: 80, 64: 320, 256: 1280, 1024: 5120 },
}, },
@@ -1013,8 +1013,7 @@ export const config = {
{ {
match: { hw: "b300", pdMode: "unified", strategy: "low-latency" }, match: { hw: "b300", pdMode: "unified", strategy: "low-latency" },
nnodes: 1, nnodes: 1,
verified: false, verified: true,
verificationStatus: "in-progress",
env: [], env: [],
// No --enable-symm-mem: it makes the fused all-reduce auto-probe skip. // No --enable-symm-mem: it makes the fused all-reduce auto-probe skip.
flags: [ flags: [
@@ -1031,8 +1030,7 @@ export const config = {
{ {
match: { hw: "b300", pdMode: "unified", strategy: "balanced" }, match: { hw: "b300", pdMode: "unified", strategy: "balanced" },
nnodes: 1, nnodes: 1,
verified: false, verified: true,
verificationStatus: "in-progress",
env: [], env: [],
flags: [ flags: [
"--trust-remote-code", "--trust-remote-code",