From 0e0f24ebb2c1cc0bca370da21db3d2756020fbd1 Mon Sep 17 00:00:00 2001 From: Cam Quilici Date: Thu, 24 Sep 2026 16:17:24 -0500 Subject: [PATCH 1/7] refactor(amd): share one fixed-sequence client across multi-node recipes The four MI355X multi-node recipes each inlined the same benchmark loop. Move it to benchmarks/multi_node/srt_fixed_sequence.sh, like the single-node client; recipes set only the model, tokenizer, client backend and chat template in benchmark.env. --- .../dsr1/mi355x/fp4-disagg-fixed-seq.yaml | 58 ++++--------------- .../dsr1/mi355x/fp8-disagg-fixed-seq.yaml | 49 +++------------- .../disagg-1p1d-tp4p-tp8d-fixed-seq.yaml | 39 ++----------- .../disagg-1p1d-tp8-mxfp4-fixed-seq.yaml | 39 ++----------- benchmarks/multi_node/srt_fixed_sequence.sh | 55 ++++++++++++++++++ 5 files changed, 84 insertions(+), 156 deletions(-) create mode 100644 benchmarks/multi_node/srt_fixed_sequence.sh diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/dsr1/mi355x/fp4-disagg-fixed-seq.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/dsr1/mi355x/fp4-disagg-fixed-seq.yaml index 5189e3f052..416e869da0 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/dsr1/mi355x/fp4-disagg-fixed-seq.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/dsr1/mi355x/fp4-disagg-fixed-seq.yaml @@ -157,50 +157,16 @@ base: interval_seconds: 5 benchmark: type: custom - command: | - set -eo pipefail - source /infmax-workspace/benchmarks/benchmark_lib.sh --validation-only - check_env_vars SRT_FRONTEND_HOST SRT_FRONTEND_PORT CONC_LIST PREFILL_NUM_WORKERS PREFILL_TP DECODE_NUM_WORKERS DECODE_TP USE_CHAT_TEMPLATE BENCHMARK_VARIANT - result_dir=/logs/sa-bench_isl_8192_osl_1024 - mkdir -p "${result_dir}" - ctx=$((PREFILL_NUM_WORKERS * PREFILL_TP)) - gen=$((DECODE_NUM_WORKERS * DECODE_TP)) - chat_args=() - if [[ "${USE_CHAT_TEMPLATE}" == "1" ]]; then - chat_args+=(--use-chat-template) - fi - for concurrency in ${CONC_LIST}; do - num_prompts=$((concurrency * 10)) - if (( num_prompts < 16 )); then num_prompts=16; fi - python3 /infmax-workspace/utils/bench_serving/benchmark_serving.py \ - --backend openai \ - --base-url "http://${SRT_FRONTEND_HOST}:${SRT_FRONTEND_PORT}" \ - --endpoint /v1/completions \ - --model amd/DeepSeek-R1-0528-MXFP4-v2 \ - --tokenizer /model \ - --trust-remote-code \ - --dataset-name random \ - --random-input-len 8192 \ - --random-output-len 1024 \ - --random-range-ratio 1.0 \ - --random-num-workers 1 \ - "${chat_args[@]}" \ - --num-warmups "$((concurrency * 2))" \ - --num-prompts "${num_prompts}" \ - --max-concurrency "${concurrency}" \ - --request-rate inf \ - --ignore-eos \ - --disable-tqdm \ - --save-result \ - --result-dir "${result_dir}" \ - --result-filename "results_concurrency_${concurrency}_gpus_$((ctx + gen))_ctx_${ctx}_gen_${gen}.json" - done + command: bash /infmax-workspace/benchmarks/multi_node/srt_fixed_sequence.sh --trust-remote-code env: + MODEL: amd/DeepSeek-R1-0528-MXFP4-v2 + TOKENIZER: /model + ISL: '8192' + OSL: '1024' HF_HOME: /hf_hub_cache HF_HUB_CACHE: /hf_hub_cache/hub HUGGINGFACE_HUB_CACHE: /hf_hub_cache/hub BENCHMARK_VARIANT: stp-1p1d-tp8 - USE_CHAT_TEMPLATE: '0' override_stp_1p1d_tp8: name: mi355x-dsr1-fp4-stp-1p1d-tp8-fixed-seq benchmark: @@ -395,7 +361,7 @@ override_mtp3_1p1d_tp8: benchmark: env: BENCHMARK_VARIANT: mtp3-1p1d-tp8 - USE_CHAT_TEMPLATE: '1' + USE_CHAT_TEMPLATE: 'true' override_mtp3_1p2d_tp8_wide: name: mi355x-dsr1-fp4-mtp3-1p2d-tp8-wide-fixed-seq resources: {} @@ -425,7 +391,7 @@ override_mtp3_1p2d_tp8_wide: benchmark: env: BENCHMARK_VARIANT: mtp3-1p2d-tp8-wide - USE_CHAT_TEMPLATE: '1' + USE_CHAT_TEMPLATE: 'true' override_mtp3_1p2d_tp8_narrow: name: mi355x-dsr1-fp4-mtp3-1p2d-tp8-narrow-fixed-seq resources: {} @@ -455,7 +421,7 @@ override_mtp3_1p2d_tp8_narrow: benchmark: env: BENCHMARK_VARIANT: mtp3-1p2d-tp8-narrow - USE_CHAT_TEMPLATE: '1' + USE_CHAT_TEMPLATE: 'true' override_mtp2_1p2d_tp8: name: mi355x-dsr1-fp4-mtp2-1p2d-tp8-fixed-seq resources: {} @@ -485,7 +451,7 @@ override_mtp2_1p2d_tp8: benchmark: env: BENCHMARK_VARIANT: mtp2-1p2d-tp8 - USE_CHAT_TEMPLATE: '1' + USE_CHAT_TEMPLATE: 'true' override_mtp3_1p1d_dep8: name: mi355x-dsr1-fp4-mtp3-1p1d-dep8-fixed-seq roles: @@ -563,7 +529,7 @@ override_mtp3_1p1d_dep8: benchmark: env: BENCHMARK_VARIANT: mtp3-1p1d-dep8 - USE_CHAT_TEMPLATE: '1' + USE_CHAT_TEMPLATE: 'true' override_mtp1_1p1d_dep8: name: mi355x-dsr1-fp4-mtp1-1p1d-dep8-fixed-seq roles: @@ -641,7 +607,7 @@ override_mtp1_1p1d_dep8: benchmark: env: BENCHMARK_VARIANT: mtp1-1p1d-dep8 - USE_CHAT_TEMPLATE: '1' + USE_CHAT_TEMPLATE: 'true' override_mtp1_2p1d_dep8: name: mi355x-dsr1-fp4-mtp1-2p1d-dep8-fixed-seq resources: {} @@ -724,4 +690,4 @@ override_mtp1_2p1d_dep8: benchmark: env: BENCHMARK_VARIANT: mtp1-2p1d-dep8 - USE_CHAT_TEMPLATE: '1' + USE_CHAT_TEMPLATE: 'true' diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/dsr1/mi355x/fp8-disagg-fixed-seq.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/dsr1/mi355x/fp8-disagg-fixed-seq.yaml index cd3d9d16f0..3d2b6438d6 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/dsr1/mi355x/fp8-disagg-fixed-seq.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/dsr1/mi355x/fp8-disagg-fixed-seq.yaml @@ -147,50 +147,15 @@ base: interval_seconds: 5 benchmark: type: custom - command: | - set -eo pipefail - source /infmax-workspace/benchmarks/benchmark_lib.sh --validation-only - check_env_vars SRT_FRONTEND_HOST SRT_FRONTEND_PORT CONC_LIST PREFILL_NUM_WORKERS PREFILL_TP DECODE_NUM_WORKERS DECODE_TP USE_CHAT_TEMPLATE BENCHMARK_VARIANT - result_dir=/logs/sa-bench_isl_8192_osl_1024 - mkdir -p "${result_dir}" - ctx=$((PREFILL_NUM_WORKERS * PREFILL_TP)) - gen=$((DECODE_NUM_WORKERS * DECODE_TP)) - chat_args=() - if [[ "${USE_CHAT_TEMPLATE}" == "1" ]]; then - chat_args+=(--use-chat-template) - fi - for concurrency in ${CONC_LIST}; do - num_prompts=$((concurrency * 10)) - if (( num_prompts < 16 )); then num_prompts=16; fi - python3 /infmax-workspace/utils/bench_serving/benchmark_serving.py \ - --backend openai \ - --base-url "http://${SRT_FRONTEND_HOST}:${SRT_FRONTEND_PORT}" \ - --endpoint /v1/completions \ - --model deepseek-ai/DeepSeek-R1-0528 \ - --tokenizer deepseek-ai/DeepSeek-R1-0528 \ - --trust-remote-code \ - --dataset-name random \ - --random-input-len 8192 \ - --random-output-len 1024 \ - --random-range-ratio 1.0 \ - --random-num-workers 1 \ - "${chat_args[@]}" \ - --num-warmups "$((concurrency * 2))" \ - --num-prompts "${num_prompts}" \ - --max-concurrency "${concurrency}" \ - --request-rate inf \ - --ignore-eos \ - --disable-tqdm \ - --save-result \ - --result-dir "${result_dir}" \ - --result-filename "results_concurrency_${concurrency}_gpus_$((ctx + gen))_ctx_${ctx}_gen_${gen}.json" - done + command: bash /infmax-workspace/benchmarks/multi_node/srt_fixed_sequence.sh --trust-remote-code env: + MODEL: deepseek-ai/DeepSeek-R1-0528 + ISL: '8192' + OSL: '1024' HF_HOME: /hf_hub_cache HF_HUB_CACHE: /hf_hub_cache/hub HUGGINGFACE_HUB_CACHE: /hf_hub_cache/hub BENCHMARK_VARIANT: base - USE_CHAT_TEMPLATE: '0' override_stp_2p1d_dep8: name: mi355x-dsr1-fp8-stp-2p1d-dep8-fixed-seq resources: {} @@ -327,7 +292,7 @@ override_mtp_2p1d_dep8: benchmark: env: BENCHMARK_VARIANT: mtp1-2p1d-dep8 - USE_CHAT_TEMPLATE: '1' + USE_CHAT_TEMPLATE: 'true' override_mtp_1p2d_tp8: name: mi355x-dsr1-fp8-mtp2-1p2d-tp8-fixed-seq resources: {} @@ -353,7 +318,7 @@ override_mtp_1p2d_tp8: benchmark: env: BENCHMARK_VARIANT: mtp2-1p2d-tp8 - USE_CHAT_TEMPLATE: '1' + USE_CHAT_TEMPLATE: 'true' override_mtp_1p1d_tp4_tp8: name: mi355x-dsr1-fp8-mtp2-1p1d-tp4-tp8-fixed-seq resources: {} @@ -382,4 +347,4 @@ override_mtp_1p1d_tp4_tp8: benchmark: env: BENCHMARK_VARIANT: mtp2-1p1d-tp4-tp8 - USE_CHAT_TEMPLATE: '1' + USE_CHAT_TEMPLATE: 'true' diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/qwen3.5/mi355x/disagg-1p1d-tp4p-tp8d-fixed-seq.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/qwen3.5/mi355x/disagg-1p1d-tp4p-tp8d-fixed-seq.yaml index 9f05cdddfa..95f9b8efe0 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/qwen3.5/mi355x/disagg-1p1d-tp4p-tp8d-fixed-seq.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/qwen3.5/mi355x/disagg-1p1d-tp4p-tp8d-fixed-seq.yaml @@ -114,41 +114,12 @@ health_check: benchmark: type: custom - command: | - set -eo pipefail - source /infmax-workspace/benchmarks/benchmark_lib.sh --validation-only - check_env_vars SRT_FRONTEND_HOST SRT_FRONTEND_PORT CONC_LIST PREFILL_NUM_WORKERS PREFILL_TP DECODE_NUM_WORKERS DECODE_TP - result_dir=/logs/sa-bench_isl_8192_osl_1024 - mkdir -p "${result_dir}" - ctx=$((PREFILL_NUM_WORKERS * PREFILL_TP)) - gen=$((DECODE_NUM_WORKERS * DECODE_TP)) - for concurrency in ${CONC_LIST}; do - num_prompts=$((concurrency * 10)) - if ((num_prompts < 16)); then - num_prompts=16 - fi - python3 /infmax-workspace/utils/bench_serving/benchmark_serving.py \ - --backend openai-chat \ - --base-url "http://${SRT_FRONTEND_HOST}:${SRT_FRONTEND_PORT}" \ - --endpoint /v1/chat/completions \ - --model Qwen/Qwen3.5-397B-A17B-FP8 \ - --tokenizer Qwen/Qwen3.5-397B-A17B-FP8 \ - --dataset-name random \ - --random-input-len 8192 \ - --random-output-len 1024 \ - --random-range-ratio 1.0 \ - --random-num-workers 1 \ - --num-warmups "$((concurrency * 2))" \ - --num-prompts "${num_prompts}" \ - --max-concurrency "${concurrency}" \ - --request-rate inf \ - --ignore-eos \ - --disable-tqdm \ - --save-result \ - --result-dir "${result_dir}" \ - --result-filename "results_concurrency_${concurrency}_gpus_$((ctx + gen))_ctx_${ctx}_gen_${gen}.json" - done + command: bash /infmax-workspace/benchmarks/multi_node/srt_fixed_sequence.sh env: + MODEL: Qwen/Qwen3.5-397B-A17B-FP8 + CLIENT_BACKEND: openai-chat + ISL: '8192' + OSL: '1024' HF_HOME: /hf_hub_cache HF_HUB_CACHE: /hf_hub_cache/hub HUGGINGFACE_HUB_CACHE: /hf_hub_cache/hub diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/qwen3.5/mi355x/disagg-1p1d-tp8-mxfp4-fixed-seq.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/qwen3.5/mi355x/disagg-1p1d-tp8-mxfp4-fixed-seq.yaml index 8693f14fc1..3f7df18566 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/qwen3.5/mi355x/disagg-1p1d-tp8-mxfp4-fixed-seq.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/qwen3.5/mi355x/disagg-1p1d-tp8-mxfp4-fixed-seq.yaml @@ -108,41 +108,12 @@ health_check: benchmark: type: custom - command: | - set -eo pipefail - source /infmax-workspace/benchmarks/benchmark_lib.sh --validation-only - check_env_vars SRT_FRONTEND_HOST SRT_FRONTEND_PORT CONC_LIST PREFILL_NUM_WORKERS PREFILL_TP DECODE_NUM_WORKERS DECODE_TP - result_dir=/logs/sa-bench_isl_8192_osl_1024 - mkdir -p "${result_dir}" - ctx=$((PREFILL_NUM_WORKERS * PREFILL_TP)) - gen=$((DECODE_NUM_WORKERS * DECODE_TP)) - for concurrency in ${CONC_LIST}; do - num_prompts=$((concurrency * 10)) - if ((num_prompts < 16)); then - num_prompts=16 - fi - python3 /infmax-workspace/utils/bench_serving/benchmark_serving.py \ - --backend openai-chat \ - --base-url "http://${SRT_FRONTEND_HOST}:${SRT_FRONTEND_PORT}" \ - --endpoint /v1/chat/completions \ - --model amd/Qwen3.5-397B-A17B-MXFP4 \ - --tokenizer amd/Qwen3.5-397B-A17B-MXFP4 \ - --dataset-name random \ - --random-input-len 8192 \ - --random-output-len 1024 \ - --random-range-ratio 1.0 \ - --random-num-workers 1 \ - --num-warmups "$((concurrency * 2))" \ - --num-prompts "${num_prompts}" \ - --max-concurrency "${concurrency}" \ - --request-rate inf \ - --ignore-eos \ - --disable-tqdm \ - --save-result \ - --result-dir "${result_dir}" \ - --result-filename "results_concurrency_${concurrency}_gpus_$((ctx + gen))_ctx_${ctx}_gen_${gen}.json" - done + command: bash /infmax-workspace/benchmarks/multi_node/srt_fixed_sequence.sh env: + MODEL: amd/Qwen3.5-397B-A17B-MXFP4 + CLIENT_BACKEND: openai-chat + ISL: '8192' + OSL: '1024' HF_HOME: /hf_hub_cache HF_HUB_CACHE: /hf_hub_cache/hub HUGGINGFACE_HUB_CACHE: /hf_hub_cache/hub diff --git a/benchmarks/multi_node/srt_fixed_sequence.sh b/benchmarks/multi_node/srt_fixed_sequence.sh new file mode 100644 index 0000000000..bb83dbdc16 --- /dev/null +++ b/benchmarks/multi_node/srt_fixed_sequence.sh @@ -0,0 +1,55 @@ +#!/usr/bin/env bash + +# Fixed-sequence client for multi-node srt-slurm recipes: SRT owns the servers; +# this runs the InferenceX client once per concurrency and writes the result +# layout that copy_fixed_sequence_results collects. +set -eo pipefail +source "$(dirname "${BASH_SOURCE[0]}")/../benchmark_lib.sh" --validation-only +check_env_vars MODEL ISL OSL SRT_FRONTEND_HOST SRT_FRONTEND_PORT CONC_LIST \ + PREFILL_NUM_WORKERS PREFILL_TP DECODE_NUM_WORKERS DECODE_TP +CLIENT_ARGS=() +for argument in "$@"; do + case "$argument" in + --trust-remote-code) CLIENT_ARGS+=("$argument") ;; + *) echo "ERROR: unsupported fixed-sequence argument: $argument" >&2; exit 1 ;; + esac +done +case "${CLIENT_BACKEND:=openai}" in + openai) endpoint=/v1/completions ;; + openai-chat) endpoint=/v1/chat/completions ;; + *) echo "ERROR: unsupported CLIENT_BACKEND: $CLIENT_BACKEND" >&2; exit 1 ;; +esac +case "${USE_CHAT_TEMPLATE:=false}" in + true) CLIENT_ARGS+=(--use-chat-template) ;; + false) ;; + *) echo "ERROR: USE_CHAT_TEMPLATE must be true or false" >&2; exit 1 ;; +esac + +result_dir="/logs/sa-bench_isl_${ISL}_osl_${OSL}" +mkdir -p "$result_dir" +ctx=$((PREFILL_NUM_WORKERS * PREFILL_TP)) +gen=$((DECODE_NUM_WORKERS * DECODE_TP)) +for concurrency in $CONC_LIST; do + num_prompts=$((concurrency * 10 < 16 ? 16 : concurrency * 10)) + python3 "$(dirname "${BASH_SOURCE[0]}")/../../utils/bench_serving/benchmark_serving.py" \ + --backend "$CLIENT_BACKEND" \ + --base-url "http://${SRT_FRONTEND_HOST}:${SRT_FRONTEND_PORT}" \ + --endpoint "$endpoint" \ + --model "$MODEL" \ + --tokenizer "${TOKENIZER:-$MODEL}" \ + --dataset-name random \ + --random-input-len "$ISL" \ + --random-output-len "$OSL" \ + --random-range-ratio "${RANDOM_RANGE_RATIO:-1.0}" \ + --random-num-workers 1 \ + --num-warmups "$((concurrency * 2))" \ + --num-prompts "$num_prompts" \ + --max-concurrency "$concurrency" \ + --request-rate inf \ + --ignore-eos \ + --disable-tqdm \ + --save-result \ + --result-dir "$result_dir" \ + --result-filename "results_concurrency_${concurrency}_gpus_$((ctx + gen))_ctx_${ctx}_gen_${gen}.json" \ + "${CLIENT_ARGS[@]}" +done From bf0a7a5d0984607539acd36f4d207de5a0c80279 Mon Sep 17 00:00:00 2001 From: Cam Quilici Date: Thu, 24 Sep 2026 16:30:44 -0500 Subject: [PATCH 2/7] feat(srt): standard fixed-sequence client defaults and power windows Default the multi-node client to the repo standard: range ratio 0.8, chat template on, --trust-remote-code, 10x prompts and 2x warmup at request rate inf. Keep the client backend configurable. When srt-slurm exports SRT_MEASUREMENT_WINDOW_DIR, write each concurrency's measured boundary as a custom-benchmark window so power lanes validate without sa-bench. --- .../dsr1/mi355x/fp4-disagg-fixed-seq.yaml | 9 +--- .../dsr1/mi355x/fp8-disagg-fixed-seq.yaml | 5 +-- .../disagg-1p1d-tp4p-tp8d-fixed-seq.yaml | 1 - .../disagg-1p1d-tp8-mxfp4-fixed-seq.yaml | 1 - benchmarks/multi_node/srt_fixed_sequence.sh | 45 ++++++++++++++----- 5 files changed, 35 insertions(+), 26 deletions(-) diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/dsr1/mi355x/fp4-disagg-fixed-seq.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/dsr1/mi355x/fp4-disagg-fixed-seq.yaml index 416e869da0..6365a10b29 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/dsr1/mi355x/fp4-disagg-fixed-seq.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/dsr1/mi355x/fp4-disagg-fixed-seq.yaml @@ -157,7 +157,7 @@ base: interval_seconds: 5 benchmark: type: custom - command: bash /infmax-workspace/benchmarks/multi_node/srt_fixed_sequence.sh --trust-remote-code + command: bash /infmax-workspace/benchmarks/multi_node/srt_fixed_sequence.sh env: MODEL: amd/DeepSeek-R1-0528-MXFP4-v2 TOKENIZER: /model @@ -361,7 +361,6 @@ override_mtp3_1p1d_tp8: benchmark: env: BENCHMARK_VARIANT: mtp3-1p1d-tp8 - USE_CHAT_TEMPLATE: 'true' override_mtp3_1p2d_tp8_wide: name: mi355x-dsr1-fp4-mtp3-1p2d-tp8-wide-fixed-seq resources: {} @@ -391,7 +390,6 @@ override_mtp3_1p2d_tp8_wide: benchmark: env: BENCHMARK_VARIANT: mtp3-1p2d-tp8-wide - USE_CHAT_TEMPLATE: 'true' override_mtp3_1p2d_tp8_narrow: name: mi355x-dsr1-fp4-mtp3-1p2d-tp8-narrow-fixed-seq resources: {} @@ -421,7 +419,6 @@ override_mtp3_1p2d_tp8_narrow: benchmark: env: BENCHMARK_VARIANT: mtp3-1p2d-tp8-narrow - USE_CHAT_TEMPLATE: 'true' override_mtp2_1p2d_tp8: name: mi355x-dsr1-fp4-mtp2-1p2d-tp8-fixed-seq resources: {} @@ -451,7 +448,6 @@ override_mtp2_1p2d_tp8: benchmark: env: BENCHMARK_VARIANT: mtp2-1p2d-tp8 - USE_CHAT_TEMPLATE: 'true' override_mtp3_1p1d_dep8: name: mi355x-dsr1-fp4-mtp3-1p1d-dep8-fixed-seq roles: @@ -529,7 +525,6 @@ override_mtp3_1p1d_dep8: benchmark: env: BENCHMARK_VARIANT: mtp3-1p1d-dep8 - USE_CHAT_TEMPLATE: 'true' override_mtp1_1p1d_dep8: name: mi355x-dsr1-fp4-mtp1-1p1d-dep8-fixed-seq roles: @@ -607,7 +602,6 @@ override_mtp1_1p1d_dep8: benchmark: env: BENCHMARK_VARIANT: mtp1-1p1d-dep8 - USE_CHAT_TEMPLATE: 'true' override_mtp1_2p1d_dep8: name: mi355x-dsr1-fp4-mtp1-2p1d-dep8-fixed-seq resources: {} @@ -690,4 +684,3 @@ override_mtp1_2p1d_dep8: benchmark: env: BENCHMARK_VARIANT: mtp1-2p1d-dep8 - USE_CHAT_TEMPLATE: 'true' diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/dsr1/mi355x/fp8-disagg-fixed-seq.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/dsr1/mi355x/fp8-disagg-fixed-seq.yaml index 3d2b6438d6..11d561a04f 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/dsr1/mi355x/fp8-disagg-fixed-seq.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/dsr1/mi355x/fp8-disagg-fixed-seq.yaml @@ -147,7 +147,7 @@ base: interval_seconds: 5 benchmark: type: custom - command: bash /infmax-workspace/benchmarks/multi_node/srt_fixed_sequence.sh --trust-remote-code + command: bash /infmax-workspace/benchmarks/multi_node/srt_fixed_sequence.sh env: MODEL: deepseek-ai/DeepSeek-R1-0528 ISL: '8192' @@ -292,7 +292,6 @@ override_mtp_2p1d_dep8: benchmark: env: BENCHMARK_VARIANT: mtp1-2p1d-dep8 - USE_CHAT_TEMPLATE: 'true' override_mtp_1p2d_tp8: name: mi355x-dsr1-fp8-mtp2-1p2d-tp8-fixed-seq resources: {} @@ -318,7 +317,6 @@ override_mtp_1p2d_tp8: benchmark: env: BENCHMARK_VARIANT: mtp2-1p2d-tp8 - USE_CHAT_TEMPLATE: 'true' override_mtp_1p1d_tp4_tp8: name: mi355x-dsr1-fp8-mtp2-1p1d-tp4-tp8-fixed-seq resources: {} @@ -347,4 +345,3 @@ override_mtp_1p1d_tp4_tp8: benchmark: env: BENCHMARK_VARIANT: mtp2-1p1d-tp4-tp8 - USE_CHAT_TEMPLATE: 'true' diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/qwen3.5/mi355x/disagg-1p1d-tp4p-tp8d-fixed-seq.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/qwen3.5/mi355x/disagg-1p1d-tp4p-tp8d-fixed-seq.yaml index 95f9b8efe0..d9b748d645 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/qwen3.5/mi355x/disagg-1p1d-tp4p-tp8d-fixed-seq.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/qwen3.5/mi355x/disagg-1p1d-tp4p-tp8d-fixed-seq.yaml @@ -117,7 +117,6 @@ benchmark: command: bash /infmax-workspace/benchmarks/multi_node/srt_fixed_sequence.sh env: MODEL: Qwen/Qwen3.5-397B-A17B-FP8 - CLIENT_BACKEND: openai-chat ISL: '8192' OSL: '1024' HF_HOME: /hf_hub_cache diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/qwen3.5/mi355x/disagg-1p1d-tp8-mxfp4-fixed-seq.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/qwen3.5/mi355x/disagg-1p1d-tp8-mxfp4-fixed-seq.yaml index 3f7df18566..4cbbb9bb0d 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/qwen3.5/mi355x/disagg-1p1d-tp8-mxfp4-fixed-seq.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/qwen3.5/mi355x/disagg-1p1d-tp8-mxfp4-fixed-seq.yaml @@ -111,7 +111,6 @@ benchmark: command: bash /infmax-workspace/benchmarks/multi_node/srt_fixed_sequence.sh env: MODEL: amd/Qwen3.5-397B-A17B-MXFP4 - CLIENT_BACKEND: openai-chat ISL: '8192' OSL: '1024' HF_HOME: /hf_hub_cache diff --git a/benchmarks/multi_node/srt_fixed_sequence.sh b/benchmarks/multi_node/srt_fixed_sequence.sh index bb83dbdc16..ddeae284d6 100644 --- a/benchmarks/multi_node/srt_fixed_sequence.sh +++ b/benchmarks/multi_node/srt_fixed_sequence.sh @@ -7,19 +7,13 @@ set -eo pipefail source "$(dirname "${BASH_SOURCE[0]}")/../benchmark_lib.sh" --validation-only check_env_vars MODEL ISL OSL SRT_FRONTEND_HOST SRT_FRONTEND_PORT CONC_LIST \ PREFILL_NUM_WORKERS PREFILL_TP DECODE_NUM_WORKERS DECODE_TP -CLIENT_ARGS=() -for argument in "$@"; do - case "$argument" in - --trust-remote-code) CLIENT_ARGS+=("$argument") ;; - *) echo "ERROR: unsupported fixed-sequence argument: $argument" >&2; exit 1 ;; - esac -done +CLIENT_ARGS=(--trust-remote-code) case "${CLIENT_BACKEND:=openai}" in openai) endpoint=/v1/completions ;; openai-chat) endpoint=/v1/chat/completions ;; *) echo "ERROR: unsupported CLIENT_BACKEND: $CLIENT_BACKEND" >&2; exit 1 ;; esac -case "${USE_CHAT_TEMPLATE:=false}" in +case "${USE_CHAT_TEMPLATE:=true}" in true) CLIENT_ARGS+=(--use-chat-template) ;; false) ;; *) echo "ERROR: USE_CHAT_TEMPLATE must be true or false" >&2; exit 1 ;; @@ -30,7 +24,7 @@ mkdir -p "$result_dir" ctx=$((PREFILL_NUM_WORKERS * PREFILL_TP)) gen=$((DECODE_NUM_WORKERS * DECODE_TP)) for concurrency in $CONC_LIST; do - num_prompts=$((concurrency * 10 < 16 ? 16 : concurrency * 10)) + result="results_concurrency_${concurrency}_gpus_$((ctx + gen))_ctx_${ctx}_gen_${gen}.json" python3 "$(dirname "${BASH_SOURCE[0]}")/../../utils/bench_serving/benchmark_serving.py" \ --backend "$CLIENT_BACKEND" \ --base-url "http://${SRT_FRONTEND_HOST}:${SRT_FRONTEND_PORT}" \ @@ -40,16 +34,43 @@ for concurrency in $CONC_LIST; do --dataset-name random \ --random-input-len "$ISL" \ --random-output-len "$OSL" \ - --random-range-ratio "${RANDOM_RANGE_RATIO:-1.0}" \ + --random-range-ratio "${RANDOM_RANGE_RATIO:-0.8}" \ --random-num-workers 1 \ --num-warmups "$((concurrency * 2))" \ - --num-prompts "$num_prompts" \ + --num-prompts "$((concurrency * 10))" \ --max-concurrency "$concurrency" \ --request-rate inf \ --ignore-eos \ --disable-tqdm \ --save-result \ --result-dir "$result_dir" \ - --result-filename "results_concurrency_${concurrency}_gpus_$((ctx + gen))_ctx_${ctx}_gen_${gen}.json" \ + --result-filename "$result" \ "${CLIENT_ARGS[@]}" + # Power lanes: publish this point's measured boundary in srt-slurm's + # custom-benchmark window contract (//windows). + if [[ -n "${SRT_MEASUREMENT_WINDOW_DIR:-}" ]]; then + python3 - "$result_dir/$result" "$concurrency" <<'PY' +import json, os, sys +from pathlib import Path +result, concurrency = Path(sys.argv[1]), int(sys.argv[2]) +windows = Path(os.environ["SRT_MEASUREMENT_WINDOW_DIR"]) +data = json.loads(result.read_text()) +start, duration = data["benchmark_start_time_unix"], data["duration"] +window = { + "schema_version": 1, + "benchmark_type": "custom", + "result_path": result.relative_to(windows.parent.parent).as_posix(), + "concurrency": concurrency, + "benchmark_start_time_unix": start, + "benchmark_end_time_unix": data.get("benchmark_end_time_unix", start + duration), + "duration": duration, + "clock_source": "head_node_unix_clock", + "status": "completed", + "reason": None, +} +temporary = windows / f".{result.stem}.json.tmp" +temporary.write_text(json.dumps(window, indent=2)) +temporary.replace(windows / f"{result.stem}.json") +PY + fi done From d299d6668d43ede66e38bd6c6a91dcafe196bc12 Mon Sep 17 00:00:00 2001 From: Cam Quilici Date: Thu, 24 Sep 2026 17:15:00 -0500 Subject: [PATCH 3/7] refactor(power): move the fixed-sequence window writer into infx Replace the inline Python in srt_fixed_sequence.sh with infx.results.power.window, which writes srt-slurm's custom-benchmark measurement window from the client's result. --- benchmarks/multi_node/srt_fixed_sequence.sh | 30 +++-------------- infx/results/power/window.py | 37 +++++++++++++++++++++ utils/test_power_window.py | 31 +++++++++++++++++ 3 files changed, 72 insertions(+), 26 deletions(-) create mode 100644 infx/results/power/window.py create mode 100644 utils/test_power_window.py diff --git a/benchmarks/multi_node/srt_fixed_sequence.sh b/benchmarks/multi_node/srt_fixed_sequence.sh index ddeae284d6..a0b9e963bf 100644 --- a/benchmarks/multi_node/srt_fixed_sequence.sh +++ b/benchmarks/multi_node/srt_fixed_sequence.sh @@ -19,13 +19,14 @@ case "${USE_CHAT_TEMPLATE:=true}" in *) echo "ERROR: USE_CHAT_TEMPLATE must be true or false" >&2; exit 1 ;; esac +repo_root="$(dirname "${BASH_SOURCE[0]}")/../.." result_dir="/logs/sa-bench_isl_${ISL}_osl_${OSL}" mkdir -p "$result_dir" ctx=$((PREFILL_NUM_WORKERS * PREFILL_TP)) gen=$((DECODE_NUM_WORKERS * DECODE_TP)) for concurrency in $CONC_LIST; do result="results_concurrency_${concurrency}_gpus_$((ctx + gen))_ctx_${ctx}_gen_${gen}.json" - python3 "$(dirname "${BASH_SOURCE[0]}")/../../utils/bench_serving/benchmark_serving.py" \ + python3 "$repo_root/utils/bench_serving/benchmark_serving.py" \ --backend "$CLIENT_BACKEND" \ --base-url "http://${SRT_FRONTEND_HOST}:${SRT_FRONTEND_PORT}" \ --endpoint "$endpoint" \ @@ -46,31 +47,8 @@ for concurrency in $CONC_LIST; do --result-dir "$result_dir" \ --result-filename "$result" \ "${CLIENT_ARGS[@]}" - # Power lanes: publish this point's measured boundary in srt-slurm's - # custom-benchmark window contract (//windows). + # Power lanes: tell srt-slurm which interval this concurrency's result measured. if [[ -n "${SRT_MEASUREMENT_WINDOW_DIR:-}" ]]; then - python3 - "$result_dir/$result" "$concurrency" <<'PY' -import json, os, sys -from pathlib import Path -result, concurrency = Path(sys.argv[1]), int(sys.argv[2]) -windows = Path(os.environ["SRT_MEASUREMENT_WINDOW_DIR"]) -data = json.loads(result.read_text()) -start, duration = data["benchmark_start_time_unix"], data["duration"] -window = { - "schema_version": 1, - "benchmark_type": "custom", - "result_path": result.relative_to(windows.parent.parent).as_posix(), - "concurrency": concurrency, - "benchmark_start_time_unix": start, - "benchmark_end_time_unix": data.get("benchmark_end_time_unix", start + duration), - "duration": duration, - "clock_source": "head_node_unix_clock", - "status": "completed", - "reason": None, -} -temporary = windows / f".{result.stem}.json.tmp" -temporary.write_text(json.dumps(window, indent=2)) -temporary.replace(windows / f"{result.stem}.json") -PY + PYTHONPATH="$repo_root" python3 -m infx.results.power.window "$result_dir/$result" "$concurrency" fi done diff --git a/infx/results/power/window.py b/infx/results/power/window.py new file mode 100644 index 0000000000..ec86119406 --- /dev/null +++ b/infx/results/power/window.py @@ -0,0 +1,37 @@ +"""Write srt-slurm's power measurement window for one fixed-sequence result. + +srt-slurm samples GPU power for the whole job; the window tells it which +interval belongs to one concurrency point, and which result it measured. +""" + +from __future__ import annotations + +import json +import os +import sys +from pathlib import Path + + +def write_window(result: Path, concurrency: int, windows: Path) -> None: + """Publish the client's measured boundary as a ``custom`` benchmark window.""" + data = json.loads(result.read_text()) + window = { + "schema_version": 1, + "benchmark_type": "custom", + # srt-slurm resolves this against the log directory, //windows/../.. + "result_path": result.relative_to(windows.parent.parent).as_posix(), + "concurrency": concurrency, + "benchmark_start_time_unix": data["benchmark_start_time_unix"], + "benchmark_end_time_unix": data["benchmark_end_time_unix"], + "duration": data["duration"], + "clock_source": "head_node_unix_clock", + "status": "completed", + "reason": None, + } + temporary = windows / f".{result.stem}.json.tmp" + temporary.write_text(json.dumps(window, indent=2)) + temporary.replace(windows / f"{result.stem}.json") + + +if __name__ == "__main__": + write_window(Path(sys.argv[1]), int(sys.argv[2]), Path(os.environ["SRT_MEASUREMENT_WINDOW_DIR"])) diff --git a/utils/test_power_window.py b/utils/test_power_window.py new file mode 100644 index 0000000000..d8fd842731 --- /dev/null +++ b/utils/test_power_window.py @@ -0,0 +1,31 @@ +"""The fixed-sequence client's power window matches srt-slurm's custom-benchmark contract.""" + +import json + +from infx.results.power.window import write_window + + +def test_window_brackets_the_measured_result(tmp_path): + result = tmp_path / "sa-bench_isl_8192_osl_1024" / "results_concurrency_16_gpus_16_ctx_8_gen_8.json" + result.parent.mkdir() + result.write_text( + json.dumps({"benchmark_start_time_unix": 1000.0, "benchmark_end_time_unix": 1060.5, "duration": 60.5}) + ) + windows = tmp_path / "power" / "windows" + windows.mkdir(parents=True) + + write_window(result, 16, windows) + + assert json.loads((windows / f"{result.stem}.json").read_text()) == { + "schema_version": 1, + "benchmark_type": "custom", + "result_path": f"sa-bench_isl_8192_osl_1024/{result.name}", + "concurrency": 16, + "benchmark_start_time_unix": 1000.0, + "benchmark_end_time_unix": 1060.5, + "duration": 60.5, + "clock_source": "head_node_unix_clock", + "status": "completed", + "reason": None, + } + assert [p.name for p in windows.iterdir()] == [f"{result.stem}.json"] From 78c5fe5789b2e0fecbf6f77c334eeff39c15aca8 Mon Sep 17 00:00:00 2001 From: Cam Quilici Date: Thu, 24 Sep 2026 17:17:29 -0500 Subject: [PATCH 4/7] refactor(power): model the measurement window as a dataclass --- infx/results/power/window.py | 38 ++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/infx/results/power/window.py b/infx/results/power/window.py index ec86119406..382184c1c2 100644 --- a/infx/results/power/window.py +++ b/infx/results/power/window.py @@ -9,27 +9,39 @@ import json import os import sys +from dataclasses import asdict, dataclass from pathlib import Path +@dataclass(frozen=True) +class MeasurementWindow: + """One completed ``custom`` benchmark window in srt-slurm's schema version 1.""" + + result_path: str + concurrency: int + benchmark_start_time_unix: float + benchmark_end_time_unix: float + duration: float + schema_version: int = 1 + benchmark_type: str = "custom" + clock_source: str = "head_node_unix_clock" + status: str = "completed" + reason: str | None = None + + def write_window(result: Path, concurrency: int, windows: Path) -> None: """Publish the client's measured boundary as a ``custom`` benchmark window.""" data = json.loads(result.read_text()) - window = { - "schema_version": 1, - "benchmark_type": "custom", + window = MeasurementWindow( # srt-slurm resolves this against the log directory, //windows/../.. - "result_path": result.relative_to(windows.parent.parent).as_posix(), - "concurrency": concurrency, - "benchmark_start_time_unix": data["benchmark_start_time_unix"], - "benchmark_end_time_unix": data["benchmark_end_time_unix"], - "duration": data["duration"], - "clock_source": "head_node_unix_clock", - "status": "completed", - "reason": None, - } + result_path=result.relative_to(windows.parent.parent).as_posix(), + concurrency=concurrency, + benchmark_start_time_unix=data["benchmark_start_time_unix"], + benchmark_end_time_unix=data["benchmark_end_time_unix"], + duration=data["duration"], + ) temporary = windows / f".{result.stem}.json.tmp" - temporary.write_text(json.dumps(window, indent=2)) + temporary.write_text(json.dumps(asdict(window), indent=2)) temporary.replace(windows / f"{result.stem}.json") From 2a4f71c01d8eebd4257d9bd85f78c501c90ae1e2 Mon Sep 17 00:00:00 2001 From: Cam Quilici Date: Thu, 24 Sep 2026 17:19:40 -0500 Subject: [PATCH 5/7] test: drop the tautological power window test --- utils/test_power_window.py | 31 ------------------------------- 1 file changed, 31 deletions(-) delete mode 100644 utils/test_power_window.py diff --git a/utils/test_power_window.py b/utils/test_power_window.py deleted file mode 100644 index d8fd842731..0000000000 --- a/utils/test_power_window.py +++ /dev/null @@ -1,31 +0,0 @@ -"""The fixed-sequence client's power window matches srt-slurm's custom-benchmark contract.""" - -import json - -from infx.results.power.window import write_window - - -def test_window_brackets_the_measured_result(tmp_path): - result = tmp_path / "sa-bench_isl_8192_osl_1024" / "results_concurrency_16_gpus_16_ctx_8_gen_8.json" - result.parent.mkdir() - result.write_text( - json.dumps({"benchmark_start_time_unix": 1000.0, "benchmark_end_time_unix": 1060.5, "duration": 60.5}) - ) - windows = tmp_path / "power" / "windows" - windows.mkdir(parents=True) - - write_window(result, 16, windows) - - assert json.loads((windows / f"{result.stem}.json").read_text()) == { - "schema_version": 1, - "benchmark_type": "custom", - "result_path": f"sa-bench_isl_8192_osl_1024/{result.name}", - "concurrency": 16, - "benchmark_start_time_unix": 1000.0, - "benchmark_end_time_unix": 1060.5, - "duration": 60.5, - "clock_source": "head_node_unix_clock", - "status": "completed", - "reason": None, - } - assert [p.name for p in windows.iterdir()] == [f"{result.stem}.json"] From 7a048afaa0dcb5df71126e969b18b247604d70a2 Mon Sep 17 00:00:00 2001 From: Cam Quilici Date: Thu, 24 Sep 2026 18:53:27 -0500 Subject: [PATCH 6/7] fix(srt): request the model name the frontend serves Recipes hardcoded MODEL, but the served name depends on the cluster's model path and can differ from both the recipe and the workflow's HF id (Dynamo TRT-LLM served DeepSeek-R1-0528 while the recipe said dsr1, so every request got 404). Read it from /v1/models instead. --- .../sglang/dsr1/mi355x/fp4-disagg-fixed-seq.yaml | 1 - .../sglang/dsr1/mi355x/fp8-disagg-fixed-seq.yaml | 1 - .../qwen3.5/mi355x/disagg-1p1d-tp4p-tp8d-fixed-seq.yaml | 1 - .../qwen3.5/mi355x/disagg-1p1d-tp8-mxfp4-fixed-seq.yaml | 1 - benchmarks/multi_node/srt_fixed_sequence.sh | 9 ++++++--- 5 files changed, 6 insertions(+), 7 deletions(-) diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/dsr1/mi355x/fp4-disagg-fixed-seq.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/dsr1/mi355x/fp4-disagg-fixed-seq.yaml index 6365a10b29..48a966a8e5 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/dsr1/mi355x/fp4-disagg-fixed-seq.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/dsr1/mi355x/fp4-disagg-fixed-seq.yaml @@ -159,7 +159,6 @@ base: type: custom command: bash /infmax-workspace/benchmarks/multi_node/srt_fixed_sequence.sh env: - MODEL: amd/DeepSeek-R1-0528-MXFP4-v2 TOKENIZER: /model ISL: '8192' OSL: '1024' diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/dsr1/mi355x/fp8-disagg-fixed-seq.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/dsr1/mi355x/fp8-disagg-fixed-seq.yaml index 11d561a04f..028dc7f619 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/dsr1/mi355x/fp8-disagg-fixed-seq.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/dsr1/mi355x/fp8-disagg-fixed-seq.yaml @@ -149,7 +149,6 @@ base: type: custom command: bash /infmax-workspace/benchmarks/multi_node/srt_fixed_sequence.sh env: - MODEL: deepseek-ai/DeepSeek-R1-0528 ISL: '8192' OSL: '1024' HF_HOME: /hf_hub_cache diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/qwen3.5/mi355x/disagg-1p1d-tp4p-tp8d-fixed-seq.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/qwen3.5/mi355x/disagg-1p1d-tp4p-tp8d-fixed-seq.yaml index d9b748d645..dffc2c267a 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/qwen3.5/mi355x/disagg-1p1d-tp4p-tp8d-fixed-seq.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/qwen3.5/mi355x/disagg-1p1d-tp4p-tp8d-fixed-seq.yaml @@ -116,7 +116,6 @@ benchmark: type: custom command: bash /infmax-workspace/benchmarks/multi_node/srt_fixed_sequence.sh env: - MODEL: Qwen/Qwen3.5-397B-A17B-FP8 ISL: '8192' OSL: '1024' HF_HOME: /hf_hub_cache diff --git a/benchmarks/multi_node/srt-slurm-recipes/sglang/qwen3.5/mi355x/disagg-1p1d-tp8-mxfp4-fixed-seq.yaml b/benchmarks/multi_node/srt-slurm-recipes/sglang/qwen3.5/mi355x/disagg-1p1d-tp8-mxfp4-fixed-seq.yaml index 4cbbb9bb0d..2afa1c227a 100644 --- a/benchmarks/multi_node/srt-slurm-recipes/sglang/qwen3.5/mi355x/disagg-1p1d-tp8-mxfp4-fixed-seq.yaml +++ b/benchmarks/multi_node/srt-slurm-recipes/sglang/qwen3.5/mi355x/disagg-1p1d-tp8-mxfp4-fixed-seq.yaml @@ -110,7 +110,6 @@ benchmark: type: custom command: bash /infmax-workspace/benchmarks/multi_node/srt_fixed_sequence.sh env: - MODEL: amd/Qwen3.5-397B-A17B-MXFP4 ISL: '8192' OSL: '1024' HF_HOME: /hf_hub_cache diff --git a/benchmarks/multi_node/srt_fixed_sequence.sh b/benchmarks/multi_node/srt_fixed_sequence.sh index a0b9e963bf..965462b163 100644 --- a/benchmarks/multi_node/srt_fixed_sequence.sh +++ b/benchmarks/multi_node/srt_fixed_sequence.sh @@ -5,7 +5,7 @@ # layout that copy_fixed_sequence_results collects. set -eo pipefail source "$(dirname "${BASH_SOURCE[0]}")/../benchmark_lib.sh" --validation-only -check_env_vars MODEL ISL OSL SRT_FRONTEND_HOST SRT_FRONTEND_PORT CONC_LIST \ +check_env_vars ISL OSL SRT_FRONTEND_HOST SRT_FRONTEND_PORT CONC_LIST \ PREFILL_NUM_WORKERS PREFILL_TP DECODE_NUM_WORKERS DECODE_TP CLIENT_ARGS=(--trust-remote-code) case "${CLIENT_BACKEND:=openai}" in @@ -20,6 +20,9 @@ case "${USE_CHAT_TEMPLATE:=true}" in esac repo_root="$(dirname "${BASH_SOURCE[0]}")/../.." +# Request the name the workers registered; the workflow's MODEL is the HF id, which can differ. +model=$(curl -sf "http://${SRT_FRONTEND_HOST}:${SRT_FRONTEND_PORT}/v1/models" | + python3 -c 'import json, sys; print(json.load(sys.stdin)["data"][0]["id"])') result_dir="/logs/sa-bench_isl_${ISL}_osl_${OSL}" mkdir -p "$result_dir" ctx=$((PREFILL_NUM_WORKERS * PREFILL_TP)) @@ -30,8 +33,8 @@ for concurrency in $CONC_LIST; do --backend "$CLIENT_BACKEND" \ --base-url "http://${SRT_FRONTEND_HOST}:${SRT_FRONTEND_PORT}" \ --endpoint "$endpoint" \ - --model "$MODEL" \ - --tokenizer "${TOKENIZER:-$MODEL}" \ + --model "$model" \ + --tokenizer "${TOKENIZER:-$model}" \ --dataset-name random \ --random-input-len "$ISL" \ --random-output-len "$OSL" \ From 189832711dee2595cba48a448d82f667d43e2c55 Mon Sep 17 00:00:00 2001 From: Cam Quilici Date: Fri, 25 Sep 2026 00:33:21 -0500 Subject: [PATCH 7/7] style: wrap window writer call for ruff --- infx/results/power/window.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/infx/results/power/window.py b/infx/results/power/window.py index 382184c1c2..956f95528d 100644 --- a/infx/results/power/window.py +++ b/infx/results/power/window.py @@ -46,4 +46,6 @@ def write_window(result: Path, concurrency: int, windows: Path) -> None: if __name__ == "__main__": - write_window(Path(sys.argv[1]), int(sys.argv[2]), Path(os.environ["SRT_MEASUREMENT_WINDOW_DIR"])) + write_window( + Path(sys.argv[1]), int(sys.argv[2]), Path(os.environ["SRT_MEASUREMENT_WINDOW_DIR"]) + )