Skip to content
Closed
Show file tree
Hide file tree
Changes from all 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
103 changes: 103 additions & 0 deletions benchmarks/benchmark_lib.sh
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,109 @@

# Shared benchmarking utilities for InferenceX

_INFERENCEX_BENCHMARK_LIB_DIR="$(CDPATH= cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"

# Apply an explicit, versioned server-only launch extension. The Python helper
# validates edits/source identity and emits NUL-separated argv without eval.
# An unset request leaves canonical launchers completely unchanged.
agentic_apply_server_launch() {
local framework="$1"
shift
AGENTX_SERVER_COMMAND=("$@")
[[ -n "${AGENTX_LAUNCH_OVERRIDES_FILE:-}" ]] || return 0
local output
: "${AGENTX_SERVER_LAUNCH_FILE:?AgentX launch evidence path is required}"
: "${AGENTX_LAUNCH_OVERRIDES_SHA256:?AgentX launch override hash is required}"
output="$(mktemp "${AGENTX_SERVER_LAUNCH_FILE}.argv.XXXXXX")" || return 1
local rc=0
python3 "${_INFERENCEX_BENCHMARK_LIB_DIR}/../utils/agentic/server_launch.py" \
--framework "$framework" \
--overrides "$AGENTX_LAUNCH_OVERRIDES_FILE" \
--expected-sha256 "$AGENTX_LAUNCH_OVERRIDES_SHA256" \
--evidence "$AGENTX_SERVER_LAUNCH_FILE" \
--output "$output" -- "${AGENTX_SERVER_COMMAND[@]}" || rc=$?
if [[ "$rc" -eq 0 ]]; then
local token
AGENTX_SERVER_COMMAND=()
while IFS= read -r -d '' token; do
AGENTX_SERVER_COMMAND+=("$token")
done < "$output"
fi
rm -f -- "$output"
return "$rc"
}

# Generic custom-model AgentX uses the same canonical replay/aggregation path
# as registered recipes. It never calls the fixed-length benchmark client.
run_generic_agentic_server() {
local framework="$1"
check_env_vars MODEL TP EP_SIZE CONC RESULT_DIR DURATION PRECISION \
AGENTX_NATIVE_CONTEXT_LENGTH AGENTX_MAX_MODEL_LEN AGENTX_MODEL_CONFIG_SHA256
require_agentic_kv_offload_none
if [[ "${AGENTX_CUSTOM_RECIPE:-0}" != "1" || "${FRAMEWORK:-}" != "$framework" ]]; then
echo "ERROR: generic AgentX requires an explicitly resolved custom recipe" >&2
return 1
fi
mkdir -p "$RESULT_DIR"
install_agentic_deps
local model_path="${MODEL_PATH:-$MODEL}"
local model_config
if [[ -d "$model_path" ]]; then
model_config="$model_path/config.json"
elif [[ -n "${MODEL_PATH:-}" ]]; then
echo "ERROR: custom AgentX MODEL_PATH is not an existing directory" >&2
return 1
else
model_config="$("$AIPERF_HF_CLI" download "$MODEL" config.json)" || return $?
fi
python3 "${_INFERENCEX_BENCHMARK_LIB_DIR}/../utils/agentic/custom_model.py" \
--config "$model_config" --expected-sha256 "$AGENTX_MODEL_CONFIG_SHA256" \
--native-context "$AGENTX_NATIVE_CONTEXT_LENGTH" \
--max-context "$AGENTX_MAX_MODEL_LEN" || return $?
# benchmark_lib deliberately clears inherited MAX_MODEL_LEN. Restore only
# the independently verified, fingerprinted custom-model context here.
export MAX_MODEL_LEN="$AGENTX_MAX_MODEL_LEN"
resolve_trace_source
local dtype
case "$PRECISION" in
bf16|bfloat16) dtype=bfloat16 ;;
fp16|float16) dtype=float16 ;;
fp32|float32) dtype=float32 ;;
auto|fp8|fp4|mxfp4) dtype=auto ;;
*) echo "ERROR: unsupported custom AgentX precision $PRECISION" >&2; return 1 ;;
esac
local -a server_command
if [[ "$framework" == "sglang" ]]; then
server_command=(python3 -m sglang.launch_server
--model-path "$model_path" --served-model-name "$MODEL"
--host 0.0.0.0 --port "$PORT" --trust-remote-code
--tp "$TP" --ep-size "$EP_SIZE" --dtype "$dtype"
--context-length "$MAX_MODEL_LEN" --enable-metrics)
elif [[ "$framework" == "vllm" ]]; then
server_command=(vllm serve "$model_path" --served-model-name "$MODEL"
--host 0.0.0.0 --port "$PORT" --trust-remote-code
--tensor-parallel-size "$TP" --dtype "$dtype"
--max-model-len "$MAX_MODEL_LEN" --disable-log-requests)
if [[ "$EP_SIZE" != "1" ]]; then
server_command+=(--enable-expert-parallel)
fi
else
echo "ERROR: unsupported generic AgentX framework $framework" >&2
return 1
fi
agentic_apply_server_launch "$framework" "${server_command[@]}" || return $?
server_command=("${AGENTX_SERVER_COMMAND[@]}")
write_command "$RESULT_DIR/server_command.txt" "${server_command[@]}"
SERVER_LOG="$RESULT_DIR/server.log"
"${server_command[@]}" > "$SERVER_LOG" 2>&1 &
SERVER_PID=$!
trap 'kill "$SERVER_PID" 2>/dev/null || true; wait "$SERVER_PID" 2>/dev/null || true' EXIT
wait_for_server_ready --port "$PORT" --server-log "$SERVER_LOG" --server-pid "$SERVER_PID"
build_replay_cmd "$RESULT_DIR"
REPLAY_CMD+=" --server-metrics http://localhost:$PORT/metrics"
run_agentic_replay_and_write_outputs "$RESULT_DIR"
}

# Keep Python bytecode out of the mounted workspace. Benchmark jobs often run as
# root inside containers, and root-owned cache directories break future checkout
# cleanup on self-hosted runners.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,9 @@ SGLANG_CMD=(
--enable-metrics
)

agentic_apply_server_launch sglang "${SGLANG_CMD[@]}"
SGLANG_CMD=("${AGENTX_SERVER_COMMAND[@]}")

printf '%q ' "${SGLANG_CMD[@]}" | tee "$RESULT_DIR/sglang_command.txt"
printf '\n' | tee -a "$RESULT_DIR/sglang_command.txt"

Expand Down
3 changes: 3 additions & 0 deletions benchmarks/single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh
Original file line number Diff line number Diff line change
Expand Up @@ -422,6 +422,9 @@ VLLM_CMD=(

# (srok), not yet
#--attention_config.use_fp4_indexer_cache=True
agentic_apply_server_launch vllm "${VLLM_CMD[@]}"
VLLM_CMD=("${AGENTX_SERVER_COMMAND[@]}")

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 &
Expand Down
6 changes: 6 additions & 0 deletions benchmarks/single_node/agentic/generic_sglang.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/usr/bin/env bash
set -eo pipefail

SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
source "$SCRIPT_DIR/../../benchmark_lib.sh"
run_generic_agentic_server sglang
6 changes: 6 additions & 0 deletions benchmarks/single_node/agentic/generic_vllm.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#!/usr/bin/env bash
set -eo pipefail

SCRIPT_DIR="$(CDPATH= cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
source "$SCRIPT_DIR/../../benchmark_lib.sh"
run_generic_agentic_server vllm
Original file line number Diff line number Diff line change
Expand Up @@ -238,6 +238,9 @@ SGLANG_CMD=(
--enable-metrics
)

agentic_apply_server_launch sglang "${SGLANG_CMD[@]}"
SGLANG_CMD=("${AGENTX_SERVER_COMMAND[@]}")

printf '%q ' "${SGLANG_CMD[@]}" | tee "$RESULT_DIR/sglang_command.txt"
printf '\n' | tee -a "$RESULT_DIR/sglang_command.txt"

Expand Down
3 changes: 3 additions & 0 deletions benchmarks/single_node/agentic/glm5.2_fp8_mi325x_mtp.sh
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,9 @@ SGLANG_CMD=(
--enable-cache-report
)

agentic_apply_server_launch sglang "${SGLANG_CMD[@]}"
SGLANG_CMD=("${AGENTX_SERVER_COMMAND[@]}")

printf '%q ' "${SGLANG_CMD[@]}" | tee "$RESULT_DIR/sglang_command.txt"
printf '\n' | tee -a "$RESULT_DIR/sglang_command.txt"

Expand Down
3 changes: 3 additions & 0 deletions benchmarks/single_node/agentic/kimik3_fp4_mi355x_mtp.sh
Original file line number Diff line number Diff line change
Expand Up @@ -206,6 +206,9 @@ VLLM_CMD=(
"${SPEC_ARGS[@]}"
"${OFFLOAD_ARGS[@]}"
)
agentic_apply_server_launch vllm "${VLLM_CMD[@]}"
VLLM_CMD=("${AGENTX_SERVER_COMMAND[@]}")

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 &
Expand Down
3 changes: 3 additions & 0 deletions benchmarks/single_node/agentic/minimaxm3_fp4_mi355x_mtp.sh
Original file line number Diff line number Diff line change
Expand Up @@ -224,6 +224,9 @@ VLLM_CMD=(
--speculative-config "$SPEC_CONFIG"
"${OFFLOAD_ARGS[@]}"
)
agentic_apply_server_launch vllm "${VLLM_CMD[@]}"
VLLM_CMD=("${AGENTX_SERVER_COMMAND[@]}")

write_command "$RESULT_DIR/server_command.txt" "${VLLM_CMD[@]}"
"${VLLM_CMD[@]}" > "$SERVER_LOG" 2>&1 &
SERVER_PID=$!
Expand Down
3 changes: 3 additions & 0 deletions benchmarks/single_node/agentic/minimaxm3_fp8_mi300x_mtp.sh
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,9 @@ VLLM_CMD=(
--speculative-config "$SPEC_CONFIG"
"${OFFLOAD_ARGS[@]}"
)
agentic_apply_server_launch vllm "${VLLM_CMD[@]}"
VLLM_CMD=("${AGENTX_SERVER_COMMAND[@]}")

write_command "$RESULT_DIR/server_command.txt" "${VLLM_CMD[@]}"
"${VLLM_CMD[@]}" > "$SERVER_LOG" 2>&1 &
SERVER_PID=$!
Expand Down
3 changes: 3 additions & 0 deletions benchmarks/single_node/agentic/minimaxm3_fp8_mi325x_mtp.sh
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,9 @@ VLLM_CMD=(
--trust-remote-code
--stream-interval 20
)
agentic_apply_server_launch vllm "${VLLM_CMD[@]}"
VLLM_CMD=("${AGENTX_SERVER_COMMAND[@]}")

write_command "$RESULT_DIR/server_command.txt" "${VLLM_CMD[@]}"
"${VLLM_CMD[@]}" > "$SERVER_LOG" 2>&1 &
SERVER_PID=$!
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,9 @@ SGLANG_CMD=(
--enable-cache-report
)

agentic_apply_server_launch sglang "${SGLANG_CMD[@]}"
SGLANG_CMD=("${AGENTX_SERVER_COMMAND[@]}")

printf '%q ' "${SGLANG_CMD[@]}" | tee "$RESULT_DIR/sglang_command.txt"
printf '\n' | tee -a "$RESULT_DIR/sglang_command.txt"
"${SGLANG_CMD[@]}" > "$SERVER_LOG" 2>&1 &
Expand Down
3 changes: 3 additions & 0 deletions benchmarks/single_node/agentic/qwen3.5_fp8_mi300x_mtp.sh
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,9 @@ SGLANG_CMD=(
--enable-cache-report
)

agentic_apply_server_launch sglang "${SGLANG_CMD[@]}"
SGLANG_CMD=("${AGENTX_SERVER_COMMAND[@]}")

write_command "$RESULT_DIR/sglang_command.txt" "${SGLANG_CMD[@]}"
"${SGLANG_CMD[@]}" > "$SERVER_LOG" 2>&1 &
SERVER_PID=$!
Expand Down
3 changes: 3 additions & 0 deletions benchmarks/single_node/agentic/qwen3.5_fp8_mi325x_mtp.sh
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,9 @@ SGLANG_CMD=(
--enable-cache-report
)

agentic_apply_server_launch sglang "${SGLANG_CMD[@]}"
SGLANG_CMD=("${AGENTX_SERVER_COMMAND[@]}")

write_command "$RESULT_DIR/sglang_command.txt" "${SGLANG_CMD[@]}"
"${SGLANG_CMD[@]}" > "$SERVER_LOG" 2>&1 &
SERVER_PID=$!
Expand Down
137 changes: 137 additions & 0 deletions configs/agentx-launchers.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,137 @@
{
"version": 1,
"recipes": {
"qwen3.5-fp8-mi325x-sglang-agentic-mtp": {
"framework": "sglang",
"runner_type": "mi325x",
"benchmark_script": "single_node/agentic/qwen3.5_fp8_mi325x_mtp.sh",
"launch_overrides_version": 1,
"model": "Qwen/Qwen3.5-397B-A17B-FP8",
"precision": "fp8"
},
"qwen3.5-fp4-mi355x-sglang-agentic-mtp": {
"framework": "sglang",
"runner_type": "mi355x",
"benchmark_script": "single_node/agentic/qwen3.5_fp4_mi355x_sglang_mtp.sh",
"launch_overrides_version": 1,
"model": "amd/Qwen3.5-397B-A17B-MXFP4",
"precision": "fp4"
},
"qwen3.5-fp8-mi300x-sglang-agentic-mtp": {
"framework": "sglang",
"runner_type": "mi300x",
"benchmark_script": "single_node/agentic/qwen3.5_fp8_mi300x_mtp.sh",
"launch_overrides_version": 1,
"model": "Qwen/Qwen3.5-397B-A17B-FP8",
"precision": "fp8"
},
"kimik3-fp4-mi355x-vllm-agentic-mtp": {
"framework": "vllm",
"runner_type": "mi355x",
"benchmark_script": "single_node/agentic/kimik3_fp4_mi355x_mtp.sh",
"launch_overrides_version": 1,
"model": "moonshotai/Kimi-K3",
"precision": "fp4"
},
"dsv4-fp4-mi355x-vllm-agentic-mtp": {
"framework": "vllm",
"runner_type": "mi355x",
"benchmark_script": "single_node/agentic/dsv4_fp4_mi355x_vllm_mtp.sh",
"launch_overrides_version": 1,
"model": "deepseek-ai/DeepSeek-V4-Pro",
"precision": "fp4"
},
"minimaxm3-fp8-mi300x-vllm-agentic-mtp": {
"framework": "vllm",
"runner_type": "mi300x",
"benchmark_script": "single_node/agentic/minimaxm3_fp8_mi300x_mtp.sh",
"launch_overrides_version": 1,
"model": "MiniMaxAI/MiniMax-M3-MXFP8",
"precision": "fp8"
},
"glm5.2-fp8-mi325x-sglang-agentic-mtp": {
"framework": "sglang",
"runner_type": "mi325x",
"benchmark_script": "single_node/agentic/glm5.2_fp8_mi325x_mtp.sh",
"launch_overrides_version": 1,
"model": "zai-org/GLM-5.2-FP8",
"precision": "fp8"
},
"minimaxm3-fp8-mi325x-vllm-agentic-mtp": {
"framework": "vllm",
"runner_type": "mi325x",
"benchmark_script": "single_node/agentic/minimaxm3_fp8_mi325x_mtp.sh",
"launch_overrides_version": 1,
"model": "MiniMaxAI/MiniMax-M3-MXFP8",
"precision": "fp8"
},
"minimaxm3-fp4-mi355x-vllm-agentic-mtp": {
"framework": "vllm",
"runner_type": "mi355x",
"benchmark_script": "single_node/agentic/minimaxm3_fp4_mi355x_mtp.sh",
"launch_overrides_version": 1,
"model": "amd/MiniMax-M3-MXFP4",
"precision": "fp4"
},
"glm5.2-fp4-mi355x-sglang-agentic-mtp": {
"framework": "sglang",
"runner_type": "mi355x",
"benchmark_script": "single_node/agentic/glm5.2_fp4_mi355x_sglang_mtp.sh",
"launch_overrides_version": 1,
"model": "amd/GLM-5.2-MXFP4",
"precision": "fp4"
},
"dsv4-fp4-mi355x-sglang-agentic-mtp": {
"framework": "sglang",
"runner_type": "mi355x",
"benchmark_script": "single_node/agentic/dsv4_fp4_mi355x_sglang_mtp.sh",
"launch_overrides_version": 1,
"model": "deepseek-ai/DeepSeek-V4-Pro",
"precision": "fp4"
}
},
"generic": {
"custom-sglang-mi300x": {
"framework": "sglang",
"runner_type": "mi300x",
"benchmark_script": "single_node/agentic/generic_sglang.sh",
"launch_overrides_version": 1,
"max_gpus": 8
},
"custom-sglang-mi325x": {
"framework": "sglang",
"runner_type": "mi325x",
"benchmark_script": "single_node/agentic/generic_sglang.sh",
"launch_overrides_version": 1,
"max_gpus": 8
},
"custom-sglang-mi355x": {
"framework": "sglang",
"runner_type": "mi355x",
"benchmark_script": "single_node/agentic/generic_sglang.sh",
"launch_overrides_version": 1,
"max_gpus": 8
},
"custom-vllm-mi300x": {
"framework": "vllm",
"runner_type": "mi300x",
"benchmark_script": "single_node/agentic/generic_vllm.sh",
"launch_overrides_version": 1,
"max_gpus": 8
},
"custom-vllm-mi325x": {
"framework": "vllm",
"runner_type": "mi325x",
"benchmark_script": "single_node/agentic/generic_vllm.sh",
"launch_overrides_version": 1,
"max_gpus": 8
},
"custom-vllm-mi355x": {
"framework": "vllm",
"runner_type": "mi355x",
"benchmark_script": "single_node/agentic/generic_vllm.sh",
"launch_overrides_version": 1,
"max_gpus": 8
}
}
}
Loading