Skip to content

Commit e97a67f

Browse files
authored
[AMD] kimik2.5-fp4-mi355x-vllm-disagg: split P/D by concurrency (1D low, 2D high) (#2301)
1 parent 1015a20 commit e97a67f

5 files changed

Lines changed: 41 additions & 9 deletions

File tree

benchmarks/multi_node/amd_utils/job.slurm

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -337,7 +337,7 @@ export DOCKER_CONT_NAME="container_${ENGINE}_${SANITIZED_USER}_${MODEL_NAME}_${S
337337
# vLLM external router container.
338338
# NOTE: vllm/vllm-router only retains ~16 recent nightlies on Docker Hub; older
339339
# dated tags are garbage-collected (manifest unknown)
340-
VLLM_ROUTER_IMAGE="${VLLM_ROUTER_IMAGE:-vllm/vllm-router:nightly-20260629-e667ebb}"
340+
VLLM_ROUTER_IMAGE="${VLLM_ROUTER_IMAGE:-vllm/vllm-router:nightly-20260716-1fbcde7}"
341341
ROUTER_CONT_NAME="router_vllm_${SANITIZED_USER}_${SLURM_JOB_ID}"
342342
# Separate agentic benchmark-client container (see CLIENT_IMAGE handling below).
343343
CLIENT_CONT_NAME="container_${ENGINE}_${SANITIZED_USER}_client_${SLURM_JOB_ID}"

benchmarks/multi_node/amd_utils/models_vllm.yaml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ amd-Llama-3.3-70B-Instruct-FP8-KV:
2525
env: "VLLM_USE_V1=1 VLLM_V1_USE_PREFILL_DECODE_ATTENTION=1 AMDGCN_USE_BUFFER_OPS=1 VLLM_ROCM_USE_AITER=1 VLLM_ROCM_USE_AITER_RMSNORM=1 VLLM_USE_AITER_TRITON_ROPE=1 TRITON_HIP_ASYNC_COPY_BYPASS_PERMUTE=1 TRITON_HIP_USE_ASYNC_COPY=1 TRITON_HIP_USE_BLOCK_PINGPONG=1 TRITON_HIP_ASYNC_FAST_SWIZZLE=1"
2626

2727
Kimi-K2.5-MXFP4:
28-
prefill_flags: "--tensor-parallel-size 8 --compilation-config '{\"cudagraph_mode\":\"PIECEWISE\"}' --no-enable-prefix-caching --block-size 1 --gpu-memory-utilization 0.90 --mm-encoder-tp-mode data"
29-
decode_flags: "--tensor-parallel-size 8 --enable-expert-parallel --all2all-backend mori_low_latency --compilation-config '{\"cudagraph_mode\":\"PIECEWISE\"}' --no-enable-prefix-caching --block-size 1 --gpu-memory-utilization 0.90 --mm-encoder-tp-mode data"
30-
env: "VLLM_USE_V1=1 VLLM_ROCM_USE_AITER=1 VLLM_ROCM_USE_AITER_PAGED_ATTN=0 VLLM_ROCM_USE_AITER_RMSNORM=1 VLLM_USE_AITER_TRITON_SILU_MUL=0 VLLM_ENGINE_READY_TIMEOUT_S=3600"
28+
prefill_flags: "--tensor-parallel-size 8 --no-enable-prefix-caching --block-size 1 --gpu-memory-utilization 0.90 --max-model-len 32768 --mm-encoder-tp-mode data --kv-cache-dtype fp8 --max-num-seqs 256 --max-num-batched-tokens 32768"
29+
decode_flags: "--tensor-parallel-size 8 --all2all-backend mori_low_latency --no-enable-prefix-caching --block-size 1 --gpu-memory-utilization 0.90 --max-model-len 32768 --mm-encoder-tp-mode data --kv-cache-dtype fp8 --max-num-seqs 256 --max-num-batched-tokens 32768"
30+
env: "VLLM_USE_V1=1 VLLM_ROCM_USE_AITER=1 VLLM_ROCM_USE_AITER_RMSNORM=1 VLLM_ROCM_QUICK_REDUCE_QUANTIZATION=INT4 HSA_NO_SCRATCH_RECLAIM=1 VLLM_ENGINE_READY_TIMEOUT_S=3600"
3131
hf_dir: "models--amd--Kimi-K2.5-MXFP4"
3232

3333
MiniMax-M2.5:

benchmarks/multi_node/amd_utils/submit.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ fi
166166
# Optional: exclude specific nodes (e.g. nodes with broken Docker sockets).
167167
# Set SLURM_EXCLUDE_NODES env var to a comma-separated list of hostnames.
168168
EXCLUDE_OPT=()
169-
SLURM_EXCLUDE_NODES="${SLURM_EXCLUDE_NODES:-mia1-p01-g11,mia1-p01-g12,mia1-p01-g15}"
169+
SLURM_EXCLUDE_NODES="${SLURM_EXCLUDE_NODES:-mia1-p01-g09,mia1-p01-g11,mia1-p01-g12,mia1-p01-g14,mia1-p01-g15}"
170170
if [[ -n "${SLURM_EXCLUDE_NODES:-}" ]]; then
171171
EXCLUDE_OPT=(--exclude "$SLURM_EXCLUDE_NODES")
172172
fi

configs/amd-master.yaml

Lines changed: 25 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -798,7 +798,7 @@ dsr1-fp8-mi355x-sglang-disagg-mtp:
798798
- "DECODE_MTP_SIZE=2"
799799

800800
kimik2.5-fp4-mi355x-vllm-disagg:
801-
image: vllm/vllm-openai-rocm:v0.24.0
801+
image: vllm/vllm-openai-rocm:nightly-2afa3f7e950264bb179d030c23a1ed1f46558fd9
802802
model: amd/Kimi-K2.5-MXFP4
803803
model-prefix: kimik2.5
804804
runner: mi355x-disagg
@@ -810,22 +810,43 @@ kimik2.5-fp4-mi355x-vllm-disagg:
810810
disagg: true
811811
scenarios:
812812
fixed-seq-len:
813+
# All workers TP4 (real-weight sweep: TP8 decode is no better than TP4).
814+
# Split across P/D topologies: 1D is stable at low conc; the high-conc tail
815+
# runs on 2D so decode load is spread across two engines.
813816
- isl: 8192
814817
osl: 1024
815818
search-space:
819+
# 1P(TP4) 1D(TP4) = 2 nodes. Low concurrency only.
820+
- spec-decoding: "none"
821+
conc-list: [ 1, 2, 4 ]
822+
prefill:
823+
num-worker: 1
824+
tp: 4
825+
ep: 1
826+
dp-attn: false
827+
additional-settings:
828+
- "PREFILL_NODES=1"
829+
decode:
830+
num-worker: 1
831+
tp: 4
832+
ep: 1
833+
dp-attn: false
834+
additional-settings:
835+
- "DECODE_NODES=1"
836+
# 1P(TP4) 2D(TP4) = 3 nodes. High concurrency (decode KV/load spread over 2D).
816837
- spec-decoding: "none"
817838
conc-list: [ 8, 16, 32, 64, 128, 256, 512 ]
818839
prefill:
819840
num-worker: 1
820-
tp: 8
841+
tp: 4
821842
ep: 1
822843
dp-attn: false
823844
additional-settings:
824845
- "PREFILL_NODES=1"
825846
decode:
826847
num-worker: 2
827-
tp: 8
828-
ep: 8
848+
tp: 4
849+
ep: 1
829850
dp-attn: false
830851
additional-settings:
831852
- "DECODE_NODES=2"

perf-changelog.yaml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5049,3 +5049,14 @@
50495049
- "Topologies: 1p4d-dep4-tep8 (conc 4/24), 1p5d-dep4-tep4 (conc 5/30/60/115/195), 1p1d-dep4-dep8 (conc 308), 2p1d-dep4-dep8 (conc 615), 3p1d-dep4-dep8 (conc 1127), 4p1d-dep4-dep8 (conc 2151)"
50505050
- "Runner updated to clone srt-slurm at sa-submission-q2-2026 and copy local recipes into recipes/trtllm/kimi-k25-nvfp4/b200-fp4/"
50515051
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2249
5052+
5053+
- config-keys:
5054+
- kimik2.5-fp4-mi355x-vllm-disagg
5055+
description:
5056+
- "Bump image to vllm/vllm-openai-rocm:nightly-2afa3f7e950264bb179d030c23a1ed1f46558fd9"
5057+
- "All-TP4 prefill/decode (drop TP8): a real-weight sweep showed TP8 decode is no better than TP4 on tok/s/GPU; expert parallelism off (ep:1, single-node TP8 sweep showed EP -14% to -27% slower than dense)"
5058+
- "Split the 8k/1k P/D topology by concurrency: low conc (1,2,4) on 1P(TP4)/1D(TP4); high conc (8,16,32,64,128,256,512) on 1P(TP4)/2D(TP4) so decode load/KV is spread across two decode engines (the single-decode engine is unstable in the high-conc tail)"
5059+
- "Sync per-worker vLLM serve flags/env with the single-node recipe: --kv-cache-dtype fp8, --max-model-len 32768, --max-num-seqs 256, --max-num-batched-tokens 32768; VLLM_ROCM_QUICK_REDUCE_QUANTIZATION=INT4, HSA_NO_SCRATCH_RECLAIM=1, AITER defaults; drop the --compilation-config PIECEWISE pin (use vLLM default FULL_AND_PIECEWISE)"
5060+
- "Re-pin VLLM_ROUTER_IMAGE to vllm/vllm-router:nightly-20260716-1fbcde7 (previous nightly-20260629-e667ebb was garbage-collected from Docker Hub)"
5061+
- "Exclude known-bad nodes mia1-p01-g09,g14 from the disagg node pool"
5062+
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2301

0 commit comments

Comments
 (0)