Skip to content
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
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
41 changes: 30 additions & 11 deletions benchmarks/single_node/fixed_seq_len/dsv4_fp4_mi355x_atom_mtp.sh
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#!/usr/bin/env bash

source "$(dirname "$0")/../benchmark_lib.sh"
source "$(dirname "$0")/../../benchmark_lib.sh"

check_env_vars \
MODEL \
Expand All @@ -26,12 +26,29 @@ PARALLEL_ARGS=(-tp "$TP") #TP
if [ "$DP_ATTENTION" = "true" ]; then
if [ "$EP_SIZE" -gt 1 ]; then #DP+EP
PARALLEL_ARGS=(-tp "$TP" --enable-expert-parallel --enable-dp-attention )
else #DP+TP
else #DPA+TP
PARALLEL_ARGS=(-tp "$TP" --enable-dp-attention )
fi
fi
fi

# MTP speculative decoding (ATOM self-draft). NO --enable-tbo: TBO is incompatible
# with MTP in ATOM (UBatchWrapper sets spec_decode_metadata=None; official
# models.json DPA MTP3 has no --enable-tbo).
SPEC_ARGS=(--method mtp --num-speculative-tokens 3)

# max_req=conc for dp-on cells (dp-attention keeps a full KV pool per rank, and MTP
# reserves q=num_speculative_tokens+1 per request, so the large default max_num_seqs
# OOMs) and for conc>=64. dp-off low conc uses the ATOM default.
if [ "$DP_ATTENTION" = "true" ] || [ "$CONC" -ge 64 ]; then
PARALLEL_ARGS+=(--max-num-seqs "$CONC")
fi

SPEC_ARGS=(--method mtp --num-speculative-tokens 3 )
BENCHMARK_MAX_MODEL_LEN="$MAX_MODEL_LEN"

if [ "${EVAL_ONLY}" = "true" ]; then
EVAL_MAX_MODEL_LEN=$(compute_eval_context_length "$MODEL" "$BENCHMARK_MAX_MODEL_LEN")
export EVAL_MAX_MODEL_LEN
fi

# Start GPU monitoring (power, temperature, clocks every second)
start_gpu_monitor
Expand All @@ -40,26 +57,28 @@ set -x
export ATOM_DISABLE_MMAP=true
export AITER_BF16_FP8_MOE_BOUND=0
export ATOM_MOE_GU_ITLV=1

python3 -m atom.entrypoints.openai_server \
--model $MODEL \
--server-port $PORT \
"${PARALLEL_ARGS[@]}" \
"${SPEC_ARGS[@]}" \
--kv_cache_dtype fp8 \
--trust-remote-code \
> $SERVER_LOG 2>&1 &
--no-enable_prefix_caching \
> "$SERVER_LOG" 2>&1 &

SERVER_PID=$!

# Wait for server to be ready
wait_for_server_ready --port "$PORT" --server-log "$SERVER_LOG" --server-pid "$SERVER_PID"

# --dsv4 routes prompts through encoding_dsv4.py (PR #1153), which emits the
# <bos><User>...<Assistant><think> framing DeepSeek-V4-Pro expects. The DSv4-Pro
# tokenizer ships without a jinja chat_template, so plain --use-chat-template
# would crash; --dsv4 sidesteps that and satisfies the AGENTS.md rule that all
# MTP scripts must benchmark against chat-formatted inputs (EAGLE acceptance
# silently regresses on raw random tokens).
# --dsv4: InferenceX's bench (utils/bench_serving/benchmark_serving.py) uses the
# DeepSeek-V4 chat encoder (encoding_dsv4.py) instead of the tokenizer's jinja
# template. DSv4-Pro has NO jinja chat_template, so a plain --use-chat-template
# produces empty/broken prompts (bench yields no result). --dsv4 implies
# --use-chat-template. Chat-formatted inputs are required for MTP: EAGLE/MTP
# acceptance silently regresses on raw random tokens (AGENTS.md).
run_benchmark_serving \
--model "$MODEL" \
--port "$PORT" \
Expand Down
8 changes: 6 additions & 2 deletions configs/amd-master.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -1425,7 +1425,7 @@ dsv4-fp4-mi355x-atom:
- { tp: 8, ep: 1, dp-attn: true, conc-start: 128, conc-end: 2048 }

dsv4-fp4-mi355x-atom-mtp:
image: rocm/atom:rocm7.2.4_ubuntu24.04_py3.12_pytorch_release_2.10.0_atom0.1.3
image: rocm/atom-dev:nightly_202607231538
model: deepseek-ai/DeepSeek-V4-Pro
model-prefix: dsv4
runner: mi355x
Expand All @@ -1437,7 +1437,11 @@ dsv4-fp4-mi355x-atom-mtp:
- isl: 8192
osl: 1024
search-space:
- { tp: 8, ep: 1, conc-start: 1, conc-end: 1024, spec-decoding: mtp }
# Aligns ATOM official DSv4 MTP (models.json): MTP3 dp-off at low-mid conc,
# DPA MTP3 (dp-attn) at mid-high conc. No TBO — TBO is incompatible with MTP
# (ATOM UBatchWrapper drops spec_decode_metadata; DPA MTP3 has no --enable-tbo).
- { tp: 8, ep: 1, dp-attn: false, conc-start: 4, conc-end: 256, spec-decoding: mtp }
- { tp: 8, ep: 1, dp-attn: true, conc-start: 64, conc-end: 1024, spec-decoding: mtp }

qwen3.5-bf16-mi325x-sglang-mtp:
image: lmsysorg/sglang:v0.5.12-rocm720-mi30x
Expand Down
6 changes: 6 additions & 0 deletions perf-changelog.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5086,6 +5086,12 @@
- "Bump SGLang container image from lmsysorg/sglang:v0.5.12-cu130 to lmsysorg/sglang:v0.5.15.post1-cu130 (https://github.com/sgl-project/sglang/releases/tag/v0.5.15.post1)"
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2313

- config-keys:
- dsv4-fp4-mi355x-atom-mtp
description:
- "Re-sweep dsv4-fp4-mi355x-atom-mtp on latest atom-dev nightly (nightly_202607231538, was atom0.1.3 release). Align ATOM official MTP config (models.json): MTP3 dp-off conc 4-256 + DPA MTP3 (dp-attn) conc 64-1024; no TBO (incompatible with MTP in ATOM). max_num_seqs=conc on dp-on cells and conc>=64 to avoid OOM. bench keeps --dsv4 (InferenceX bench uses encoding_dsv4.py; DSv4-Pro has no jinja chat_template). Fixed benchmark_lib source path (../ -> ../../)."
pr-link: https://github.com/SemiAnalysisAI/InferenceX/pull/2345

- config-keys:
- dsv4-fp4-mi355x-sglang-disagg-mtp
description:
Expand Down