From 7c5e43de1585677c43cf40551f514641198ef9b5 Mon Sep 17 00:00:00 2001 From: Yifan Qiao Date: Tue, 14 Jul 2026 05:37:19 +0000 Subject: [PATCH 01/10] dsv4-b200-agg: DEP8 + TP8; dsv4-b300-agg: DEP4 + TP4 --- .../single_node/agentic/dsv4_fp4_b200_vllm.sh | 76 ++++--- .../single_node/agentic/dsv4_fp4_b300_vllm.sh | 194 ++++++++++-------- configs/nvidia-master.yaml | 34 ++- perf-changelog.yaml | 10 + 4 files changed, 181 insertions(+), 133 deletions(-) diff --git a/benchmarks/single_node/agentic/dsv4_fp4_b200_vllm.sh b/benchmarks/single_node/agentic/dsv4_fp4_b200_vllm.sh index 35cc55c04..5a544ccbf 100755 --- a/benchmarks/single_node/agentic/dsv4_fp4_b200_vllm.sh +++ b/benchmarks/single_node/agentic/dsv4_fp4_b200_vllm.sh @@ -14,14 +14,14 @@ set -x # Highest aggregate throughput at large CONC. # # Image is configured in nvidia-master.yaml. block_size=256, -# kv-cache-dtype=fp8, FP4 indexer cache enabled, FULL_AND_PIECEWISE cudagraph -# capture with custom_ops=all (per the vLLM blog recipe at -# https://vllm.ai/blog/deepseek-v4). +# kv-cache-dtype=fp8, FLASHINFER_MLA_SPARSE_DSV4 attention with the FP4 indexer +# cache, FULL_DECODE_ONLY cudagraph capture, and (in EP tiers) mega-MoE backend. # # Required env vars: # MODEL, TP, CONC, KV_OFFLOADING, TOTAL_CPU_DRAM_GB, RESULT_DIR # -# KV_OFFLOADING=dram requires KV_OFFLOAD_BACKEND=mooncake. +# Pure TP is GPU-resident (KV_OFFLOADING=none). DEP tiers offload KV to host +# DRAM: KV_OFFLOADING=dram requires KV_OFFLOAD_BACKEND=vllm-simple or mooncake. source "$(dirname "$0")/../../benchmark_lib.sh" @@ -65,12 +65,6 @@ nvidia-smi resolve_trace_source install_agentic_deps -# vLLM v0.22.1 can ship CUTLASS DSL 4.5.2 with stale native MLIR bindings, -# which fails DSV4 indexer compilation with mlir_global_dtors(..., data). -# Reinstall the matching native wheel until NVIDIA/cutlass#3259 is resolved. -agentic_pip_install --quiet --force-reinstall --no-deps \ - 'nvidia-cutlass-dsl-libs-cu13==4.5.2' - # vllm-project/router expands the one HTTP backend into one logical worker per # DP rank and sends X-data-parallel-rank on forwarded requests. aiperf's # X-Correlation-ID is stable for every turn of a conversation; alias it to the @@ -94,6 +88,10 @@ export VLLM_ENGINE_READY_TIMEOUT_S=3600 # vllm-project/vllm#44774 applies the same reachability policy to Mooncake's # store mask. 32k matches the trace-replay tuning validated for this workload. export VLLM_PREFIX_CACHE_RETENTION_INTERVAL=32768 +export VLLM_USE_V2_MODEL_RUNNER=1 +export VLLM_USE_RUST_FRONTEND=1 +export VLLM_DSV4_MEGA_FP8_COMBINE=1 +export VLLM_RPC_TIMEOUT=600000 # ---- Server config ---------------------------------------------------------- SERVER_LOG="$RESULT_DIR/server.log" @@ -106,8 +104,22 @@ ROUTER_PID="" MOONCAKE_MASTER_PID="" OFFLOAD_ARGS=() - -if require_agentic_kv_offload_backend mooncake; then +case "${KV_OFFLOAD_BACKEND:-}" in + "") + require_agentic_kv_offload_none + ;; + vllm-simple) + require_agentic_kv_offload_backend vllm-simple + CPU_BYTES_PER_RANK=$(( TOTAL_CPU_DRAM_GB * 1000 * 1000 * 1000 / GPU_COUNT )) + # Identical prefixes must hash to identical block keys across DP ranks. + export PYTHONHASHSEED=42 + OFFLOAD_ARGS=( + --kv-transfer-config + "{\"kv_connector\":\"SimpleCPUOffloadConnector\",\"kv_role\":\"kv_both\",\"kv_connector_extra_config\":{\"cpu_bytes_to_use_per_rank\":${CPU_BYTES_PER_RANK},\"lazy_offload\":false,\"enable_cross_layers_blocks\":\"true\"}}" + ) + ;; + mooncake) + require_agentic_kv_offload_backend mooncake # Embedded mode contributes one segment per GPU rank to a shared # distributed store, so pre-divide the aggregate host-memory budget. PER_RANK_GB=$((TOTAL_CPU_DRAM_GB / GPU_COUNT)) @@ -127,16 +139,14 @@ if require_agentic_kv_offload_backend mooncake; then "global_segment_size": "${PER_RANK_GB}GB", "local_buffer_size": "4GB", "protocol": "rdma", - "device_name": "mlx5_0", + "device_name": "", "enable_offload": false } EOF export MOONCAKE_CONFIG_PATH + export MC_ENABLE_DEST_DEVICE_AFFINITY=1 # Identical prefixes must hash to identical store keys across DP ranks. export PYTHONHASHSEED=0 - # B200 GPU memory registration works through DMA-BUF, but the compute - # nodes do not expose nvidia_peermem. Force Mooncake's DMA-BUF - # GPUDirect RDMA path instead of its legacy ibv_reg_mr path. export WITH_NVIDIA_PEERMEM=0 export MC_SLICE_SIZE=1048576 export MC_WORKERS_PER_CTX=4 @@ -167,7 +177,12 @@ EOF --kv-transfer-config '{"kv_connector":"MooncakeStoreConnector","kv_role":"kv_both","kv_connector_extra_config":{"load_async":true}}' ) -fi + ;; + *) + echo "Error: unsupported B200 KV_OFFLOAD_BACKEND='${KV_OFFLOAD_BACKEND:-}'" >&2 + exit 1 + ;; +esac PARALLEL_ARGS=(--tensor-parallel-size "$TP" --data-parallel-size 1) if [ "$DP_ATTENTION" = "true" ]; then @@ -175,8 +190,14 @@ if [ "$DP_ATTENTION" = "true" ]; then fi EP_ARGS=() +FAST_MOE_ARGS=() if [ "$EP_SIZE" -gt 1 ]; then EP_ARGS=(--enable-expert-parallel) + FAST_MOE_ARGS=( + --moe-backend deep_gemm_amxf4_mega_moe + --enable-ep-weight-filter + --prefill-schedule-interval 16 + ) fi # AgentX concurrency counts live session trees, not individual requests. @@ -197,18 +218,23 @@ VLLM_CMD=( --trust-remote-code --kv-cache-dtype fp8 --block-size 256 - "${PARALLEL_ARGS[@]}" - "${VLLM_CP_ARGS[@]}" - "${EP_ARGS[@]}" - --compilation-config '{"cudagraph_mode":"FULL_AND_PIECEWISE","custom_ops":["all"]}' - --attention_config.use_fp4_indexer_cache=True + --max-model-len 1048576 + --gpu-memory-utilization 0.92 + --numa-bind + --enable-cumem-allocator + --no-enable-flashinfer-autotune --tokenizer-mode deepseek_v4 - --tool-call-parser deepseek_v4 - --enable-auto-tool-choice --reasoning-parser deepseek_v4 - --enable-prefix-caching + --attention-config '{"backend":"FLASHINFER_MLA_SPARSE_DSV4","use_prefill_query_quantization":true,"use_fp4_indexer_cache":true}' --no-disable-hybrid-kv-cache-manager + --disable-uvicorn-access-log + --compilation-config '{"cudagraph_mode":"FULL_DECODE_ONLY","mode":0}' --max-num-seqs "$MAX_NUM_SEQS" + --max-cudagraph-capture-size "$MAX_NUM_SEQS" + "${PARALLEL_ARGS[@]}" + "${VLLM_CP_ARGS[@]}" + "${EP_ARGS[@]}" + "${FAST_MOE_ARGS[@]}" "${OFFLOAD_ARGS[@]}" ) printf '%q ' "${VLLM_CMD[@]}" | tee "$RESULT_DIR/vllm_command.txt" diff --git a/benchmarks/single_node/agentic/dsv4_fp4_b300_vllm.sh b/benchmarks/single_node/agentic/dsv4_fp4_b300_vllm.sh index 3a5be7b57..a08bf3b00 100755 --- a/benchmarks/single_node/agentic/dsv4_fp4_b300_vllm.sh +++ b/benchmarks/single_node/agentic/dsv4_fp4_b300_vllm.sh @@ -3,58 +3,44 @@ set -euo pipefail set -x # Agentic trace replay benchmark for DeepSeek-V4-Pro FP4 on B300 using vLLM. -# Mirrors the fixed-seq-len parallelism options (pure TP and DEP) so the -# agentic sweep can probe both interactivity and throughput regimes: -# pure TP (DP_ATTENTION=false, EP_SIZE=1): attention TP-sharded across -# all $TP GPUs in a single engine. Lower TPOT, lower batch. -# TP+EP (DP_ATTENTION=false, EP_SIZE>1): attention TP-sharded, MoE -# experts EP-sharded within the TP group. -# DEP (DP_ATTENTION=true, EP_SIZE>1): per-DP-rank attention with -# experts EP-sharded across DP ranks (per the vLLM blog recipe). -# Highest aggregate throughput at large CONC. +# v4pro-b300.yaml TP4 and DEP4 recipe. SimpleCPUOffload / MooncakeStore # -# Image is vllm/vllm-openai:v0.20.0-cu130. block_size=256, kv-cache-dtype=fp8, -# FP4 indexer cache enabled, FULL_AND_PIECEWISE cudagraph capture with -# custom_ops=all (per the vLLM blog recipe at https://vllm.ai/blog/deepseek-v4). +# Image is configured in nvidia-master.yaml. The recipe uses FP8 KV cache, +# sparse DeepSeek-V4 FlashInfer attention with an FP4 indexer cache, mega-MoE, +# and FULL_DECODE_ONLY CUDA graphs with every batch size captured explicitly. # # Required env vars: # MODEL, TP, CONC, KV_OFFLOADING, TOTAL_CPU_DRAM_GB, RESULT_DIR # -# KV_OFFLOADING=dram requires KV_OFFLOAD_BACKEND=mooncake. +# KV_OFFLOADING=none is used by TP4. DEP4 uses KV_OFFLOADING=dram with +# KV_OFFLOAD_BACKEND=vllm-simple or mooncake. source "$(dirname "$0")/../../benchmark_lib.sh" check_env_vars MODEL TP CONC KV_OFFLOADING TOTAL_CPU_DRAM_GB RESULT_DIR DURATION EP_SIZE DP_ATTENTION -DCP_SIZE="${DCP_SIZE:-1}" -PCP_SIZE="${PCP_SIZE:-1}" -VLLM_CP_ARGS=() -if [ "$DCP_SIZE" -gt 1 ]; then - VLLM_CP_ARGS+=(--decode-context-parallel-size "$DCP_SIZE") -fi -if [ "$PCP_SIZE" -gt 1 ]; then - VLLM_CP_ARGS+=(--prefill-context-parallel-size "$PCP_SIZE") -fi - -GPU_COUNT="${GPU_COUNT:-$((TP * PCP_SIZE))}" +GPU_COUNT="${GPU_COUNT:-$TP}" if [[ ! "$GPU_COUNT" =~ ^[1-9][0-9]*$ ]]; then echo "Error: GPU_COUNT must be a positive integer, got '$GPU_COUNT'" >&2 exit 1 fi export GPU_COUNT -if declare -p SLURM_JOB_ID >/dev/null 2>&1 && [ -n "$SLURM_JOB_ID" ]; then - SLURM_NODE=unknown - if declare -p SLURMD_NODENAME >/dev/null 2>&1 && [ -n "$SLURMD_NODENAME" ]; then - SLURM_NODE="$SLURMD_NODENAME" - fi - echo "JOB $SLURM_JOB_ID running on $SLURM_NODE" +# Under DP-attention the DP world size equals TP, and the DEP recipe sizes +# per-rank batch as MAX_NUM_SEQS = 2*CONC/TP, which must be an integer. +if [ "$DP_ATTENTION" = "true" ] && [ $((2 * CONC % TP)) -ne 0 ]; then + echo "Error: DEP requires 2*CONC divisible by TP, got CONC='$CONC' and TP='$TP'" >&2 + exit 1 +fi + +if [[ -n "${SLURM_JOB_ID:-}" ]]; then + echo "JOB $SLURM_JOB_ID running on ${SLURMD_NODENAME:-unknown}" fi # `hf download` creates the target dir if missing and is itself idempotent. -# When MODEL_PATH is unset (stand-alone runs), fall back to the HF_HUB_CACHE +# When MODEL_PATH is unset (stand-alone runs), fall back to the HF_HUB_CACHE. # Either way, MODEL_PATH is what the server is launched with. -if declare -p MODEL_PATH >/dev/null 2>&1 && [ -n "$MODEL_PATH" ]; then +if [[ -n "${MODEL_PATH:-}" ]]; then if [[ ! -d "$MODEL_PATH" || -z "$(ls -A "$MODEL_PATH" 2>/dev/null)" ]]; then hf download "$MODEL" --local-dir "$MODEL_PATH" fi @@ -68,17 +54,9 @@ nvidia-smi resolve_trace_source install_agentic_deps -# vLLM v0.22.1 can ship CUTLASS DSL 4.5.2 with stale native MLIR bindings, -# which fails DSV4 indexer compilation with mlir_global_dtors(..., data). -# Reinstall the matching native wheel until NVIDIA/cutlass#3259 is resolved. -agentic_pip_install --quiet --force-reinstall --no-deps \ - 'nvidia-cutlass-dsl-libs-cu13==4.5.2' - # vllm-project/router expands the one HTTP backend into one logical worker per -# DP rank and sends X-data-parallel-rank on forwarded requests. aiperf's -# X-Correlation-ID is stable for every turn of a conversation; alias it to the -# router's preferred X-Session-ID header. This also keeps affinity correct when -# testing older wheels that prioritize per-request X-Request-ID. +# DP rank. Bind every turn of a conversation to the same rank by mapping +# AIPerf's stable correlation ID to the router's X-Session-ID header. USE_VLLM_ROUTER=false VLLM_BACKEND_PORT="$PORT" if [ "$DP_ATTENTION" = "true" ]; then @@ -91,13 +69,14 @@ if [ "$DP_ATTENTION" = "true" ]; then agentic_pip_install --quiet "vllm-router==$VLLM_ROUTER_VERSION" fi -# DeepSeek-V4-Pro weights are large; engine startup can exceed default 600s. +# Match the environment used by v4pro-b300.yaml. +export PYTORCH_ALLOC_CONF=expandable_segments:True +export VLLM_USE_V2_MODEL_RUNNER=1 export VLLM_ENGINE_READY_TIMEOUT_S=3600 - -# vllm-project/vllm#43447 keeps local SWA prefix-cache tails sparsely, while -# vllm-project/vllm#44774 applies the same reachability policy to Mooncake's -# store mask. 32k matches the trace-replay tuning validated for this workload. export VLLM_PREFIX_CACHE_RETENTION_INTERVAL=32768 +export VLLM_DSV4_MEGA_FP8_COMBINE=1 +export NCCL_NVLS_ENABLE=1 +export VLLM_USE_RUST_FRONTEND=1 # ---- Server config ---------------------------------------------------------- SERVER_LOG="$RESULT_DIR/server.log" @@ -109,13 +88,27 @@ SERVER_PID="" ROUTER_PID="" MOONCAKE_MASTER_PID="" +# The generated TOTAL_CPU_DRAM_GB budget is proportional to allocated GPUs. +# On cluster:b300-nv, dram-utilization=0.80 and DEP4 resolve to roughly the +# source recipe's 280 GiB per DP rank. TP4 remains GPU-resident. OFFLOAD_ARGS=() -if require_agentic_kv_offload_backend mooncake; then - # Mooncake embedded mode contributes one global segment per GPU rank to - # a shared distributed store. Pre-divide the aggregate host budget - # across those rank-contributed segments. +case "${KV_OFFLOAD_BACKEND:-}" in + "") + require_agentic_kv_offload_none + ;; + vllm-simple) + require_agentic_kv_offload_backend vllm-simple + CPU_BYTES_PER_RANK=$(( TOTAL_CPU_DRAM_GB * 1000 * 1000 * 1000 / GPU_COUNT )) + # Identical prefixes must hash to identical block keys across DP ranks. + export PYTHONHASHSEED=42 + OFFLOAD_CONFIG="{\"kv_connector\":\"SimpleCPUOffloadConnector\",\"kv_role\":\"kv_both\",\"kv_connector_extra_config\":{\"cpu_bytes_to_use\":${CPU_BYTES_PER_RANK},\"enable_cross_layers_blocks\":\"true\"}}" + OFFLOAD_ARGS=(--kv-transfer-config "$OFFLOAD_CONFIG") + ;; + mooncake) + require_agentic_kv_offload_backend mooncake + # Embedded mode contributes one global segment per DP rank to the + # shared store, so divide the aggregate host budget across ranks. PER_RANK_GB=$((TOTAL_CPU_DRAM_GB / GPU_COUNT)) - MOONCAKE_VERSION=0.3.11.post1 agentic_pip_install --quiet --no-cache-dir --no-deps \ --force-reinstall "mooncake-transfer-engine-cuda13==$MOONCAKE_VERSION" @@ -139,9 +132,7 @@ EOF export MC_ENABLE_DEST_DEVICE_AFFINITY=1 # Identical prefixes must hash to identical store keys across DP ranks. export PYTHONHASHSEED=0 - # Large agentic KV writes can exceed Mooncake Store's fixed 60-second - # transfer deadline at the default 64 KiB RDMA slice size. Reduce - # per-transfer bookkeeping and give the shared RNIC more workers. + export WITH_NVIDIA_PEERMEM=0 export MC_SLICE_SIZE=1048576 export MC_WORKERS_PER_CTX=4 @@ -165,54 +156,83 @@ EOF fi unset VLLM_USE_SIMPLE_KV_OFFLOAD - OFFLOAD_ARGS=( - --kv-transfer-config - '{"kv_connector":"MooncakeStoreConnector","kv_role":"kv_both","kv_connector_extra_config":{"load_async":true}}' - ) -fi + OFFLOAD_CONFIG='{"kv_connector":"MooncakeStoreConnector","kv_role":"kv_both","kv_connector_extra_config":{"load_async":true}}' + OFFLOAD_ARGS=(--kv-transfer-config "$OFFLOAD_CONFIG") + ;; + *) + echo "Error: unsupported B300 KV_OFFLOAD_BACKEND='${KV_OFFLOAD_BACKEND:-}'" >&2 + exit 1 + ;; +esac PARALLEL_ARGS=(--tensor-parallel-size "$TP" --data-parallel-size 1) if [ "$DP_ATTENTION" = "true" ]; then PARALLEL_ARGS=(--tensor-parallel-size 1 --data-parallel-size "$TP") fi -EP_ARGS=() +MODE_ARGS=() if [ "$EP_SIZE" -gt 1 ]; then - EP_ARGS=(--enable-expert-parallel) + MODE_ARGS+=( + --enable-expert-parallel + --enable-ep-weight-filter + --moe-backend deep_gemm_amxf4_mega_moe + ) +fi +if [ "$DP_ATTENTION" = "true" ]; then + MODE_ARGS+=( + --prefill-schedule-interval 8 + --max-num-batched-tokens 8192 + ) fi -# AgentX concurrency counts live session trees, not individual requests. -# Subagent fan-out can push instantaneous request concurrency above CONC, so -# leave 2x headroom rather than clipping those bursts at the scheduler. -MAX_NUM_SEQS=$((2 * CONC)) -if [ "$MAX_NUM_SEQS" -eq 128 ]; then - MAX_NUM_SEQS=136 +if [ "$DP_ATTENTION" = "true" ]; then + # The DEP source recipe enforces 2*CONC = DP_WORLD_SIZE*MAX_NUM_SEQS. + MAX_NUM_SEQS=$((2 * CONC / TP)) +else + # Preserve the previous TP4 scheduler headroom for agentic fan-out. + MAX_NUM_SEQS=$((2 * CONC)) fi +CUDA_GRAPH_CAPTURE_SIZES="" +for ((capture_size = 1; capture_size <= MAX_NUM_SEQS; capture_size++)); do + if [ -n "$CUDA_GRAPH_CAPTURE_SIZES" ]; then + CUDA_GRAPH_CAPTURE_SIZES+="," + fi + CUDA_GRAPH_CAPTURE_SIZES+="$capture_size" +done +COMPILATION_CONFIG="{\"cudagraph_mode\":\"FULL_DECODE_ONLY\",\"cudagraph_capture_sizes\":[${CUDA_GRAPH_CAPTURE_SIZES}],\"mode\":0}" echo "Starting vllm server..." export TORCH_CUDA_ARCH_LIST="10.0" export PYTHONNOUSERSITE=1 export VLLM_FLOAT32_MATMUL_PRECISION=high -vllm serve "$MODEL_PATH" --served-model-name "$MODEL" \ ---host 0.0.0.0 \ ---port "$VLLM_BACKEND_PORT" \ ---trust-remote-code \ ---kv-cache-dtype fp8 \ ---block-size 256 \ -"${PARALLEL_ARGS[@]}" \ -"${VLLM_CP_ARGS[@]}" \ -"${EP_ARGS[@]}" \ ---compilation-config '{"cudagraph_mode":"FULL_AND_PIECEWISE","custom_ops":["all"]}' \ ---attention_config.use_fp4_indexer_cache=True \ ---tokenizer-mode deepseek_v4 \ ---tool-call-parser deepseek_v4 \ ---enable-auto-tool-choice \ ---reasoning-parser deepseek_v4 \ ---enable-prefix-caching \ ---no-disable-hybrid-kv-cache-manager \ ---max-num-seqs "$MAX_NUM_SEQS" \ -"${OFFLOAD_ARGS[@]}" > "$SERVER_LOG" 2>&1 & +{ set +x; } 2>/dev/null +VLLM_CMD=( + vllm serve "$MODEL_PATH" --served-model-name "$MODEL" + --host 0.0.0.0 + --port "$VLLM_BACKEND_PORT" + --gpu-memory-utilization 0.95 + --trust-remote-code + --no-enable-flashinfer-autotune + --no-disable-hybrid-kv-cache-manager + --max-num-seqs "$MAX_NUM_SEQS" + --kv-cache-dtype fp8 + --block-size 256 + --max-model-len 1048576 + --attention-config '{"use_fp4_indexer_cache":true,"backend":"FLASHINFER_MLA_SPARSE_DSV4","use_prefill_query_quantization":true}' + --disable-uvicorn-access-log + --tokenizer-mode deepseek_v4 + --tool-call-parser deepseek_v4 + --enable-auto-tool-choice + --reasoning-parser deepseek_v4 + --compilation-config "$COMPILATION_CONFIG" + "${PARALLEL_ARGS[@]}" + "${MODE_ARGS[@]}" + "${OFFLOAD_ARGS[@]}" +) +printf '%q ' "${VLLM_CMD[@]}" | tee "$RESULT_DIR/vllm_command.txt" +printf '\n' | tee -a "$RESULT_DIR/vllm_command.txt" +"${VLLM_CMD[@]}" > "$SERVER_LOG" 2>&1 & SERVER_PID=$! echo "Server PID: $SERVER_PID" diff --git a/configs/nvidia-master.yaml b/configs/nvidia-master.yaml index f90c51018..0b6d644e3 100644 --- a/configs/nvidia-master.yaml +++ b/configs/nvidia-master.yaml @@ -1771,7 +1771,7 @@ dsv4-fp4-b200-vllm: - { tp: 8, ep: 8, dp-attn: true, conc-start: 64, conc-end: 1024 } dsv4-fp4-b200-vllm-agentic: - image: vllm/vllm-openai:v0.23.0 + image: vllm/vllm-openai:nightly-dev-x86_64-cu13.0.1-515d6e9 model: deepseek-ai/DeepSeek-V4-Pro model-prefix: dsv4 runner: cluster:b200-dgxc @@ -1782,14 +1782,12 @@ dsv4-fp4-b200-vllm-agentic: agentic-coding: - dram-utilization: 0.80 search-space: - # Pure TP is only competitive at very low concurrency. - - { tp: 8, kv-offloading: none, conc-list: [1, 2, 3, 4, 5] } - # Sample the useful MooncakeStore range without repeating its collapsed - # high-concurrency tail. - - { tp: 8, kv-offloading: dram, kv-offload-backend: { name: mooncake, version: "0.3.11.post1" }, conc-list: [8, 10, 16] } - - { tp: 8, ep: 8, dp-attn: true, kv-offloading: none, conc-list: [16, 32, 38, 44, 50], router: { name: vllm-router, version: "0.1.14" } } - # Retain the external-cache transition and peak-throughput region. - - { tp: 8, ep: 8, dp-attn: true, kv-offloading: dram, kv-offload-backend: { name: mooncake, version: "0.3.11.post1" }, conc-list: [16, 38, 44, 56, 64, 66, 68], router: { name: vllm-router, version: "0.1.14" } } + # Pure TP is GPU-resident (cache fits) at low concurrency. + - { tp: 8, kv-offloading: none, conc-list: [1, 2, 4, 6, 8] } + - { tp: 8, kv-offloading: dram, kv-offload-backend: { name: vllm-simple }, conc-list: [8, 12, 16] } + # DEP compares SimpleCPUOffloadConnector and MooncakeStoreConnector. + - { tp: 8, ep: 8, dp-attn: true, kv-offloading: dram, kv-offload-backend: { name: vllm-simple }, conc-list: [8, 16, 24, 32, 40, 48, 56, 64, 68, 72], router: { name: vllm-router, version: "0.1.14" } } + - { tp: 8, ep: 8, dp-attn: true, kv-offloading: dram, kv-offload-backend: { name: mooncake, version: "0.3.11.post1" }, conc-list: [8, 16, 24, 32, 40, 48, 56, 64, 68, 72], router: { name: vllm-router, version: "0.1.14" } } dsv4-fp4-b200-trt: image: ghcr.io#semianalysisai/trtllm-deepseek-v4:feat-deepseek_v4-c185066 @@ -3003,7 +3001,7 @@ dsr1-fp8-b200-trt: osl: 1024 search-space: - { tp: 8, ep: 1, conc-start: 64, conc-end: 128 } - - { tp: 4, ep: 1, conc-start: 8, conc-end: 16 } + - { tp: 4, ep: 1, conc-start: 8, conc-end: 16 } - { tp: 8, ep: 1, conc-start: 4, conc-end: 8 } - isl: 8192 osl: 1024 @@ -3218,7 +3216,7 @@ dsv4-fp4-b300-vllm: - { tp: 8, ep: 8, dp-attn: true, conc-start: 2048, conc-end: 2048 } dsv4-fp4-b300-vllm-agentic: - image: vllm/vllm-openai:v0.23.0 + image: vllm/vllm-openai:nightly-dev-x86_64-cu13.0.1-515d6e9 model: deepseek-ai/DeepSeek-V4-Pro model-prefix: dsv4 runner: cluster:b300-nv @@ -3229,16 +3227,10 @@ dsv4-fp4-b300-vllm-agentic: agentic-coding: - dram-utilization: 0.80 search-space: - # Compare native GPU-cache and MooncakeStore CPU-offload cliffs. - - { tp: 4, kv-offloading: none, conc-list: [1, 2, 4, 6, 8, 16] } - - { tp: 4, kv-offloading: dram, kv-offload-backend: { name: mooncake, version: "0.3.11.post1" }, conc-list: [16, 18, 20, 24] } - # TP8 remains cache-resident through conc 52. - - { tp: 8, kv-offloading: none, conc-list: [1, 2, 4, 6, 8, 16, 32, 40, 48, 52] } - - { tp: 8, kv-offloading: dram, kv-offload-backend: { name: mooncake, version: "0.3.11.post1" }, conc-list: [52] } - - { tp: 4, ep: 4, dp-attn: true, kv-offloading: none, conc-list: [8, 16], router: { name: vllm-router, version: "0.1.14" } } - - { tp: 4, ep: 4, dp-attn: true, kv-offloading: dram, kv-offload-backend: { name: mooncake, version: "0.3.11.post1" }, conc-list: [32], router: { name: vllm-router, version: "0.1.14" } } - # TP8 DEP retains representative low, peak, and transition points. - - { tp: 8, ep: 8, dp-attn: true, kv-offloading: none, conc-list: [52, 72, 100, 128, 144], router: { name: vllm-router, version: "0.1.14" } } + # Preserve the previous GPU-resident TP4 search space on the new image. + - { tp: 4, kv-offloading: none, conc-list: [1, 2, 4, 6, 8, 16] } + - { tp: 4, ep: 4, dp-attn: true, kv-offloading: dram, kv-offload-backend: { name: vllm-simple }, conc-list: [8, 16, 24, 32, 40, 48, 56, 64, 72], router: { name: vllm-router, version: "0.1.14" } } + - { tp: 4, ep: 4, dp-attn: true, kv-offloading: dram, kv-offload-backend: { name: mooncake, version: "0.3.11.post1" }, conc-list: [8, 16, 24, 32, 40, 48, 56, 64, 72], router: { name: vllm-router, version: "0.1.14" } } dsv4-fp4-b300-trt: image: ghcr.io#semianalysisai/trtllm-deepseek-v4:feat-deepseek_v4-c185066 diff --git a/perf-changelog.yaml b/perf-changelog.yaml index 57d510dd1..5aa25a9bc 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -4750,3 +4750,13 @@ - "Image: lmsysorg/sglang:nightly-dev-cu13-20260709-074bb928" - "6 topologies across 1k/1k and 8k/1k: 1P1D TP4 STP + wide-EP (DEP4 prefill / DEP16 decode) from 1P1D up to 8P1D, recipes under benchmarks/multi_node/srt-slurm-recipes/sglang/qwen3.5/gb300-fp8/" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2137 + +- config-keys: + - dsv4-fp4-b200-vllm-agentic + - dsv4-fp4-b300-vllm-agentic + description: + - "Update B200 and B300 AgentX: KV offload, sparse DSV4 attention, mega-MoE, and FULL_DECODE_ONLY CUDA graphs." + - "Image: vllm/vllm-openai:nightly-dev-x86_64-cu13.0.1-515d6e9" + - "B200: GPU-resident TP8 at conc [1,2,4,6,8] and SimpleCPU-offload TP8 at conc [8,12,16]; DEP8 at conc [8,16,24,32,40,48,56,64,68,72] with both SimpleCPU and Mooncake 0.3.11.post1." + - "B300: GPU-resident TP4 at conc [1,2,4,6,8,16]; DEP4 at conc [8,16,24,32,40,48,56,64,72] with both SimpleCPU and Mooncake 0.3.11.post1." + pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/XXXX From cbb26426b500fb92d6d8d9deaa1da3264b12613f Mon Sep 17 00:00:00 2001 From: Yifan Qiao Date: Tue, 14 Jul 2026 05:57:01 +0000 Subject: [PATCH 02/10] docs(agentic): set perf-changelog pr-link to #2188 Co-Authored-By: Claude Opus 4.8 (1M context) Claude-Session: https://claude.ai/code/session_012DMrApcmVypNjLowsLo2wR --- perf-changelog.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/perf-changelog.yaml b/perf-changelog.yaml index 5aa25a9bc..3f20ba6cf 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -4759,4 +4759,4 @@ - "Image: vllm/vllm-openai:nightly-dev-x86_64-cu13.0.1-515d6e9" - "B200: GPU-resident TP8 at conc [1,2,4,6,8] and SimpleCPU-offload TP8 at conc [8,12,16]; DEP8 at conc [8,16,24,32,40,48,56,64,68,72] with both SimpleCPU and Mooncake 0.3.11.post1." - "B300: GPU-resident TP4 at conc [1,2,4,6,8,16]; DEP4 at conc [8,16,24,32,40,48,56,64,72] with both SimpleCPU and Mooncake 0.3.11.post1." - pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/XXXX + pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2188 From 8ae6406f847f8a3ee286e8a33e96df5c994567ac Mon Sep 17 00:00:00 2001 From: Cam Quilici Date: Tue, 14 Jul 2026 10:49:29 -0500 Subject: [PATCH 03/10] refactor(agentic): simplify vLLM recipe config --- .../single_node/agentic/dsv4_fp4_b200_vllm.sh | 16 ++++++++++++++-- .../single_node/agentic/dsv4_fp4_b300_vllm.sh | 19 ++++++++++++++++--- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/benchmarks/single_node/agentic/dsv4_fp4_b200_vllm.sh b/benchmarks/single_node/agentic/dsv4_fp4_b200_vllm.sh index 5a544ccbf..5db1cea6b 100755 --- a/benchmarks/single_node/agentic/dsv4_fp4_b200_vllm.sh +++ b/benchmarks/single_node/agentic/dsv4_fp4_b200_vllm.sh @@ -37,7 +37,7 @@ if [ "$PCP_SIZE" -gt 1 ]; then VLLM_CP_ARGS+=(--prefill-context-parallel-size "$PCP_SIZE") fi -GPU_COUNT="${GPU_COUNT:-$((TP * PCP_SIZE))}" +GPU_COUNT=$TP if [[ ! "$GPU_COUNT" =~ ^[1-9][0-9]*$ ]]; then echo "Error: GPU_COUNT must be a positive integer, got '$GPU_COUNT'" >&2 exit 1 @@ -113,9 +113,21 @@ case "${KV_OFFLOAD_BACKEND:-}" in CPU_BYTES_PER_RANK=$(( TOTAL_CPU_DRAM_GB * 1000 * 1000 * 1000 / GPU_COUNT )) # Identical prefixes must hash to identical block keys across DP ranks. export PYTHONHASHSEED=42 + OFFLOAD_CONFIG=$(cat <&2 exit 1 @@ -101,8 +101,21 @@ case "${KV_OFFLOAD_BACKEND:-}" in CPU_BYTES_PER_RANK=$(( TOTAL_CPU_DRAM_GB * 1000 * 1000 * 1000 / GPU_COUNT )) # Identical prefixes must hash to identical block keys across DP ranks. export PYTHONHASHSEED=42 - OFFLOAD_CONFIG="{\"kv_connector\":\"SimpleCPUOffloadConnector\",\"kv_role\":\"kv_both\",\"kv_connector_extra_config\":{\"cpu_bytes_to_use\":${CPU_BYTES_PER_RANK},\"enable_cross_layers_blocks\":\"true\"}}" - OFFLOAD_ARGS=(--kv-transfer-config "$OFFLOAD_CONFIG") + OFFLOAD_CONFIG=$(cat < Date: Tue, 14 Jul 2026 11:02:14 -0500 Subject: [PATCH 04/10] refactor(agentic): simplify optional variables --- .../single_node/agentic/dsv4_fp4_b200_vllm.sh | 20 +++++++++++-------- .../single_node/agentic/dsv4_fp4_b300_vllm.sh | 12 +++++------ 2 files changed, 18 insertions(+), 14 deletions(-) diff --git a/benchmarks/single_node/agentic/dsv4_fp4_b200_vllm.sh b/benchmarks/single_node/agentic/dsv4_fp4_b200_vllm.sh index 5db1cea6b..a16114a49 100755 --- a/benchmarks/single_node/agentic/dsv4_fp4_b200_vllm.sh +++ b/benchmarks/single_node/agentic/dsv4_fp4_b200_vllm.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -set -euo pipefail +set -eo pipefail set -x # Agentic trace replay benchmark for DeepSeek-V4-Pro FP4 on B200 using vLLM. @@ -27,8 +27,12 @@ source "$(dirname "$0")/../../benchmark_lib.sh" check_env_vars MODEL TP CONC KV_OFFLOADING TOTAL_CPU_DRAM_GB RESULT_DIR DURATION EP_SIZE DP_ATTENTION -DCP_SIZE="${DCP_SIZE:-1}" -PCP_SIZE="${PCP_SIZE:-1}" +if [ -z "$DCP_SIZE" ]; then + DCP_SIZE=1 +fi +if [ -z "$PCP_SIZE" ]; then + PCP_SIZE=1 +fi VLLM_CP_ARGS=() if [ "$DCP_SIZE" -gt 1 ]; then VLLM_CP_ARGS+=(--decode-context-parallel-size "$DCP_SIZE") @@ -44,14 +48,14 @@ if [[ ! "$GPU_COUNT" =~ ^[1-9][0-9]*$ ]]; then fi export GPU_COUNT -if [[ -n "${SLURM_JOB_ID:-}" ]]; then - echo "JOB $SLURM_JOB_ID running on ${SLURMD_NODENAME:-unknown}" +if [[ -n "$SLURM_JOB_ID" ]]; then + echo "JOB $SLURM_JOB_ID running on $SLURMD_NODENAME" fi # `hf download` creates the target dir if missing and is itself idempotent. # When MODEL_PATH is unset (stand-alone runs), fall back to the HF_HUB_CACHE # Either way, MODEL_PATH is what the server is launched with. -if [[ -n "${MODEL_PATH:-}" ]]; then +if [[ -n "$MODEL_PATH" ]]; then if [[ ! -d "$MODEL_PATH" || -z "$(ls -A "$MODEL_PATH" 2>/dev/null)" ]]; then hf download "$MODEL" --local-dir "$MODEL_PATH" fi @@ -104,7 +108,7 @@ ROUTER_PID="" MOONCAKE_MASTER_PID="" OFFLOAD_ARGS=() -case "${KV_OFFLOAD_BACKEND:-}" in +case "$KV_OFFLOAD_BACKEND" in "") require_agentic_kv_offload_none ;; @@ -191,7 +195,7 @@ EOF ) ;; *) - echo "Error: unsupported B200 KV_OFFLOAD_BACKEND='${KV_OFFLOAD_BACKEND:-}'" >&2 + echo "Error: unsupported B200 KV_OFFLOAD_BACKEND='$KV_OFFLOAD_BACKEND'" >&2 exit 1 ;; esac diff --git a/benchmarks/single_node/agentic/dsv4_fp4_b300_vllm.sh b/benchmarks/single_node/agentic/dsv4_fp4_b300_vllm.sh index 375834df9..bdce42fdf 100755 --- a/benchmarks/single_node/agentic/dsv4_fp4_b300_vllm.sh +++ b/benchmarks/single_node/agentic/dsv4_fp4_b300_vllm.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -set -euo pipefail +set -eo pipefail set -x # Agentic trace replay benchmark for DeepSeek-V4-Pro FP4 on B300 using vLLM. @@ -33,14 +33,14 @@ if [ "$DP_ATTENTION" = "true" ] && [ $((2 * CONC % TP)) -ne 0 ]; then exit 1 fi -if [[ -n "${SLURM_JOB_ID:-}" ]]; then - echo "JOB $SLURM_JOB_ID running on ${SLURMD_NODENAME:-unknown}" +if [[ -n "$SLURM_JOB_ID" ]]; then + echo "JOB $SLURM_JOB_ID running on $SLURMD_NODENAME" fi # `hf download` creates the target dir if missing and is itself idempotent. # When MODEL_PATH is unset (stand-alone runs), fall back to the HF_HUB_CACHE. # Either way, MODEL_PATH is what the server is launched with. -if [[ -n "${MODEL_PATH:-}" ]]; then +if [[ -n "$MODEL_PATH" ]]; then if [[ ! -d "$MODEL_PATH" || -z "$(ls -A "$MODEL_PATH" 2>/dev/null)" ]]; then hf download "$MODEL" --local-dir "$MODEL_PATH" fi @@ -92,7 +92,7 @@ MOONCAKE_MASTER_PID="" # On cluster:b300-nv, dram-utilization=0.80 and DEP4 resolve to roughly the # source recipe's 280 GiB per DP rank. TP4 remains GPU-resident. OFFLOAD_ARGS=() -case "${KV_OFFLOAD_BACKEND:-}" in +case "$KV_OFFLOAD_BACKEND" in "") require_agentic_kv_offload_none ;; @@ -173,7 +173,7 @@ EOF OFFLOAD_ARGS=(--kv-transfer-config "$OFFLOAD_CONFIG") ;; *) - echo "Error: unsupported B300 KV_OFFLOAD_BACKEND='${KV_OFFLOAD_BACKEND:-}'" >&2 + echo "Error: unsupported B300 KV_OFFLOAD_BACKEND='$KV_OFFLOAD_BACKEND'" >&2 exit 1 ;; esac From a14052f1eb77c4eb9d3b283f66b4c0842c49e11e Mon Sep 17 00:00:00 2001 From: Cameron Quilici Date: Tue, 14 Jul 2026 11:53:04 -0500 Subject: [PATCH 05/10] Update perf-changelog.yaml --- perf-changelog.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/perf-changelog.yaml b/perf-changelog.yaml index 1aa205969..5d55ae68b 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -4791,4 +4791,3 @@ - "B200: GPU-resident TP8 at conc [1,2,4,6,8] and SimpleCPU-offload TP8 at conc [8,12,16]; DEP8 at conc [8,16,24,32,40,48,56,64,68,72] with both SimpleCPU and Mooncake 0.3.11.post1." - "B300: GPU-resident TP4 at conc [1,2,4,6,8,16]; DEP4 at conc [8,16,24,32,40,48,56,64,72] with both SimpleCPU and Mooncake 0.3.11.post1." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2188 - \ No newline at end of file From ccf2fc3de1239ff6505e6c9fee2d1838cb6f5f2a Mon Sep 17 00:00:00 2001 From: Cam Quilici Date: Tue, 14 Jul 2026 14:18:13 -0500 Subject: [PATCH 06/10] chore(config): update DSV4 vLLM nightly --- configs/nvidia-master.yaml | 4 ++-- perf-changelog.yaml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/configs/nvidia-master.yaml b/configs/nvidia-master.yaml index 55d614375..884e8cfc9 100644 --- a/configs/nvidia-master.yaml +++ b/configs/nvidia-master.yaml @@ -1771,7 +1771,7 @@ dsv4-fp4-b200-vllm: - { tp: 8, ep: 8, dp-attn: true, conc-start: 64, conc-end: 1024 } dsv4-fp4-b200-vllm-agentic: - image: vllm/vllm-openai:nightly-dev-x86_64-cu13.0.1-515d6e9 + image: vllm/vllm-openai:nightly-dev-x86_64-cu13.0.1-904e4ec model: deepseek-ai/DeepSeek-V4-Pro model-prefix: dsv4 runner: cluster:b200-dgxc @@ -3215,7 +3215,7 @@ dsv4-fp4-b300-vllm: - { tp: 8, ep: 8, dp-attn: true, conc-start: 2048, conc-end: 2048 } dsv4-fp4-b300-vllm-agentic: - image: vllm/vllm-openai:nightly-dev-x86_64-cu13.0.1-515d6e9 + image: vllm/vllm-openai:nightly-dev-x86_64-cu13.0.1-904e4ec model: deepseek-ai/DeepSeek-V4-Pro model-prefix: dsv4 runner: cluster:b300-nv diff --git a/perf-changelog.yaml b/perf-changelog.yaml index 5d55ae68b..7dd852518 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -4787,7 +4787,7 @@ - dsv4-fp4-b300-vllm-agentic description: - "Update B200 and B300 AgentX: KV offload, sparse DSV4 attention, mega-MoE, and FULL_DECODE_ONLY CUDA graphs." - - "Image: vllm/vllm-openai:nightly-dev-x86_64-cu13.0.1-515d6e9" + - "Image: vllm/vllm-openai:nightly-dev-x86_64-cu13.0.1-904e4ec" - "B200: GPU-resident TP8 at conc [1,2,4,6,8] and SimpleCPU-offload TP8 at conc [8,12,16]; DEP8 at conc [8,16,24,32,40,48,56,64,68,72] with both SimpleCPU and Mooncake 0.3.11.post1." - "B300: GPU-resident TP4 at conc [1,2,4,6,8,16]; DEP4 at conc [8,16,24,32,40,48,56,64,72] with both SimpleCPU and Mooncake 0.3.11.post1." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2188 From 7dfc4b8b08213ab409fb899bb243e2fc26836917 Mon Sep 17 00:00:00 2001 From: Yifan Qiao Date: Tue, 14 Jul 2026 21:26:54 +0000 Subject: [PATCH 07/10] fix(agentic): dsv4-b300 TP uses FlashInfer all-reduce, not custom --- .../single_node/agentic/dsv4_fp4_b300_vllm.sh | 11 ++++- perf-changelog.yaml | 44 +++++++++---------- 2 files changed, 32 insertions(+), 23 deletions(-) diff --git a/benchmarks/single_node/agentic/dsv4_fp4_b300_vllm.sh b/benchmarks/single_node/agentic/dsv4_fp4_b300_vllm.sh index bdce42fdf..47f7c45b7 100755 --- a/benchmarks/single_node/agentic/dsv4_fp4_b300_vllm.sh +++ b/benchmarks/single_node/agentic/dsv4_fp4_b300_vllm.sh @@ -70,7 +70,6 @@ if [ "$DP_ATTENTION" = "true" ]; then fi # Match the environment used by v4pro-b300.yaml. -export PYTORCH_ALLOC_CONF=expandable_segments:True export VLLM_USE_V2_MODEL_RUNNER=1 export VLLM_ENGINE_READY_TIMEOUT_S=3600 export VLLM_PREFIX_CACHE_RETENTION_INTERVAL=32768 @@ -183,6 +182,15 @@ if [ "$DP_ATTENTION" = "true" ]; then PARALLEL_ARGS=(--tensor-parallel-size 1 --data-parallel-size "$TP") fi +TP_ARGS=() +if [ "$DP_ATTENTION" = "true" ]; then + export PYTORCH_ALLOC_CONF=expandable_segments:True +else + export VLLM_ALLREDUCE_USE_FLASHINFER=1 + export VLLM_FLASHINFER_ALLREDUCE_BACKEND=auto + TP_ARGS+=(--disable-custom-all-reduce) +fi + MODE_ARGS=() if [ "$EP_SIZE" -gt 1 ]; then MODE_ARGS+=( @@ -240,6 +248,7 @@ VLLM_CMD=( --reasoning-parser deepseek_v4 --compilation-config "$COMPILATION_CONFIG" "${PARALLEL_ARGS[@]}" + "${TP_ARGS[@]}" "${MODE_ARGS[@]}" "${OFFLOAD_ARGS[@]}" ) diff --git a/perf-changelog.yaml b/perf-changelog.yaml index 7dd852518..3960e9897 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -1738,7 +1738,7 @@ - "TP=2 and TP=4, concurrency 4-256 for 1k1k and 8k1k sequence lengths" - "Add --gpu-memory-utilization 0.9 to server launch" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1133 - + - config-keys: - dsv4-fp8-h200-vllm @@ -1860,7 +1860,7 @@ - "Image pinned to lmsysorg/sglang:deepseek-v4-b300@sha256:26e116bd211e300dbb76924d56c5cbe6cc3ee5ee2fe314859cb8774f5bc070f3" - "DP-attention path enables SGLANG_OPT_SWA_EVICT_DROP_PAGE_MARGIN=1 for better SWA eviction behavior" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1185 - + - config-keys: - dsv4-fp4-b200-sglang @@ -1882,7 +1882,7 @@ description: - "Update GPTOSS-120B FP4 MI355X Atom benchmark (rocm/atom:rocm7.2.2_ubuntu24.04_py3.12_pytorch_release_2.10.0_atom0.1.2.post)" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1195 - + - config-keys: - dsv4-fp4-b300-vllm @@ -1990,7 +1990,7 @@ - "Add conc=8192 recipe for 1k1k: deepep mega_moe backend with cuda-graph-max-bs 1088, max-running-requests 8192, mem-fraction-static 0.80, swa-full-tokens-ratio 0.3, tokenizer-worker-num 16" - "conc=8192 enables SGLANG_OPT_USE_ONLINE_COMPRESS=1 and --stream-interval 30" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1209 - + - config-keys: - dsv4-fp4-b300-vllm @@ -2033,7 +2033,7 @@ - config-keys: - qwen3.5-fp8-b200-sglang description: - - updated sglang container image + - updated sglang container image pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1027 - config-keys: @@ -2480,7 +2480,7 @@ - dsv4-fp4-mi355x-atom description: - "Add DeepSeek-V4-Pro FP4 MI355X ATOM benchmark config; bump image to rocm/atom-dev:nightly_202605101539, expand concurrency range (conc 4–1024), and simplify runtime script" - pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1311 + pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1311 - config-keys: - glm5-fp8-mi355x-sglang @@ -2515,7 +2515,7 @@ - "Improves tput/GPU by up to +31% at low concurrency (tp=4, isl=1024, c=4-16)" - "Ref ATOM upstream benchmark run https://github.com/ROCm/ATOM/actions/runs/25686894636" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1387 - + - config-keys: - dsv4-fp4-b300-vllm-mtp @@ -3223,7 +3223,7 @@ - "Remove --deepep-config and SGLANG_DEEPEP_NUM_MAX_DISPATCH_TOKENS_PER_RANK (unused by megamoe/StandardDispatcher)" - "Fix CONC=512 yaml ep from 4 to 1 (flashinfer_mxfp4 does not set ep=tp)" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1506 - + - config-keys: - dsr1-fp4-mi355x-sglang-disagg-8k1k-mtp @@ -3562,7 +3562,7 @@ - "Add models_atom.yaml: per-model configs for ATOM engine" - "Add atom-disagg sweep: 2P1D DPA+TP8 (conc 256-2048) and 1P1D TP8 (conc 4-256) at isl=8192/osl=1024" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1683 - + - config-keys: - dsv4-fp4-b300-trt @@ -3593,7 +3593,7 @@ - "Refresh the script's env vars. The main branch introduced several env var renames and new default settings, so we refreshed the env vars in the script accordingly." - "Enable the unified KV attention kernel. Set export SGLANG_HACK_FLASHMLA_BACKEND=unified_kv_triton for better performance." - "Specify the prefill delay explicitly. Set --prefill-delayer-max-delay-ms 5000 to define a concrete prefill delay, allowing DP to batch more requests together per execution." - pr-link: + pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1701 - config-keys: @@ -3627,7 +3627,7 @@ - "Fix the intermediate_pad setting in the MoE computation in sglang PR#27858. This avoids the unnecessary overhead of computing useless padding." - "Correct the chunk prefill setting size under tp8/dp8 config." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1715 - + - config-keys: - dsv4-fp4-gb200-dynamo-sglang @@ -3837,7 +3837,7 @@ - "Switch fixed-seq-len search space from TP8 to TP4 for both isl=1024 and isl=8192 scenarios" - "Expand isl=8192 coverage: add TP4 dp-attn sweep (conc 32–2048) and TP4 TP-only sweep (conc 1–32)" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1762 - + - config-keys: - dsv4-fp4-gb300-dynamo-trt @@ -3909,7 +3909,7 @@ description: - "Use the Marlin MoE backend for MiniMax-M3 B200/B300 TP-only vLLM configurations by adding --moe-backend marlin when expert parallelism is disabled." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1809 - + - config-keys: - dsr1-fp8-gb300-dynamo-trt description: @@ -3925,7 +3925,7 @@ - "Add day-zero MiniMax-M3 MXFP4 (amd/MiniMax-M3-MXFP4) single-node atom benchmark on MI355X, following the ROCm/ATOM MiniMax-M3 recipe (TP4, block size 128 for MSA, default KV cache dtype)." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1813 - + - config-keys: - glm5-fp4-gb300-dynamo-trt description: @@ -3934,7 +3934,7 @@ - "Recipes sourced from NVIDIA/srt-slurm branch sa-submission-q2-2026 (gb300_nvfp4 STP recipes)" - "Runner script launch_gb300-nv.sh: added dynamo-trt-specific glm5-fp4 case with SERVED_MODEL_NAME and SRT_SLURM_MODEL_PREFIX=nvidia/GLM-5-NVFP4" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1798 - + - config-keys: - dsv4-fp4-mi355x-atom description: @@ -3942,7 +3942,7 @@ - "Update ISL=8192 search-space: TP8-only from conc=4-64, DPA from conc=128-1024 (previously conc=1-64 and DPA conc=64-512)" - "Update Applied TBO on high concurrencies" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1717 - + - config-keys: - dsv4-fp4-mi355x-atom description: @@ -4195,7 +4195,7 @@ - "Image: lmsysorg/sglang:nightly-dev-cu13-20260528-0abe6a85" - "8 topologies: low-latency 1p1d-tp8-tp8 + 1p6d-dep8-tp8; mid-curve 1p1d through 6p1d-dep8-dep16." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1676 - + - config-keys: - minimaxm3-fp8-b300-dynamo-vllm description: @@ -4217,7 +4217,7 @@ - "server_atom.sh: fix _MAX_CONC assignment before cudagraph size check; gate ATOM_MOE_GU_ITLV/AITER_BF16_FP8_MOE_BOUND on DeepSeek-V4-Pro only" - "Search space: ISL=8192 and ISL=1024, 1P1D TP4, conc 1-512" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1865 - + - config-keys: - minimaxm3-fp8-mi355x-vllm-disagg description: @@ -4238,7 +4238,7 @@ - "server_atom.sh: fix _MAX_CONC assignment before cudagraph size check; gate ATOM_MOE_GU_ITLV/AITER_BF16_FP8_MOE_BOUND on DeepSeek-V4-Pro only" - "Search space: ISL=8192 and ISL=1024, 1P1D TP4, conc 1-512" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1927 - + - config-keys: - dsv4-fp4-b200-dynamo-vllm description: @@ -4697,7 +4697,7 @@ - "Update SGLang image from lmsysorg/sglang:v0.5.13-cu130 to lmsysorg/sglang:nightly-dev-cu13-20260707-b4155233" - "Enable SGLANG_ENABLE_UNIFIED_RADIX_TREE=1 unconditionally (previously hicache-only) and SGLANG_OPT_UNIFIED_CACHE_FREE_OUT_OF_WINDOW_SLOTS=1 to free out-of-window SWA KV slots during chunked prefill, relieving SWA pool pressure and restoring prefix-cache hit rate on multi-turn agentic workloads" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2112 - + - config-keys: - dsv4-fp4-gb200-llmd-vllm description: @@ -4716,7 +4716,7 @@ - "Image: lmsysorg/sglang:v0.5.11-cu130" - "11 topologies across 1k/1k and 8k/1k (prefill TP4 + decode wide-EP: 8k/1k DEP16/24/32/40, 1k/1k DEP48/56; per-node TP4 low-latency); MTP flags: speculative-algorithm EAGLE, num-steps 2, eagle-topk 1, num-draft-tokens 3" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1907 - + - config-keys: - dsv4-fp4-mi355x-sglang description: @@ -4790,4 +4790,4 @@ - "Image: vllm/vllm-openai:nightly-dev-x86_64-cu13.0.1-904e4ec" - "B200: GPU-resident TP8 at conc [1,2,4,6,8] and SimpleCPU-offload TP8 at conc [8,12,16]; DEP8 at conc [8,16,24,32,40,48,56,64,68,72] with both SimpleCPU and Mooncake 0.3.11.post1." - "B300: GPU-resident TP4 at conc [1,2,4,6,8,16]; DEP4 at conc [8,16,24,32,40,48,56,64,72] with both SimpleCPU and Mooncake 0.3.11.post1." - pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2188 + pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2202 From 9e518178a825adc1828a9eb799490e72e139ffb0 Mon Sep 17 00:00:00 2001 From: Alec Ibarra <93070681+adibarra@users.noreply.github.com> Date: Tue, 14 Jul 2026 15:03:44 -0500 Subject: [PATCH 08/10] Require merged upstream recipe PRs (#2210) --- .github/codeowner-signoff-verify-prompt.md | 41 +++++++++++++--------- docs/PR_REVIEW_CHECKLIST.md | 4 +-- 2 files changed, 27 insertions(+), 18 deletions(-) diff --git a/.github/codeowner-signoff-verify-prompt.md b/.github/codeowner-signoff-verify-prompt.md index ad0879c17..5f400f6ea 100644 --- a/.github/codeowner-signoff-verify-prompt.md +++ b/.github/codeowner-signoff-verify-prompt.md @@ -121,7 +121,7 @@ For the commit that passed Check 1, confirm the eval numbers are real and meet t the same inference-engine image as this PR's config. FAIL if evals are skipped/failed/empty/below bar, or the image differs — say exactly which. -## Check 3 — Recipe linked AND complete (SINGLE-NODE recipes only) +## Check 3 — Recipe linked, MERGED, AND complete (SINGLE-NODE recipes only) APPLICABILITY — read this first: the recipe-link requirement covers SINGLE-NODE recipes only, because the official upstream recipe sources (vLLM recipes, SGLang cookbook) publish single-node serve commands. Disaggregated / multi-node @@ -134,23 +134,31 @@ exclusively multi-node/disagg — files under `benchmarks/multi_node/**` (includ single-node recipes only` and DO NOT fail it. A sign-off note like "this is a disagg submission, no recipe update required" is a legitimate statement of that fact, not a violation. If the PR touches BOTH single-node and multi-node recipes, -apply (a)/(b) below to the single-node portion only. +apply (a)/(b)/(c) below to the single-node portion only. The InferenceX "recipe" for this PR = the files it changes under `benchmarks/single_node/**` plus its entry in `configs/*-master.yaml`. The merge -standard is: the community must be able to reproduce this benchmark from a public -recipe. +standard is: the community must be able to reproduce this benchmark from merged, +public upstream documentation. - (a) LINK PRESENT: The sign-off's "Additional detail section" MUST contain a link to - the corresponding recipe — a PR/commit in + the corresponding merged recipe PR in `https://github.com/vllm-project/recipes` or `https://github.com/sgl-project/sglang` (cookbook under `docs_new`), or the published recipe page (`https://recipes.vllm.ai/` or `https://docs.sglang.io/cookbook/...`). If no such link is present, FAIL. -- (b) MAJOR SERVER ARGS MATCH: Fetch the linked recipe (use the `fetch` MCP tool or - WebFetch; for a recipe PR, read its diff via `gh pr diff` against that repo if - accessible) and compare it to this PR's launch command. The recipe only needs to - match the MAJOR, deployment-defining server args — NOT every flag, and explicitly - NOT the knobs that are specific to InferenceX benchmark/harness tuning. +- (b) UPSTREAM CHANGE MERGED: For a linked GitHub PR, query the upstream repository + directly (for example, `gh pr view --json state,mergedAt,url`) and require + `state: MERGED` with a non-null `mergedAt`. An open PR, draft PR, closed-unmerged + PR, bare branch, or bare commit does NOT pass. A published recipe/cookbook page + containing the required recipe counts as merged upstream documentation. If the + linked artifact's merge/publication status cannot be verified, FAIL; never infer + that it merged from an approval, a green check, or the sign-off author's claim. +- (c) MAJOR SERVER ARGS MATCH: Fetch the merged or published recipe (use the `fetch` + MCP tool or WebFetch; for a merged recipe PR, read its diff via `gh pr diff` against + that repo if accessible) and compare it to this PR's launch command. The recipe + only needs to match the MAJOR, deployment-defining server args — NOT every flag, + and explicitly NOT the knobs that are specific to InferenceX benchmark/harness + tuning. MAJOR (must match — these define the model, parallelism, precision, and which kernels run, so they determine the perf profile): - model / model-path, hardware/SKU @@ -165,13 +173,14 @@ recipe. `--scheduler-recv-interval`, `--chunked-prefill-size`, `--disable-piecewise-cuda-graph`, `SGLANG_RADIX_FORCE_MISS` and similar env toggles, concurrency / sequence-length sweep ranges, ports, result filenames, and image tag/version. - FAIL only if a MAJOR arg in this PR is missing from (or contradicts) the recipe; - list exactly those. Treat the InferenceX-specific diffs as expected and mention them - only as a brief informational note, not as blockers. If a flag's effect is - equivalent to a recipe default (e.g. quantization auto-detected from an FP4 model), - say so and do not count it against the recipe. + FAIL if a MAJOR arg in this PR is missing from (or contradicts) the merged/published + recipe; list exactly those. Treat the InferenceX-specific diffs as expected and + mention them only as a brief informational note, not as blockers. If a flag's effect + is equivalent to a recipe default (e.g. quantization auto-detected from an FP4 + model), say so and do not count it against the recipe. - Note: a bare "recipes are already similar to the official ones" claim WITHOUT a - link does not pass this workflow's standard — a link is required. + link to merged/published upstream documentation does not pass this workflow's + standard. ## Check 4 — Reuse-sweep command explicitly posted The supported merge path for an approved PR is reuse (`utils/merge_with_reuse.sh`), diff --git a/docs/PR_REVIEW_CHECKLIST.md b/docs/PR_REVIEW_CHECKLIST.md index 01387e152..79f527258 100644 --- a/docs/PR_REVIEW_CHECKLIST.md +++ b/docs/PR_REVIEW_CHECKLIST.md @@ -24,8 +24,8 @@ As a PR reviewer and CODEOWNER, I have reviewed this and have: - [ ] Verified that the model architecture isn't changed with benchmark hacks like using --hf-overrides to skipping indexer for every x layers on models that don't natively support this. As a general rule, we won't accept optimizations that reduces the number of model architecture FLOPs. Anything that makes that same computation run faster is fair game; FLOPs at lower precisions is fine, given that the config passes private evals. As an general north star princple, we should only use optimizations which is used in production by customers that care about accuracy - [ ] If an company claims that they support vLLM/SGLang as first class LLM inference engines on their hardware, I have verified that the respective vLLM submission made using upstream https://hub.docker.com/u/vllm docker repo, upstream SGLang https://hub.docker.com/u/lmsysorg docker repo. The only exceptions are for new hardware, such as MI455X UALoE72, Vera Rubin NVL72, Rubin NVL8, etc., and for new model architectures where there is an actual reason why vLLM/SGLang does not fundamentally support them yet as supported by vLLM/SGLang community maintainers - [ ] If an company claims that they support vLLM/SGLang as first class upstream in-tree LLM inference engines on their hardware, I have have verified that the respective vLLM/SGLang submission has been made before additional frameworks (TRT-LLM, ATOM, etc.). The only exceptions are for new hardware, such as MI455X UALoE72, Vera Rubin NVL72, Rubin NVL8, etc., and for new model architectures where there is an actual reason why vLLM/SGLang does not fundamentally support them yet. -- [ ] Verified that the single-node recipes are similar to the official [vLLM recipes](https://recipes.vllm.ai/) and/or the[SGLang cookbook](https://docs.sglang.io/cookbook/intro): - - [ ] If they are not, I have verified that a PR has been opened in [vLLM recipe repo](https://github.com/vllm-project/recipes) or [SGLang repo](https://github.com/sgl-project/sglang/tree/main/docs_new) and linked it below in the additional detail section: +- [ ] Verified that every single-node vLLM/SGLang recipe in this PR is documented in the official [vLLM recipes](https://recipes.vllm.ai/) and/or the [SGLang cookbook](https://docs.sglang.io/cookbook/intro): + - [ ] I linked the corresponding upstream PR in the [vLLM recipe repo](https://github.com/vllm-project/recipes) or [SGLang repo](https://github.com/sgl-project/sglang/tree/main/docs_new) and verified that it is **MERGED** before this InferenceX PR merges. An opened, draft, or closed-without-merge upstream PR does not satisfy this requirement. If the matching recipe was already published, I linked the published recipe/cookbook page in the additional detail section below. - [ ] Verified that this PR does not patch the inference engine or serving stack — the pinned image must run as shipped. This covers .patch files / git apply / patch, inline patches embedded in benchmark scripts (e.g. a python3/sed heredoc that rewrites installed engine sources before serving), in-place edits of site-packages, monkey-patching, overwriting container files, and installing forked/rebuilt engine wheels on top of the pinned image. The only exception is a patch covered by a filled-out waiver at [docs/waiver/](https://github.com/SemiAnalysisAI/InferenceX/tree/main/docs/waiver)`.md` — named after the PR that introduces the patch and filed in that same PR, stating what is patched, why the unmodified upstream image cannot run this benchmark, the upstream PR/issue link, and the removal plan — which I have linked below in the additional detail section. - [ ] If any of the above criteria cannot reasonably be satisfied, I have provided additional reasoning below. From b70303b3deab4d4f9e4a4ad98be95601a566556b Mon Sep 17 00:00:00 2001 From: Yifan Qiao Date: Tue, 14 Jul 2026 21:45:05 +0000 Subject: [PATCH 09/10] fix(changelog): restore stray whitespace deletions in perf-changelog --- perf-changelog.yaml | 42 +++++++++++++++++++++--------------------- 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/perf-changelog.yaml b/perf-changelog.yaml index 3960e9897..fa0679523 100644 --- a/perf-changelog.yaml +++ b/perf-changelog.yaml @@ -1738,7 +1738,7 @@ - "TP=2 and TP=4, concurrency 4-256 for 1k1k and 8k1k sequence lengths" - "Add --gpu-memory-utilization 0.9 to server launch" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1133 - + - config-keys: - dsv4-fp8-h200-vllm @@ -1860,7 +1860,7 @@ - "Image pinned to lmsysorg/sglang:deepseek-v4-b300@sha256:26e116bd211e300dbb76924d56c5cbe6cc3ee5ee2fe314859cb8774f5bc070f3" - "DP-attention path enables SGLANG_OPT_SWA_EVICT_DROP_PAGE_MARGIN=1 for better SWA eviction behavior" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1185 - + - config-keys: - dsv4-fp4-b200-sglang @@ -1882,7 +1882,7 @@ description: - "Update GPTOSS-120B FP4 MI355X Atom benchmark (rocm/atom:rocm7.2.2_ubuntu24.04_py3.12_pytorch_release_2.10.0_atom0.1.2.post)" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1195 - + - config-keys: - dsv4-fp4-b300-vllm @@ -1990,7 +1990,7 @@ - "Add conc=8192 recipe for 1k1k: deepep mega_moe backend with cuda-graph-max-bs 1088, max-running-requests 8192, mem-fraction-static 0.80, swa-full-tokens-ratio 0.3, tokenizer-worker-num 16" - "conc=8192 enables SGLANG_OPT_USE_ONLINE_COMPRESS=1 and --stream-interval 30" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1209 - + - config-keys: - dsv4-fp4-b300-vllm @@ -2033,7 +2033,7 @@ - config-keys: - qwen3.5-fp8-b200-sglang description: - - updated sglang container image + - updated sglang container image pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1027 - config-keys: @@ -2480,7 +2480,7 @@ - dsv4-fp4-mi355x-atom description: - "Add DeepSeek-V4-Pro FP4 MI355X ATOM benchmark config; bump image to rocm/atom-dev:nightly_202605101539, expand concurrency range (conc 4–1024), and simplify runtime script" - pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1311 + pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1311 - config-keys: - glm5-fp8-mi355x-sglang @@ -2515,7 +2515,7 @@ - "Improves tput/GPU by up to +31% at low concurrency (tp=4, isl=1024, c=4-16)" - "Ref ATOM upstream benchmark run https://github.com/ROCm/ATOM/actions/runs/25686894636" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1387 - + - config-keys: - dsv4-fp4-b300-vllm-mtp @@ -3223,7 +3223,7 @@ - "Remove --deepep-config and SGLANG_DEEPEP_NUM_MAX_DISPATCH_TOKENS_PER_RANK (unused by megamoe/StandardDispatcher)" - "Fix CONC=512 yaml ep from 4 to 1 (flashinfer_mxfp4 does not set ep=tp)" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1506 - + - config-keys: - dsr1-fp4-mi355x-sglang-disagg-8k1k-mtp @@ -3562,7 +3562,7 @@ - "Add models_atom.yaml: per-model configs for ATOM engine" - "Add atom-disagg sweep: 2P1D DPA+TP8 (conc 256-2048) and 1P1D TP8 (conc 4-256) at isl=8192/osl=1024" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1683 - + - config-keys: - dsv4-fp4-b300-trt @@ -3593,7 +3593,7 @@ - "Refresh the script's env vars. The main branch introduced several env var renames and new default settings, so we refreshed the env vars in the script accordingly." - "Enable the unified KV attention kernel. Set export SGLANG_HACK_FLASHMLA_BACKEND=unified_kv_triton for better performance." - "Specify the prefill delay explicitly. Set --prefill-delayer-max-delay-ms 5000 to define a concrete prefill delay, allowing DP to batch more requests together per execution." - pr-link: + pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1701 - config-keys: @@ -3627,7 +3627,7 @@ - "Fix the intermediate_pad setting in the MoE computation in sglang PR#27858. This avoids the unnecessary overhead of computing useless padding." - "Correct the chunk prefill setting size under tp8/dp8 config." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1715 - + - config-keys: - dsv4-fp4-gb200-dynamo-sglang @@ -3837,7 +3837,7 @@ - "Switch fixed-seq-len search space from TP8 to TP4 for both isl=1024 and isl=8192 scenarios" - "Expand isl=8192 coverage: add TP4 dp-attn sweep (conc 32–2048) and TP4 TP-only sweep (conc 1–32)" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1762 - + - config-keys: - dsv4-fp4-gb300-dynamo-trt @@ -3909,7 +3909,7 @@ description: - "Use the Marlin MoE backend for MiniMax-M3 B200/B300 TP-only vLLM configurations by adding --moe-backend marlin when expert parallelism is disabled." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1809 - + - config-keys: - dsr1-fp8-gb300-dynamo-trt description: @@ -3925,7 +3925,7 @@ - "Add day-zero MiniMax-M3 MXFP4 (amd/MiniMax-M3-MXFP4) single-node atom benchmark on MI355X, following the ROCm/ATOM MiniMax-M3 recipe (TP4, block size 128 for MSA, default KV cache dtype)." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1813 - + - config-keys: - glm5-fp4-gb300-dynamo-trt description: @@ -3934,7 +3934,7 @@ - "Recipes sourced from NVIDIA/srt-slurm branch sa-submission-q2-2026 (gb300_nvfp4 STP recipes)" - "Runner script launch_gb300-nv.sh: added dynamo-trt-specific glm5-fp4 case with SERVED_MODEL_NAME and SRT_SLURM_MODEL_PREFIX=nvidia/GLM-5-NVFP4" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1798 - + - config-keys: - dsv4-fp4-mi355x-atom description: @@ -3942,7 +3942,7 @@ - "Update ISL=8192 search-space: TP8-only from conc=4-64, DPA from conc=128-1024 (previously conc=1-64 and DPA conc=64-512)" - "Update Applied TBO on high concurrencies" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1717 - + - config-keys: - dsv4-fp4-mi355x-atom description: @@ -4195,7 +4195,7 @@ - "Image: lmsysorg/sglang:nightly-dev-cu13-20260528-0abe6a85" - "8 topologies: low-latency 1p1d-tp8-tp8 + 1p6d-dep8-tp8; mid-curve 1p1d through 6p1d-dep8-dep16." pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1676 - + - config-keys: - minimaxm3-fp8-b300-dynamo-vllm description: @@ -4217,7 +4217,7 @@ - "server_atom.sh: fix _MAX_CONC assignment before cudagraph size check; gate ATOM_MOE_GU_ITLV/AITER_BF16_FP8_MOE_BOUND on DeepSeek-V4-Pro only" - "Search space: ISL=8192 and ISL=1024, 1P1D TP4, conc 1-512" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1865 - + - config-keys: - minimaxm3-fp8-mi355x-vllm-disagg description: @@ -4238,7 +4238,7 @@ - "server_atom.sh: fix _MAX_CONC assignment before cudagraph size check; gate ATOM_MOE_GU_ITLV/AITER_BF16_FP8_MOE_BOUND on DeepSeek-V4-Pro only" - "Search space: ISL=8192 and ISL=1024, 1P1D TP4, conc 1-512" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1927 - + - config-keys: - dsv4-fp4-b200-dynamo-vllm description: @@ -4697,7 +4697,7 @@ - "Update SGLang image from lmsysorg/sglang:v0.5.13-cu130 to lmsysorg/sglang:nightly-dev-cu13-20260707-b4155233" - "Enable SGLANG_ENABLE_UNIFIED_RADIX_TREE=1 unconditionally (previously hicache-only) and SGLANG_OPT_UNIFIED_CACHE_FREE_OUT_OF_WINDOW_SLOTS=1 to free out-of-window SWA KV slots during chunked prefill, relieving SWA pool pressure and restoring prefix-cache hit rate on multi-turn agentic workloads" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2112 - + - config-keys: - dsv4-fp4-gb200-llmd-vllm description: @@ -4716,7 +4716,7 @@ - "Image: lmsysorg/sglang:v0.5.11-cu130" - "11 topologies across 1k/1k and 8k/1k (prefill TP4 + decode wide-EP: 8k/1k DEP16/24/32/40, 1k/1k DEP48/56; per-node TP4 low-latency); MTP flags: speculative-algorithm EAGLE, num-steps 2, eagle-topk 1, num-draft-tokens 3" pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/1907 - + - config-keys: - dsv4-fp4-mi355x-sglang description: From 60acff53d9b54dec361631529e9876d360e0a46c Mon Sep 17 00:00:00 2001 From: Yifan Qiao Date: Wed, 15 Jul 2026 03:39:38 +0000 Subject: [PATCH 10/10] chore: update vllm-simple version --- benchmarks/single_node/agentic/dsv4_fp4_b300_vllm.sh | 2 +- configs/nvidia-master.yaml | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/benchmarks/single_node/agentic/dsv4_fp4_b300_vllm.sh b/benchmarks/single_node/agentic/dsv4_fp4_b300_vllm.sh index 47f7c45b7..72f2736fe 100755 --- a/benchmarks/single_node/agentic/dsv4_fp4_b300_vllm.sh +++ b/benchmarks/single_node/agentic/dsv4_fp4_b300_vllm.sh @@ -232,7 +232,7 @@ VLLM_CMD=( vllm serve "$MODEL_PATH" --served-model-name "$MODEL" --host 0.0.0.0 --port "$VLLM_BACKEND_PORT" - --gpu-memory-utilization 0.95 + --gpu-memory-utilization 0.96 --trust-remote-code --no-enable-flashinfer-autotune --no-disable-hybrid-kv-cache-manager diff --git a/configs/nvidia-master.yaml b/configs/nvidia-master.yaml index 884e8cfc9..8f53d3712 100644 --- a/configs/nvidia-master.yaml +++ b/configs/nvidia-master.yaml @@ -1784,9 +1784,9 @@ dsv4-fp4-b200-vllm-agentic: search-space: # Pure TP is GPU-resident (cache fits) at low concurrency. - { tp: 8, kv-offloading: none, conc-list: [1, 2, 4, 6, 8] } - - { tp: 8, kv-offloading: dram, kv-offload-backend: { name: vllm-simple }, conc-list: [8, 12, 16] } + - { tp: 8, kv-offloading: dram, kv-offload-backend: { name: vllm-simple, version: "904e4ec" }, conc-list: [8, 12, 16] } # DEP compares SimpleCPUOffloadConnector and MooncakeStoreConnector. - - { tp: 8, ep: 8, dp-attn: true, kv-offloading: dram, kv-offload-backend: { name: vllm-simple }, conc-list: [8, 16, 24, 32, 40, 48, 56, 64, 68, 72], router: { name: vllm-router, version: "0.1.14" } } + - { tp: 8, ep: 8, dp-attn: true, kv-offloading: dram, kv-offload-backend: { name: vllm-simple, version: "904e4ec" }, conc-list: [8, 16, 24, 32, 40, 48, 56, 64, 68, 72], router: { name: vllm-router, version: "0.1.14" } } - { tp: 8, ep: 8, dp-attn: true, kv-offloading: dram, kv-offload-backend: { name: mooncake, version: "0.3.11.post1" }, conc-list: [8, 16, 24, 32, 40, 48, 56, 64, 68, 72], router: { name: vllm-router, version: "0.1.14" } } dsv4-fp4-b200-trt: @@ -3227,8 +3227,9 @@ dsv4-fp4-b300-vllm-agentic: - dram-utilization: 0.80 search-space: # Preserve the previous GPU-resident TP4 search space on the new image. + - { tp: 8, kv-offloading: none, conc-list: [1, 2, 4] } - { tp: 4, kv-offloading: none, conc-list: [1, 2, 4, 6, 8, 16] } - - { tp: 4, ep: 4, dp-attn: true, kv-offloading: dram, kv-offload-backend: { name: vllm-simple }, conc-list: [8, 16, 24, 32, 40, 48, 56, 64, 72], router: { name: vllm-router, version: "0.1.14" } } + - { tp: 4, ep: 4, dp-attn: true, kv-offloading: dram, kv-offload-backend: { name: vllm-simple, version: "904e4ec" }, conc-list: [8, 16, 24, 32, 40, 48, 56, 64, 72], router: { name: vllm-router, version: "0.1.14" } } - { tp: 4, ep: 4, dp-attn: true, kv-offloading: dram, kv-offload-backend: { name: mooncake, version: "0.3.11.post1" }, conc-list: [8, 16, 24, 32, 40, 48, 56, 64, 72], router: { name: vllm-router, version: "0.1.14" } } dsv4-fp4-b300-trt: