Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
63 commits
Select commit Hold shift + click to select a range
9b1e9b2
feat(agentx): add Kimi K3 H200 day-0 support
cquil11 Jul 27, 2026
16d44ef
chore: link Kimi K3 H200 changelog to PR
cquil11 Jul 27, 2026
18a61bd
refactor(runners): add pluggable Slurm multi-node connector
cquil11 Jul 27, 2026
c31b634
refactor(runners): simplify native multi-node launch
cquil11 Jul 27, 2026
f4279ac
fix(kimik3): use default model context length
cquil11 Jul 27, 2026
902951a
docs(kimik3): trim benchmark changelog
cquil11 Jul 27, 2026
4be37db
refactor(kimik3): trust benchmark environment
cquil11 Jul 27, 2026
b12f1ae
fix(h200): set native vLLM port
cquil11 Jul 28, 2026
2d8d435
fix(kimik3): unblock H200 model loading
cquil11 Jul 28, 2026
ec0c20d
fix(kimik3): align rendezvous host with Slurm rank zero
cquil11 Jul 28, 2026
bbbbc3d
fix(kimik3): provision full-context H200 topology
cquil11 Jul 28, 2026
428e72d
fix(kimik3): stream H200 checkpoint loading
cquil11 Jul 28, 2026
2325df7
fix(kimik3): fit full context with pipeline parallelism
cquil11 Jul 28, 2026
e29e380
fix(kimik3): use supported model runner
cquil11 Jul 28, 2026
24fdf3f
fix(h200): preserve server logs on cancellation
cquil11 Jul 28, 2026
9baa292
fix(kimik3): preserve full context with DCP
cquil11 Jul 28, 2026
00acd46
fix(kimik3): fit H200 startup memory budget
cquil11 Jul 28, 2026
8e5f309
chore(h200): name the vLLM server log clearly
cquil11 Jul 28, 2026
8ddd1b9
test(kimik3): reproduce pipeline serving path
cquil11 Jul 28, 2026
a73f110
fix(kimik3): use two-node reference topologies
cquil11 Jul 28, 2026
8cd634a
fix(h200): reuse host git for agentic clients
cquil11 Jul 28, 2026
e1f7d83
test(kimik3): probe two-node DCP serving
cquil11 Jul 28, 2026
0335cd9
test(kimik3): probe two-node TEP serving
cquil11 Jul 28, 2026
08d7400
fix(kimik3): stream TEP and DEP weight loading
cquil11 Jul 28, 2026
ccb01fa
fix(h200): expose all local DP endpoints
cquil11 Jul 28, 2026
9609bca
test(kimik3): probe full-context TP16 serving
cquil11 Jul 28, 2026
e5cdcbb
fix(kimik3): leave room for distributed startup
cquil11 Jul 28, 2026
0fda2ca
fix(kimik3): stream all multi-node weight loads
cquil11 Jul 28, 2026
b92ce48
fix(h200): stop failed engines during readiness
cquil11 Jul 28, 2026
2b8c47f
test(kimik3): probe four-node DP16 serving
cquil11 Jul 28, 2026
18e2b3f
test(kimik3): run PP with the V1 model runner
cquil11 Jul 28, 2026
b7e58f3
fix(kimik3): allow distributed worker overhead
cquil11 Jul 28, 2026
b3b628d
perf(kimik3): use fast loading for PP
cquil11 Jul 28, 2026
f2d1243
fix(kimik3): use bf16 kv cache for PP
cquil11 Jul 28, 2026
83c9ca5
fix(kimik3): reserve PP runtime memory
cquil11 Jul 28, 2026
5fc99b0
perf(kimik3): add PP to EP strategies
cquil11 Jul 28, 2026
a65e0b9
fix(kimik3): reserve topology workspace
cquil11 Jul 28, 2026
f2090e7
fix(kimik3): reduce latency prefill chunk
cquil11 Jul 28, 2026
adc1109
fix(kimik3): align H200 overrides with official recipe
cquil11 Jul 28, 2026
d33f844
fix(kimik3): disable SM100-only tail fusion on H200
cquil11 Jul 28, 2026
a4c259b
fix(kimik3): use one shared API port per DP node
cquil11 Jul 28, 2026
deae74e
fix(kimik3): leave throughput prefill headroom
cquil11 Jul 28, 2026
d0eefab
perf(kimik3): restore Day 0 sweep ranges
cquil11 Jul 28, 2026
6e98eed
fix(kimik3): preserve throughput activation headroom
cquil11 Jul 28, 2026
7c2bcd4
fix(h200): guard cleanup before server startup
cquil11 Jul 28, 2026
f99af81
fix(h200): snapshot native server logs during runs
cquil11 Jul 28, 2026
724ad15
fix(kimik3): reduce throughput prefill workspace
cquil11 Jul 28, 2026
8abfa19
fix(kimik3): preserve throughput collective headroom
cquil11 Jul 28, 2026
2c2d6de
fix(kimik3): allow long throughput warmup drains
cquil11 Jul 28, 2026
572b85b
fix(kimik3): cap H200 throughput concurrency
cquil11 Jul 28, 2026
caa2e20
fix(kimik3): use KV-safe throughput concurrency
cquil11 Jul 28, 2026
3e27396
fix(kimik3): add throughput tensor parallel headroom
cquil11 Jul 28, 2026
2d0629d
refactor(kimik3): use srt-slurm direct vLLM
cquil11 Jul 28, 2026
8ee6ab3
fix(kimik3): disable SM100 tail fusion on H200
cquil11 Jul 28, 2026
7ccb00e
perf(kimik3): add high-concurrency KV offload
cquil11 Jul 28, 2026
ec22d4b
perf(kimik3): densify H200 concurrency sweep
cquil11 Jul 29, 2026
4c9dcdf
Update perf-changelog.yaml
cquil11 Jul 29, 2026
1737359
perf(kimik3): enable DSpark on H200
cquil11 Jul 29, 2026
5c03d8f
fix(kimik3): replace PP with pure H200 topologies
cquil11 Jul 29, 2026
735784f
Merge origin/main into H200 Kimi K3 branch
cquil11 Jul 29, 2026
631fa8a
perf(kimik3): use fit-safe H200 hybrid topologies
cquil11 Jul 29, 2026
d451287
perf(kimik3): remove duplicate H200 throughput arm
cquil11 Jul 29, 2026
9c8643c
perf(kimik3): enable Model Runner V2 on H200
cquil11 Jul 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
name: "kimik3-vllm-agg-h200-tp16dp2ep32-latency-agentic"

model:
path: "kimik3"
container: "vllm/vllm-openai:kimi-k3"
precision: "fp4"

identity:
model:
repo: "moonshotai/Kimi-K3"
revision: "9f62e4e9fffbd0a83ddd60e1c209d828994b3569"
container:
image: "vllm/vllm-openai:kimi-k3"
frameworks:
vllm: "0.1.dev19262+gb6bbf29dd.d20260727"

dynamo:
install: false

slurm:
time_limit: "8:00:00"

health_check:
max_attempts: 720
interval_seconds: 10

resources:
gpu_type: "h200"
gpus_per_node: 8
agg_nodes: 4
agg_workers: 1
gpus_per_agg: 32

frontend:
type: vllm
enable_multiple_frontends: false

backend:
type: vllm
connector: null
aggregated_environment:
GLOO_SOCKET_IFNAME: "eth0"
HF_HUB_CACHE: "/hf_hub_cache"
HUGGINGFACE_HUB_CACHE: "/hf_hub_cache"
NCCL_SOCKET_IFNAME: "eth0"
NCCL_CUMEM_ENABLE: "1"
PYTHONNOUSERSITE: "1"
TRANSFORMERS_CACHE: "/hf_hub_cache"
VLLM_ENGINE_READY_TIMEOUT_S: "7200"
VLLM_EXECUTE_MODEL_TIMEOUT_SECONDS: "1800"
VLLM_ENABLE_K3_LATENT_MOE_TAIL_FUSION: "1"
VLLM_USE_V2_MODEL_RUNNER: "1"
vllm_config:
aggregated:
served-model-name: "moonshotai/Kimi-K3"
tensor-parallel-size: 16
data-parallel-size: 2
enable-expert-parallel: true
trust-remote-code: true
load-format: fastsafetensors
moe-backend: marlin
attention-backend: FLASHMLA
gpu-memory-utilization: 0.95
max-num-seqs: 2
max-num-batched-tokens: 1024
speculative-config: '{"method":"dspark","model":"Inferact/Kimi-K3-DSpark","num_speculative_tokens":7,"attention_backend":"FLASHINFER_MLA","draft_sample_method":"probabilistic","rejection_sample_method":"block"}'
enable-prefix-caching: true
compilation-config: '{"cudagraph_capture_sizes":[3,6],"pass_config":{"fuse_allreduce_rms":false}}'
no-enable-flashinfer-autotune: true
disable-custom-all-reduce: true
enable-auto-tool-choice: true
tool-call-parser: kimi_k3
reasoning-parser: kimi_k3
language-model-only: true

srun_options:
container-remap-root: ""

benchmark:
type: custom
command: bash /infmax-workspace/benchmarks/multi_node/agentic_srt.sh
env:
INFMAX_CONTAINER_WORKSPACE: "/infmax-workspace"
RESULT_DIR: "/logs/agentic"
PORT: "8000"
IS_MULTINODE: "true"
AIPERF_DATASET_MMAP_CACHE_DIR: "/aiperf_mmap_cache"
HF_HUB_CACHE: "/hf_hub_cache"
WEKA_LOADER_OVERRIDE: "semianalysis_cc_traces_weka_062126"
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
name: "kimik3-vllm-agg-h200-tp8dp4ep32-balanced-agentic"

model:
path: "kimik3"
container: "vllm/vllm-openai:kimi-k3"
precision: "fp4"

identity:
model:
repo: "moonshotai/Kimi-K3"
revision: "9f62e4e9fffbd0a83ddd60e1c209d828994b3569"
container:
image: "vllm/vllm-openai:kimi-k3"
frameworks:
vllm: "0.1.dev19262+gb6bbf29dd.d20260727"

dynamo:
install: false

slurm:
time_limit: "8:00:00"

health_check:
max_attempts: 720
interval_seconds: 10

resources:
gpu_type: "h200"
gpus_per_node: 8
agg_nodes: 4
agg_workers: 1
gpus_per_agg: 32

frontend:
type: vllm
enable_multiple_frontends: false

backend:
type: vllm
connector: null
aggregated_environment:
GLOO_SOCKET_IFNAME: "eth0"
HF_HUB_CACHE: "/hf_hub_cache"
HUGGINGFACE_HUB_CACHE: "/hf_hub_cache"
NCCL_SOCKET_IFNAME: "eth0"
NCCL_CUMEM_ENABLE: "1"
PYTHONNOUSERSITE: "1"
TRANSFORMERS_CACHE: "/hf_hub_cache"
VLLM_ENGINE_READY_TIMEOUT_S: "7200"
VLLM_EXECUTE_MODEL_TIMEOUT_SECONDS: "1800"
VLLM_ENABLE_K3_LATENT_MOE_TAIL_FUSION: "1"
VLLM_USE_V2_MODEL_RUNNER: "1"
vllm_config:
aggregated:
served-model-name: "moonshotai/Kimi-K3"
tensor-parallel-size: 8
data-parallel-size: 4
enable-expert-parallel: true
trust-remote-code: true
load-format: fastsafetensors
moe-backend: marlin
attention-backend: FLASHMLA
gpu-memory-utilization: 0.95
max-num-seqs: 8
max-num-batched-tokens: 2048
speculative-config: '{"method":"dspark","model":"Inferact/Kimi-K3-DSpark","num_speculative_tokens":7,"attention_backend":"FLASHINFER_MLA","draft_sample_method":"probabilistic","rejection_sample_method":"block"}'
compilation-config: '{"cudagraph_capture_sizes":[3,6,9,12]}'
enable-prefix-caching: true
no-enable-flashinfer-autotune: true
disable-custom-all-reduce: true
enable-auto-tool-choice: true
tool-call-parser: kimi_k3
reasoning-parser: kimi_k3
language-model-only: true

srun_options:
container-remap-root: ""

benchmark:
type: custom
command: bash /infmax-workspace/benchmarks/multi_node/agentic_srt.sh
env:
INFMAX_CONTAINER_WORKSPACE: "/infmax-workspace"
RESULT_DIR: "/logs/agentic"
PORT: "8000"
IS_MULTINODE: "true"
AIPERF_DATASET_MMAP_CACHE_DIR: "/aiperf_mmap_cache"
HF_HUB_CACHE: "/hf_hub_cache"
WEKA_LOADER_OVERRIDE: "semianalysis_cc_traces_weka_062126"
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
name: "kimik3-vllm-agg-h200-tp8dp4ep32-vllm-simple-agentic"

model:
path: "kimik3"
container: "vllm/vllm-openai:kimi-k3"
precision: "fp4"

identity:
model:
repo: "moonshotai/Kimi-K3"
revision: "9f62e4e9fffbd0a83ddd60e1c209d828994b3569"
container:
image: "vllm/vllm-openai:kimi-k3"
frameworks:
vllm: "0.1.dev19262+gb6bbf29dd.d20260727"

dynamo:
install: false

slurm:
time_limit: "8:00:00"

health_check:
max_attempts: 720
interval_seconds: 10

resources:
gpu_type: "h200"
gpus_per_node: 8
agg_nodes: 4
agg_workers: 1
gpus_per_agg: 32

frontend:
type: vllm
enable_multiple_frontends: false

backend:
type: vllm
connector: null
aggregated_environment:
GLOO_SOCKET_IFNAME: "eth0"
HF_HUB_CACHE: "/hf_hub_cache"
HUGGINGFACE_HUB_CACHE: "/hf_hub_cache"
NCCL_SOCKET_IFNAME: "eth0"
NCCL_CUMEM_ENABLE: "1"
PYTHONHASHSEED: "42"
PYTHONNOUSERSITE: "1"
TRANSFORMERS_CACHE: "/hf_hub_cache"
VLLM_ENGINE_READY_TIMEOUT_S: "7200"
VLLM_EXECUTE_MODEL_TIMEOUT_SECONDS: "1800"
VLLM_ENABLE_K3_LATENT_MOE_TAIL_FUSION: "1"
VLLM_USE_V2_MODEL_RUNNER: "1"
vllm_config:
aggregated:
served-model-name: "moonshotai/Kimi-K3"
tensor-parallel-size: 8
data-parallel-size: 4
enable-expert-parallel: true
trust-remote-code: true
load-format: fastsafetensors
moe-backend: marlin
attention-backend: FLASHMLA
gpu-memory-utilization: 0.95
max-num-seqs: 16
max-num-batched-tokens: 4096
speculative-config: '{"method":"dspark","model":"Inferact/Kimi-K3-DSpark","num_speculative_tokens":7,"attention_backend":"FLASHINFER_MLA","draft_sample_method":"probabilistic","rejection_sample_method":"block"}'
compilation-config: '{"cudagraph_capture_sizes":[3,6,9,12,15,18,21,24,27,30,33]}'
enable-prefix-caching: true
kv-transfer-config: '{"kv_connector":"SimpleCPUOffloadConnector","kv_role":"kv_both","kv_connector_extra_config":{"cpu_bytes_to_use_per_rank":154250000000,"lazy_offload":false}}'
no-enable-flashinfer-autotune: true
disable-custom-all-reduce: true
enable-auto-tool-choice: true
tool-call-parser: kimi_k3
reasoning-parser: kimi_k3
language-model-only: true

srun_options:
container-remap-root: ""

benchmark:
type: custom
command: bash /infmax-workspace/benchmarks/multi_node/agentic_srt.sh
env:
INFMAX_CONTAINER_WORKSPACE: "/infmax-workspace"
RESULT_DIR: "/logs/agentic"
PORT: "8000"
IS_MULTINODE: "true"
AIPERF_DATASET_MMAP_CACHE_DIR: "/aiperf_mmap_cache"
HF_HUB_CACHE: "/hf_hub_cache"
WEKA_LOADER_OVERRIDE: "semianalysis_cc_traces_weka_062126"
74 changes: 74 additions & 0 deletions configs/nvidia-master.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1467,6 +1467,80 @@ kimik2.5-int4-h200-vllm-agentic:
- { tp: 8, kv-offloading: none, conc-list: [1, 2, 3, 4, 5, 6, 7] }
- { tp: 8, kv-offloading: dram, kv-offload-backend: { name: vllm-simple }, conc-list: [6, 7, 8, 9, 10, 11, 12, 13, 14] }

# Kimi K3 is a 2.8T MXFP4 MoE served on H200 nodes.
# These are the three aggregated strategy classes from the official H200
# recipe (https://recipes.vllm.ai/moonshotai/Kimi-K3?hardware=h200):
# Wider TP is latency-oriented, while progressively wider DP is balanced or
# throughput-oriented. EP32 keeps the model shards within HBM and preserves
# the native 1M context on four H200 nodes. All profiles use the official
# Kimi K3 DSpark K7 probabilistic/block recipe.
# The existing `mtp` matrix label covers speculative-decoding methods; the
# checked-in recipes select DSpark explicitly. The H200 runner supplies
# cluster paths while srt-slurm owns allocation, direct vLLM startup,
# readiness, and log capture. P/D disaggregation is intentionally deferred.
kimik3-fp4-h200-vllm-agentic:
image: vllm/vllm-openai:kimi-k3
model: moonshotai/Kimi-K3
model-prefix: kimik3
runner: cluster:h200-dgxc
precision: fp4
framework: vllm
multinode: true
disagg: false
scenarios:
agentic-coding:
- dram-utilization: 0.80
search-space:
# Latency-oriented: TP16 x DP2 with EP32 across four H200 nodes.
- spec-decoding: mtp
kv-offloading: none
conc-list: [1, 2, 3, 4, 5, 6, 7, 8, 10, 12]
prefill:
num-worker: 2
tp: 16
ep: 32
dp-attn: true
additional-settings:
- "CONFIG_FILE=recipes/vllm/kimi-k3/agentic/agg-h200-tp16dp2ep32-latency-agentic.yaml"
decode:
num-worker: 0
tp: 16
ep: 32
dp-attn: true
# Balanced: TP8 x DP4 with EP32 across four H200 nodes.
- spec-decoding: mtp
kv-offloading: none
conc-list: [1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16]
prefill:
num-worker: 4
tp: 8
ep: 32
dp-attn: true
additional-settings:
- "CONFIG_FILE=recipes/vllm/kimi-k3/agentic/agg-h200-tp8dp4ep32-balanced-agentic.yaml"
decode:
num-worker: 0
tp: 8
ep: 32
dp-attn: true
# Throughput-oriented hybrid TP/DEP/EP with vLLM's host-DRAM KV tier.
- spec-decoding: mtp
kv-offloading: dram
kv-offload-backend: { name: vllm-simple }
conc-list: [8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 30, 32]
prefill:
num-worker: 4
tp: 8
ep: 32
dp-attn: true
additional-settings:
- "CONFIG_FILE=recipes/vllm/kimi-k3/agentic/agg-h200-tp8dp4ep32-vllm-simple-agentic.yaml"
decode:
num-worker: 0
tp: 8
ep: 32
dp-attn: true

# NOTE: At the time of submission, https://docs.vllm.ai/projects/recipes/en/latest/moonshotai/Kimi-K2.5.html
# does not have a B300-specific recipe, so this config reuses the existing
# Kimi-K2.5 FP4 B200 vLLM recipe as-is until B300-specific tuning is available.
Expand Down
6 changes: 6 additions & 0 deletions perf-changelog.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5230,3 +5230,9 @@
- "Bump image to vllm/vllm-openai:nightly-4080263bb2c5d10deac17aaeb88e0823bc35bca9 and dynamo to 1.3.0.dev20260710; drop the minimax-m3-gb300-vllm-fixes.sh setup patch (shipped in the nightly image)"
- "Collapse the 2xDEP8 decode into a single DEP16 worker (decode_workers 2->1, gpus_per_decode 8->16, data-parallel-size 8->16); recipe renamed 3p2d-dep2-dep8 -> 3p1d-dep2-dep16 (conc 512). The remaining decodes are 1xDEP8 or TEP and are unchanged."
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2340

- config-keys:
- kimik3-fp4-h200-vllm-agentic
description:
- "Add Day-0 Kimi K3 FP4 AgentX H200 performance recipes from the official vLLM guidance, using fit-safe TP/DP/EP topologies with optional SimpleCPU KV offload"
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2353
Loading