Repository navigation
Conversation
…-k31-mc + TEP shared-expert TP shard Move kimik3.1-fp4-b300-vllm-agentic-dspark to inferactinc/public:kimi-k31-mc-f819987-tep-shared-tp-x86_64 (vllm/vllm-openai:kimi-k31-mc plus VLLM_KIMI_K3_TEP_SHARED_TP, default off). Run latency_specialized decode at every point with CUDA graphs captured up to 4096 tokens; TP8 K7 with TokenSpeed draft attention at conc 1, TP8 x DCP8 K7 at conc 4-8 and K3 at conc 16-24, TEP (EP8 MegaMoE) K4 with VLLM_KIMI_K3_TEP_SHARED_TP=1 at conc 32-70. The per-point max-num-seqs and capture sizes are the measured ones; conc 2 was not measured and is dropped. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
abmfy
added a commit
to abmfy/InferenceX
that referenced
this pull request
Nov 7, 2026
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
abmfy
force-pushed
the
abmfy/k31-b300-vllm-tep-shared-tp
branch
from
November 7, 2026 03:18
4aaee31 to
707ff26
Compare
…en-AL revision) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
mispa-ms
added a commit
that referenced
this pull request
Nov 8, 2026
Add concurrency 6 and 16 to the TP8 x DCP8 recipe. Run concurrency 24, 40 and 48 on the #4878 recipe, which also graphs prefill and mixed steps up to 4096 tokens, without the TEP shared-expert variable. Keep concurrency 64 on EP8 MegaMoE with max-num-batched-tokens 16384. Co-authored-by: Bowen Wang <bowen@inferact.ai>
Ankur-singh
added a commit
that referenced
this pull request
Nov 12, 2026
…00 Kimi-K3.1-Pro FP4 vLLM 聚合式配置 (#4871) * Update Kimi-K3.1-Pro B300 vLLM aggregated AgentX configs * Link the B300 vLLM changelog entry to its PR * Update Kimi-K3.1-Pro B300 vLLM aggregated AgentX configs * Update Kimi-K3.1-Pro B300 vLLM aggregated AgentX configs * Update Kimi-K3.1-Pro B300 vLLM aggregated AgentX configs * Update Kimi-K3.1-Pro B300 vLLM aggregated AgentX configs Add concurrency 6 and 16 to the TP8 x DCP8 recipe. Run concurrency 24, 40 and 48 on the #4878 recipe, which also graphs prefill and mixed steps up to 4096 tokens, without the TEP shared-expert variable. Keep concurrency 64 on EP8 MegaMoE with max-num-batched-tokens 16384. Co-authored-by: Bowen Wang <bowen@inferact.ai> * Tune Kimi-K3.1-Pro B300 vLLM aggregated AgentX configs Admit prefill once every 8 engine steps (prefill-schedule-interval 8) at concurrency 24, 40, 48, 64 and 72, so more steps run the fused decode. Move concurrency 48 to the EP8 MegaMoE recipe with FULL_DECODE_ONLY graphs, raise gpu-memory-utilization to 0.98 at concurrency 64, and add concurrency 72. Signed-off-by: Mi Sun Park <misunp@nvidia.com> * Add concurrency 20 to the Kimi-K3.1-Pro B300 vLLM AgentX configs Run concurrency 20 on the mixed-graph recipe with the concurrency-24 settings: TP8 x DCP8, DSpark drafting 3 tokens, CUDA graphs for prefill and mixed steps up to 4096 tokens, and prefill-schedule-interval 8. Signed-off-by: Mi Sun Park <misunp@nvidia.com> * Narrow the Kimi-K3.1-Pro B300 vLLM AgentX sweep to seven frontier points Sweep concurrency 1, 6, 12, 24, 48, 64 and 72. The dropped points (4, 8, 16, 20 and 40) sit on or below the line between their neighbours, so the curve keeps its shape with fewer runs. Concurrency 12 moves to the mixed-graph recipe with the concurrency-24 settings: TP8 x DCP8, DSpark drafting 3 tokens, CUDA graphs for prefill and mixed steps up to 4096 tokens, and prefill-schedule-interval 8. On the same image this raised P90 interactivity by about 10 % at the same throughput per GPU as the FULL_DECODE_ONLY recipe at concurrency 12. Signed-off-by: Mi Sun Park <misunp@nvidia.com> * Lower Kimi-K3.1-Pro B300 concurrency-72 gpu-memory-utilization to 0.97 The concurrency-72 eval job's acceptance-length gate sends 80 requests at once. At gpu-memory-utilization 0.98 the resulting prefill step overflowed the direct DCP workspace, and the fallback combine ran out of GPU memory on every rank, so the eval could not run. Use 0.97, as at concurrency 48. Signed-off-by: Mi Sun Park <misunp@nvidia.com> * Drop Kimi-K3.1-Pro B300 concurrency 72; run concurrency 64 at 0.97 Concurrency 72 had a P90 TTFT of 10.7 s, about four times the other points, for 2 % more throughput per GPU than concurrency 64. Its TTFT tail is engine queue time while requests wait for GPU KV cache, not prefill or preemption, so no setting within this recipe brings it under a few seconds. Concurrency 64 becomes the highest point. The agentic eval now runs at concurrency 64, so it takes gpu-memory-utilization 0.97 like concurrency 48: at 0.98 the eval's 80-request acceptance-length burst ran out of memory in the DCP combine fallback. At 0.97, concurrency 64 measured the same throughput per GPU as at 0.98. Signed-off-by: Mi Sun Park <misunp@nvidia.com> * perf-changelog: describe the Kimi-K3.1-Pro B300 sweep as six points [skip-sweep] Concurrency 1 is not on the throughput/E2EL frontier, so drop 'frontier' from the entry. Signed-off-by: Ankur Singh <ankusingh@nvidia.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Signed-off-by: Mi Sun Park <misunp@nvidia.com> Signed-off-by: Ankur Singh <ankusingh@nvidia.com> Co-authored-by: Bowen Wang <bowen@inferact.ai> Co-authored-by: Ankur Singh <ankusingh@nvidia.com> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Updates
kimik3.1-fp4-b300-vllm-agentic-dspark(one B300 node, aggregated) to a per-concurrency TP8 / TP8 x DCP8 / TEP recipe oninferactinc/public:kimi-k31-mc-f819987-tep-shared-tp-x86_64:vllm/vllm-openai:kimi-k31-mcplus one opt-in vLLM change that is not in upstream vLLM yet.Draft until the blockers below are settled (upstream image and engine-patch rule, vLLM recipe coverage).
Image
inferactinc/public:kimi-k31-mc-f819987-tep-shared-tp-x86_64@sha256:acf503a6058e75a63f0902a7ebb8200f6757d5d5ed92ca50edb67cbbb691ace9(public), built by Inferact's image pipeline from:vllm/vllm-openai:kimi-k31-mc@sha256:f81998764e8594d71b40788c5285ae112acf9230129d5d0d238b5df83da5acf6unchanged (vLLM0.1.dev24218+g78e9a0c28, the day-0-mc image [AgentX] B300 Kimi-K3.1-Pro FP4 vLLM aggregated configs / [AgentX] B300 Kimi-K3.1-Pro FP4 vLLM 聚合式配置 #4871 uses). Its wide-MoE grid is sized by SM count, solatency_specializeddecode graphs wider than 64 rows run on the 148-SM B300.VLLM_KIMI_K3_TEP_SHARED_TP(default off):vllm/envs.pyand the Kimi K3 TEP hybrid decode runtime are copied over the package behind sha256 guards on the base files (diff below). With the variable set, a TEP decode step (TP8 x DCP8 attention + EP8 MegaMoE) runs each rank's TP-8 shard of the BF16 shared expert and folds the routed rows into one all-reduce, instead of every rank streaming the whole replicated shared expert (24 GB per step and rank). Prefill is unchanged. Without the variable the code is that ofkimi-k31-mc.Recipe
TOKENSPEED_MLAdraft attentiondeep_gemm_mega_moe,flashinfer_nvlink_one_sided)VLLM_KIMI_K3_TEP_SHARED_TP=1and gpu-memory-utilization 0.961Every point runs
latency_specializeddecode with explicit CUDA graph capture sizes up to 4096 tokens, so prefill and mixed steps of up to 4096 tokens replay piecewise graphs instead of running eager; larger steps (max-num-batched-tokens is 16384) still run eager and are GPU-bound. gpu-memory-utilization is 0.95 (0.961 at c32-c70) and the Simple CPU KV offload stays at 281.125 GB per rank. The speculative config pins the DSpark draft at6a2ef20a, the #4851 golden-AL revision. The per-point max-num-seqs and capture-size lists are the ones measured; c2 was not measured and is left out.Results
tok/s/GPU @ P90 interactivity (tok/s/user) on our own HGX B300 nodes (8 GPUs, not the
b300-dsxecluster): 3600 s per point, 10 warmup requests per lane, the #4851 golden acceptance lengths, Kimi parsers off as in the synthetic runs, InferenceX scoring. c32-c70 ran on this PR's image; c1-c24 ran onkimi-k31-mcitself, which has the same code with the variable off. SGLang, #4833 and #4871 are their published or PR-sweep values.Every SGLang #4803 point is dominated by a point of this curve (its c16 by our c8, its c70 by our c56). Against #4871's sweep, this curve is ahead at c16-c56 by 4-9% tok/s/GPU at 7-16% higher P90 interactivity and level with it at c8 (-0.1% throughput, +0.8% P90); #4871 is slightly ahead at c4 (+1% throughput, +3% P90), and c1 is a trade-off (+1.6% throughput for #4871, +7% P90 for this recipe). The two sweeps ran on different B300 clusters.
VLLM_KIMI_K3_TEP_SHARED_TP, same recipe: variable off onkimi-k31-mcitself (gpu-memory-utilization 0.95) vs on with this PR's image (0.961). Only the c48 pair ran on the same node:Single-request decode goes from 158.8 to 190.8 tok/s/user (8K-token prompt). The "on" runs also hold about 5% more KV tokens (for example 8.24M vs 7.82M at c32, 8.85M vs 8.45M at c70), so part of the gain at c56-c70, where P90 interactivity does not move and TTFT drops, may come from KV capacity rather than the faster decode step. Runs of equivalent code on different nodes differed by up to 2.5% throughput, so the c56 change is within noise.
Run notes
nvidia-smihung). It was discarded; the c48 value above is the rerun on another node. The c1, c4 and c8 runs from that node had normal warm-probe decode speed.vllm/vllm-openai:kimi-k31with the changes mounted as Python files, an earlier version of the shared-expert change at c32, c40 and c70, and none at c48 and c56. It is within about 2% of the numbers above at c1-c40 except c8 (2.5% higher throughput and 4.9% higher P90 there), and 1-4% lower in throughput at c48-c70 (at c48 also 4.9% lower P90).5e654fbe, sameconfig.jsonas6a2ef20a); with synthetic acceptance the draft weights do not affect timing. The harness also enabled iteration logging.Differences from #4871
Both PRs move this config to
kimi-k31-mcand uselatency_specializeddecode at every point, so they conflict on the same files; this is not a duplicate of it. None of the differences below was ablated against #4871 on B300 except the shared-expert variable, so the gap is not attributed to individual settings:FULL_DECODE_ONLY), so every prefill and mixed step runs eager; this recipe captures steps up to 4096 tokens. On GB300 at c4 (5 draft tokens, 1200 s runs, graphs up to 16384 tokens vs decode sizes only), graphing those steps gave +14% P50 and +18% P90 interactivity at equal throughput and cut the decode stall a 1K-token turn causes from 238 ms to 86 ms.VLLM_KIMI_K3_TEP_SHARED_TPat c32-c70 (table above). With the variable off, c32, c48 and c56 are still 3-5% ahead of [AgentX] B300 Kimi-K3.1-Pro FP4 vLLM aggregated configs / [AgentX] B300 Kimi-K3.1-Pro FP4 vLLM 聚合式配置 #4871 in throughput.Blockers
docs/PR_REVIEW_CHECKLIST.mdrequires vLLM submissions on the upstreamvllmDocker Hub repositories and an engine that runs as shipped; copying patched files overkimi-k31-mccounts as an engine patch unlessdocs/waiver/4878.mdis filed (what is patched, why, upstream PR, removal plan).VLLM_KIMI_K3_TEP_SHARED_TPhas no upstream vLLM PR yet. Until it lands, or a waiver is accepted and the image is re-tagged undervllm/vllm-openai, c32-c70 can run with the variable off onkimi-k31-mcitself (the "Off" column above), which needs no patch.latency_specializedwith EP8 MegaMoE,--use-replayssm,--dcp-comm-backend a2awith the direct gathers,TOKENSPEED_MLAdraft attention, explicit capture sizes up to 4096, orVLLM_KIMI_K3_TEP_SHARED_TP.Accuracy
VLLM_KIMI_K3_TEP_SHARED_TPsums BF16 shared-expert partials across the TP group, the precision of the existingVLLM_KIMI_K3_SHARD_SP_SHARED_EXPERT, not bitwise equal to the replicated path. GSM8K on GB300 with the InferenceX lm-eval recipe (TEP c70, real acceptance, both Kimi parsers): strict-match 0.9818 ± 0.0037 with it vs 0.9795 ± 0.0039 without (official #4833 B300 c70: 0.9773 ± 0.0041). Both arms ran on thekimi-k31image with our development overlay, which also forced the stock DSA indexer and carried a Kimi tool-parser fix, and with an earlier version of the change that differs only in GEMM row padding and memory layout. GSM8K has not run on this PR's image yet; this PR's sweep evaluates it at c70.The vLLM change (diff against the image's files)
AI assistance: the recipe search, the vLLM change, the runs and this description were prepared with Claude Code (
claude-opus-5-5). The submitter will review the change and the measurements before this leaves draft.中文摘要
把
kimik3.1-fp4-b300-vllm-agentic-dspark改为按并发选择拓扑:c1 用 TP8,c4–c24 用 TP8 x DCP8,c32–c70 用 TEP(TP8 x DCP8 注意力 + EP8 MegaMoE)。镜像为inferactinc/public:kimi-k31-mc-f819987-tep-shared-tp-x86_64,即vllm/vllm-openai:kimi-k31-mc(与 #4871 相同)加上一项默认关闭、尚未进入上游 vLLM 的改动VLLM_KIMI_K3_TEP_SHARED_TP:TEP decode 时把 BF16 shared expert 按 TP 切分,并和 routed 输出合并成一次 all-reduce。所有点都用latency_specializeddecode,CUDA graph 捕获到 4096 个 token,不超过 4096 token 的 prefill 和混合 step 也走 graph。在我们自己的 B300 节点上实测(c1–c24 用
kimi-k31-mc本身,c32–c70 用本 PR 的镜像):SGLang #4803 的每个点都被这条曲线支配;相对 #4871,c16–c56 吞吐高 4–9%,P90 交互性高 7–16%,c8 持平,c4 #4871 略好,c1 互有取舍。VLLM_KIMI_K3_TEP_SHARED_TP在 c32–c48 带来 3–5% 的吞吐和 3–6% 的 P90 提升;c56–c70 的 P90 不变,吞吐变化部分可能来自开启后约多 5% 的 KV 容量。由于审查清单要求使用上游镜像且不打引擎补丁,该改动需要上游 PR 或 waiver;在此之前 c32–c70 可以关闭该变量,直接用kimi-k31-mc。🤖 Generated with Claude Code