diff --git a/experiments/dsv4_pro6000_vllm_tp_dp_matrix/adaptive_config.env b/experiments/h20/dsv4_h20_sglang_tp_dp_matrix/adaptive_config.env similarity index 90% rename from experiments/dsv4_pro6000_vllm_tp_dp_matrix/adaptive_config.env rename to experiments/h20/dsv4_h20_sglang_tp_dp_matrix/adaptive_config.env index 1eda1f0..e35c41f 100644 --- a/experiments/dsv4_pro6000_vllm_tp_dp_matrix/adaptive_config.env +++ b/experiments/h20/dsv4_h20_sglang_tp_dp_matrix/adaptive_config.env @@ -15,6 +15,12 @@ NUM_PROMPTS_MULTIPLIER="${NUM_PROMPTS_MULTIPLIER:-5}" TPS_MIN_GAIN_PCT="${TPS_MIN_GAIN_PCT:-2.0}" PLATEAU_PATIENCE="${PLATEAU_PATIENCE:-2}" +# TTFT SLO early-stop settings. +# When ttft_p95_ms exceeds TTFT_SLO_MS, stop searching the current (ISL, OSL) +# shape and move on to the next scenario. +TTFT_SLO_MS="${TTFT_SLO_MS:-4000}" +ENABLE_TTFT_SLO_STOP="${ENABLE_TTFT_SLO_STOP:-1}" + # Keep the same random workload semantics as the fixed matrix baseline. # DATASET_PATH must contain at least SEARCH_MAX_CONCURRENCY times # NUM_PROMPTS_MULTIPLIER valid two-turn conversations. Set this explicitly to diff --git a/experiments/dsv4_h20_sglang_tp_dp_matrix/compare.py b/experiments/h20/dsv4_h20_sglang_tp_dp_matrix/compare.py similarity index 100% rename from experiments/dsv4_h20_sglang_tp_dp_matrix/compare.py rename to experiments/h20/dsv4_h20_sglang_tp_dp_matrix/compare.py diff --git a/experiments/dsv4_h20_sglang_tp_dp_matrix/config.env b/experiments/h20/dsv4_h20_sglang_tp_dp_matrix/config.env similarity index 100% rename from experiments/dsv4_h20_sglang_tp_dp_matrix/config.env rename to experiments/h20/dsv4_h20_sglang_tp_dp_matrix/config.env diff --git a/experiments/dsv4_h20_sglang_tp_dp_matrix/generate_scenarios.py b/experiments/h20/dsv4_h20_sglang_tp_dp_matrix/generate_scenarios.py similarity index 100% rename from experiments/dsv4_h20_sglang_tp_dp_matrix/generate_scenarios.py rename to experiments/h20/dsv4_h20_sglang_tp_dp_matrix/generate_scenarios.py diff --git a/experiments/dsv4_h20_sglang_tp_dp_matrix/matrix.json b/experiments/h20/dsv4_h20_sglang_tp_dp_matrix/matrix.json similarity index 100% rename from experiments/dsv4_h20_sglang_tp_dp_matrix/matrix.json rename to experiments/h20/dsv4_h20_sglang_tp_dp_matrix/matrix.json diff --git a/experiments/dsv4_pro6000_sglang_tp_dp_matrix/run_adaptive_concurrency.sh b/experiments/h20/dsv4_h20_sglang_tp_dp_matrix/run_adaptive_concurrency.sh similarity index 96% rename from experiments/dsv4_pro6000_sglang_tp_dp_matrix/run_adaptive_concurrency.sh rename to experiments/h20/dsv4_h20_sglang_tp_dp_matrix/run_adaptive_concurrency.sh index 0979a46..7972a9e 100755 --- a/experiments/dsv4_pro6000_sglang_tp_dp_matrix/run_adaptive_concurrency.sh +++ b/experiments/h20/dsv4_h20_sglang_tp_dp_matrix/run_adaptive_concurrency.sh @@ -6,15 +6,15 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" EXPERIMENT_NAME="$(basename "$SCRIPT_DIR")" # shellcheck source=/dev/null -source "${SCRIPT_DIR}/../../scripts/common/lib.sh" +source "${SCRIPT_DIR}/../../../scripts/common/lib.sh" # shellcheck source=/dev/null -source "${SCRIPT_DIR}/../../scripts/common/platform.sh" +source "${SCRIPT_DIR}/../../../scripts/common/platform.sh" # shellcheck source=/dev/null source "${SCRIPT_DIR}/config.env" # shellcheck source=/dev/null source "${SCRIPT_DIR}/adaptive_config.env" # shellcheck source=/dev/null -source "${SCRIPT_DIR}/../../scripts/common/adaptive_bench_lib.sh" +source "${SCRIPT_DIR}/../../../scripts/common/adaptive_bench_lib.sh" ENGINE="sglang" ENGINE_PORT="$SGLANG_PORT" diff --git a/experiments/dsv4_pro6000_sglang_tp_dp_matrix/run_adaptive_concurrency_add16.sh b/experiments/h20/dsv4_h20_sglang_tp_dp_matrix/run_adaptive_concurrency_add16.sh similarity index 96% rename from experiments/dsv4_pro6000_sglang_tp_dp_matrix/run_adaptive_concurrency_add16.sh rename to experiments/h20/dsv4_h20_sglang_tp_dp_matrix/run_adaptive_concurrency_add16.sh index b9b28f3..2f95353 100755 --- a/experiments/dsv4_pro6000_sglang_tp_dp_matrix/run_adaptive_concurrency_add16.sh +++ b/experiments/h20/dsv4_h20_sglang_tp_dp_matrix/run_adaptive_concurrency_add16.sh @@ -6,15 +6,15 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" EXPERIMENT_NAME="$(basename "$SCRIPT_DIR")" # shellcheck source=/dev/null -source "${SCRIPT_DIR}/../../scripts/common/lib.sh" +source "${SCRIPT_DIR}/../../../scripts/common/lib.sh" # shellcheck source=/dev/null -source "${SCRIPT_DIR}/../../scripts/common/platform.sh" +source "${SCRIPT_DIR}/../../../scripts/common/platform.sh" # shellcheck source=/dev/null source "${SCRIPT_DIR}/config.env" # shellcheck source=/dev/null source "${SCRIPT_DIR}/adaptive_config.env" # shellcheck source=/dev/null -source "${SCRIPT_DIR}/../../scripts/common/adaptive_bench_lib.sh" +source "${SCRIPT_DIR}/../../../scripts/common/adaptive_bench_lib.sh" ENGINE="sglang" ENGINE_PORT="$SGLANG_PORT" diff --git a/experiments/dsv4_h20_sglang_tp_dp_matrix/run_bench.sh b/experiments/h20/dsv4_h20_sglang_tp_dp_matrix/run_bench.sh similarity index 98% rename from experiments/dsv4_h20_sglang_tp_dp_matrix/run_bench.sh rename to experiments/h20/dsv4_h20_sglang_tp_dp_matrix/run_bench.sh index d27b870..c2d3a37 100755 --- a/experiments/dsv4_h20_sglang_tp_dp_matrix/run_bench.sh +++ b/experiments/h20/dsv4_h20_sglang_tp_dp_matrix/run_bench.sh @@ -6,9 +6,9 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" EXPERIMENT_NAME="$(basename "$SCRIPT_DIR")" # shellcheck source=/dev/null -source "${SCRIPT_DIR}/../../scripts/common/lib.sh" +source "${SCRIPT_DIR}/../../../scripts/common/lib.sh" # shellcheck source=/dev/null -source "${SCRIPT_DIR}/../../scripts/common/platform.sh" +source "${SCRIPT_DIR}/../../../scripts/common/platform.sh" # shellcheck source=/dev/null source "${SCRIPT_DIR}/config.env" @@ -522,7 +522,7 @@ run_parallel_config() { # Parse results. log "parsing ${config_label} results" - "$PYTHON" "${SCRIPT_DIR}/../../scripts/common/parse_backend.py" "$result_root" --backend sglang \ + "$PYTHON" "${SCRIPT_DIR}/../../../scripts/common/parse_backend.py" "$result_root" --backend sglang \ >> "${phase_log_dir}/parse.log" 2>&1 || { log "WARNING: parser failed for ${config_label}; see ${phase_log_dir}/parse.log" } diff --git a/experiments/dsv4_h200_sglang_tp_dp_matrix/run_sglang_in_container.sh b/experiments/h20/dsv4_h20_sglang_tp_dp_matrix/run_sglang_in_container.sh similarity index 100% rename from experiments/dsv4_h200_sglang_tp_dp_matrix/run_sglang_in_container.sh rename to experiments/h20/dsv4_h20_sglang_tp_dp_matrix/run_sglang_in_container.sh diff --git a/experiments/dsv4_h200_sglang_tp_dp_matrix/start_sglang_container.sh b/experiments/h20/dsv4_h20_sglang_tp_dp_matrix/start_sglang_container.sh similarity index 100% rename from experiments/dsv4_h200_sglang_tp_dp_matrix/start_sglang_container.sh rename to experiments/h20/dsv4_h20_sglang_tp_dp_matrix/start_sglang_container.sh diff --git a/experiments/dsv4_h200_sglang_tp_dp_matrix/start_sglang_docker.sh b/experiments/h20/dsv4_h20_sglang_tp_dp_matrix/start_sglang_docker.sh similarity index 100% rename from experiments/dsv4_h200_sglang_tp_dp_matrix/start_sglang_docker.sh rename to experiments/h20/dsv4_h20_sglang_tp_dp_matrix/start_sglang_docker.sh diff --git a/experiments/dsv4_h200_sglang_tp_dp_matrix/start_sglang_dp.sh b/experiments/h20/dsv4_h20_sglang_tp_dp_matrix/start_sglang_dp.sh similarity index 100% rename from experiments/dsv4_h200_sglang_tp_dp_matrix/start_sglang_dp.sh rename to experiments/h20/dsv4_h20_sglang_tp_dp_matrix/start_sglang_dp.sh diff --git a/experiments/dsv4_pro6000_sglang_tp_dp_matrix/adaptive_config.env b/experiments/h20/dsv4_h20_vllm_tp_dp_matrix/adaptive_config.env similarity index 90% rename from experiments/dsv4_pro6000_sglang_tp_dp_matrix/adaptive_config.env rename to experiments/h20/dsv4_h20_vllm_tp_dp_matrix/adaptive_config.env index 1eda1f0..e35c41f 100644 --- a/experiments/dsv4_pro6000_sglang_tp_dp_matrix/adaptive_config.env +++ b/experiments/h20/dsv4_h20_vllm_tp_dp_matrix/adaptive_config.env @@ -15,6 +15,12 @@ NUM_PROMPTS_MULTIPLIER="${NUM_PROMPTS_MULTIPLIER:-5}" TPS_MIN_GAIN_PCT="${TPS_MIN_GAIN_PCT:-2.0}" PLATEAU_PATIENCE="${PLATEAU_PATIENCE:-2}" +# TTFT SLO early-stop settings. +# When ttft_p95_ms exceeds TTFT_SLO_MS, stop searching the current (ISL, OSL) +# shape and move on to the next scenario. +TTFT_SLO_MS="${TTFT_SLO_MS:-4000}" +ENABLE_TTFT_SLO_STOP="${ENABLE_TTFT_SLO_STOP:-1}" + # Keep the same random workload semantics as the fixed matrix baseline. # DATASET_PATH must contain at least SEARCH_MAX_CONCURRENCY times # NUM_PROMPTS_MULTIPLIER valid two-turn conversations. Set this explicitly to diff --git a/experiments/dsv4_h20_vllm_tp_dp_matrix/compare.py b/experiments/h20/dsv4_h20_vllm_tp_dp_matrix/compare.py similarity index 98% rename from experiments/dsv4_h20_vllm_tp_dp_matrix/compare.py rename to experiments/h20/dsv4_h20_vllm_tp_dp_matrix/compare.py index 002fa0c..15f277c 100644 --- a/experiments/dsv4_h20_vllm_tp_dp_matrix/compare.py +++ b/experiments/h20/dsv4_h20_vllm_tp_dp_matrix/compare.py @@ -18,7 +18,7 @@ def load_result(result_root: Path) -> dict: def slo_status(ttft_p95_ms: float, tpot_mean_ms: float, - ttft_limit_ms: float = 3000.0, tpot_limit_ms: float = 50.0) -> str: + ttft_limit_ms: float = 4000.0, tpot_limit_ms: float = 50.0) -> str: ttft_ok = ttft_p95_ms < ttft_limit_ms tpot_ok = tpot_mean_ms < tpot_limit_ms if ttft_ok and tpot_ok: @@ -42,7 +42,7 @@ def main(): parser = argparse.ArgumentParser() parser.add_argument("--run-root", type=Path, required=True) parser.add_argument("-o", "--output", type=Path, default=Path("comparison.md")) - parser.add_argument("--ttft-limit", type=float, default=3000.0) + parser.add_argument("--ttft-limit", type=float, default=4000.0) parser.add_argument("--tpot-limit", type=float, default=50.0) args = parser.parse_args() diff --git a/experiments/dsv4_h20_vllm_tp_dp_matrix/config.env b/experiments/h20/dsv4_h20_vllm_tp_dp_matrix/config.env similarity index 100% rename from experiments/dsv4_h20_vllm_tp_dp_matrix/config.env rename to experiments/h20/dsv4_h20_vllm_tp_dp_matrix/config.env diff --git a/experiments/dsv4_h20_vllm_tp_dp_matrix/generate_scenarios.py b/experiments/h20/dsv4_h20_vllm_tp_dp_matrix/generate_scenarios.py similarity index 100% rename from experiments/dsv4_h20_vllm_tp_dp_matrix/generate_scenarios.py rename to experiments/h20/dsv4_h20_vllm_tp_dp_matrix/generate_scenarios.py diff --git a/experiments/dsv4_h20_vllm_tp_dp_matrix/matrix.json b/experiments/h20/dsv4_h20_vllm_tp_dp_matrix/matrix.json similarity index 100% rename from experiments/dsv4_h20_vllm_tp_dp_matrix/matrix.json rename to experiments/h20/dsv4_h20_vllm_tp_dp_matrix/matrix.json diff --git a/experiments/dsv4_pro6000_vllm_tp_dp_matrix/run_adaptive_concurrency.sh b/experiments/h20/dsv4_h20_vllm_tp_dp_matrix/run_adaptive_concurrency.sh similarity index 96% rename from experiments/dsv4_pro6000_vllm_tp_dp_matrix/run_adaptive_concurrency.sh rename to experiments/h20/dsv4_h20_vllm_tp_dp_matrix/run_adaptive_concurrency.sh index ca23f6a..f76a93d 100755 --- a/experiments/dsv4_pro6000_vllm_tp_dp_matrix/run_adaptive_concurrency.sh +++ b/experiments/h20/dsv4_h20_vllm_tp_dp_matrix/run_adaptive_concurrency.sh @@ -6,15 +6,15 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" EXPERIMENT_NAME="$(basename "$SCRIPT_DIR")" # shellcheck source=/dev/null -source "${SCRIPT_DIR}/../../scripts/common/lib.sh" +source "${SCRIPT_DIR}/../../../scripts/common/lib.sh" # shellcheck source=/dev/null -source "${SCRIPT_DIR}/../../scripts/common/platform.sh" +source "${SCRIPT_DIR}/../../../scripts/common/platform.sh" # shellcheck source=/dev/null source "${SCRIPT_DIR}/config.env" # shellcheck source=/dev/null source "${SCRIPT_DIR}/adaptive_config.env" # shellcheck source=/dev/null -source "${SCRIPT_DIR}/../../scripts/common/adaptive_bench_lib.sh" +source "${SCRIPT_DIR}/../../../scripts/common/adaptive_bench_lib.sh" ENGINE="vllm" ENGINE_PORT="$VLLM_PORT" diff --git a/experiments/dsv4_pro6000_vllm_tp_dp_matrix/run_adaptive_concurrency_add16.sh b/experiments/h20/dsv4_h20_vllm_tp_dp_matrix/run_adaptive_concurrency_add16.sh similarity index 96% rename from experiments/dsv4_pro6000_vllm_tp_dp_matrix/run_adaptive_concurrency_add16.sh rename to experiments/h20/dsv4_h20_vllm_tp_dp_matrix/run_adaptive_concurrency_add16.sh index 482886d..1a4b3bc 100755 --- a/experiments/dsv4_pro6000_vllm_tp_dp_matrix/run_adaptive_concurrency_add16.sh +++ b/experiments/h20/dsv4_h20_vllm_tp_dp_matrix/run_adaptive_concurrency_add16.sh @@ -6,15 +6,15 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" EXPERIMENT_NAME="$(basename "$SCRIPT_DIR")" # shellcheck source=/dev/null -source "${SCRIPT_DIR}/../../scripts/common/lib.sh" +source "${SCRIPT_DIR}/../../../scripts/common/lib.sh" # shellcheck source=/dev/null -source "${SCRIPT_DIR}/../../scripts/common/platform.sh" +source "${SCRIPT_DIR}/../../../scripts/common/platform.sh" # shellcheck source=/dev/null source "${SCRIPT_DIR}/config.env" # shellcheck source=/dev/null source "${SCRIPT_DIR}/adaptive_config.env" # shellcheck source=/dev/null -source "${SCRIPT_DIR}/../../scripts/common/adaptive_bench_lib.sh" +source "${SCRIPT_DIR}/../../../scripts/common/adaptive_bench_lib.sh" ENGINE="vllm" ENGINE_PORT="$VLLM_PORT" diff --git a/experiments/dsv4_h20_vllm_tp_dp_matrix/run_bench.sh b/experiments/h20/dsv4_h20_vllm_tp_dp_matrix/run_bench.sh similarity index 98% rename from experiments/dsv4_h20_vllm_tp_dp_matrix/run_bench.sh rename to experiments/h20/dsv4_h20_vllm_tp_dp_matrix/run_bench.sh index 7bb82c8..1db82ea 100755 --- a/experiments/dsv4_h20_vllm_tp_dp_matrix/run_bench.sh +++ b/experiments/h20/dsv4_h20_vllm_tp_dp_matrix/run_bench.sh @@ -6,9 +6,9 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" EXPERIMENT_NAME="$(basename "$SCRIPT_DIR")" # shellcheck source=/dev/null -source "${SCRIPT_DIR}/../../scripts/common/lib.sh" +source "${SCRIPT_DIR}/../../../scripts/common/lib.sh" # shellcheck source=/dev/null -source "${SCRIPT_DIR}/../../scripts/common/platform.sh" +source "${SCRIPT_DIR}/../../../scripts/common/platform.sh" # shellcheck source=/dev/null source "${SCRIPT_DIR}/config.env" @@ -512,7 +512,7 @@ run_parallel_config() { # Parse results. log "parsing ${config_label} results" - "$PYTHON" "${SCRIPT_DIR}/../../scripts/common/parse_backend.py" "$result_root" --backend vllm \ + "$PYTHON" "${SCRIPT_DIR}/../../../scripts/common/parse_backend.py" "$result_root" --backend vllm \ >> "${phase_log_dir}/parse.log" 2>&1 || { log "WARNING: parser failed for ${config_label}; see ${phase_log_dir}/parse.log" } diff --git a/experiments/dsv4_h20_vllm_tp_dp_matrix/start_vllm_docker.sh b/experiments/h20/dsv4_h20_vllm_tp_dp_matrix/start_vllm_docker.sh similarity index 100% rename from experiments/dsv4_h20_vllm_tp_dp_matrix/start_vllm_docker.sh rename to experiments/h20/dsv4_h20_vllm_tp_dp_matrix/start_vllm_docker.sh diff --git a/experiments/dsv4_h200_vllm_tp_dp_matrix/start_vllm_dp.sh b/experiments/h20/dsv4_h20_vllm_tp_dp_matrix/start_vllm_dp.sh similarity index 100% rename from experiments/dsv4_h200_vllm_tp_dp_matrix/start_vllm_dp.sh rename to experiments/h20/dsv4_h20_vllm_tp_dp_matrix/start_vllm_dp.sh diff --git a/experiments/dsv4_h200_256k_4k_probe/config.env b/experiments/h200/dsv4_h200_256k_4k_probe/config.env similarity index 100% rename from experiments/dsv4_h200_256k_4k_probe/config.env rename to experiments/h200/dsv4_h200_256k_4k_probe/config.env diff --git a/experiments/dsv4_h200_256k_4k_probe/results/20260708-094838/comparison.md b/experiments/h200/dsv4_h200_256k_4k_probe/results/20260708-094838/comparison.md similarity index 100% rename from experiments/dsv4_h200_256k_4k_probe/results/20260708-094838/comparison.md rename to experiments/h200/dsv4_h200_256k_4k_probe/results/20260708-094838/comparison.md diff --git a/experiments/dsv4_h200_256k_4k_probe/results/20260708-094838/sglang/report.md b/experiments/h200/dsv4_h200_256k_4k_probe/results/20260708-094838/sglang/report.md similarity index 100% rename from experiments/dsv4_h200_256k_4k_probe/results/20260708-094838/sglang/report.md rename to experiments/h200/dsv4_h200_256k_4k_probe/results/20260708-094838/sglang/report.md diff --git a/experiments/dsv4_h200_256k_4k_probe/results/20260708-094838/sglang/results.json b/experiments/h200/dsv4_h200_256k_4k_probe/results/20260708-094838/sglang/results.json similarity index 100% rename from experiments/dsv4_h200_256k_4k_probe/results/20260708-094838/sglang/results.json rename to experiments/h200/dsv4_h200_256k_4k_probe/results/20260708-094838/sglang/results.json diff --git a/experiments/dsv4_h200_256k_4k_probe/results/20260708-094838/vllm/report.md b/experiments/h200/dsv4_h200_256k_4k_probe/results/20260708-094838/vllm/report.md similarity index 100% rename from experiments/dsv4_h200_256k_4k_probe/results/20260708-094838/vllm/report.md rename to experiments/h200/dsv4_h200_256k_4k_probe/results/20260708-094838/vllm/report.md diff --git a/experiments/dsv4_h200_256k_4k_probe/results/20260708-094838/vllm/results.json b/experiments/h200/dsv4_h200_256k_4k_probe/results/20260708-094838/vllm/results.json similarity index 100% rename from experiments/dsv4_h200_256k_4k_probe/results/20260708-094838/vllm/results.json rename to experiments/h200/dsv4_h200_256k_4k_probe/results/20260708-094838/vllm/results.json diff --git a/experiments/dsv4_h200_256k_4k_probe/run_bench.sh b/experiments/h200/dsv4_h200_256k_4k_probe/run_bench.sh similarity index 100% rename from experiments/dsv4_h200_256k_4k_probe/run_bench.sh rename to experiments/h200/dsv4_h200_256k_4k_probe/run_bench.sh diff --git a/experiments/dsv4_h200_256k_4k_probe/start_sglang.sh b/experiments/h200/dsv4_h200_256k_4k_probe/start_sglang.sh similarity index 100% rename from experiments/dsv4_h200_256k_4k_probe/start_sglang.sh rename to experiments/h200/dsv4_h200_256k_4k_probe/start_sglang.sh diff --git a/experiments/dsv4_h200_256k_4k_probe/start_vllm.sh b/experiments/h200/dsv4_h200_256k_4k_probe/start_vllm.sh similarity index 100% rename from experiments/dsv4_h200_256k_4k_probe/start_vllm.sh rename to experiments/h200/dsv4_h200_256k_4k_probe/start_vllm.sh diff --git a/experiments/dsv4_h200_64k_sglang_vs_vllm/config.env b/experiments/h200/dsv4_h200_64k_sglang_vs_vllm/config.env similarity index 100% rename from experiments/dsv4_h200_64k_sglang_vs_vllm/config.env rename to experiments/h200/dsv4_h200_64k_sglang_vs_vllm/config.env diff --git a/experiments/dsv4_h200_64k_sglang_vs_vllm/results/20260708-092556/comparison.md b/experiments/h200/dsv4_h200_64k_sglang_vs_vllm/results/20260708-092556/comparison.md similarity index 100% rename from experiments/dsv4_h200_64k_sglang_vs_vllm/results/20260708-092556/comparison.md rename to experiments/h200/dsv4_h200_64k_sglang_vs_vllm/results/20260708-092556/comparison.md diff --git a/experiments/dsv4_h200_64k_sglang_vs_vllm/results/20260708-092556/sglang/report.md b/experiments/h200/dsv4_h200_64k_sglang_vs_vllm/results/20260708-092556/sglang/report.md similarity index 100% rename from experiments/dsv4_h200_64k_sglang_vs_vllm/results/20260708-092556/sglang/report.md rename to experiments/h200/dsv4_h200_64k_sglang_vs_vllm/results/20260708-092556/sglang/report.md diff --git a/experiments/dsv4_h200_64k_sglang_vs_vllm/results/20260708-092556/sglang/results.json b/experiments/h200/dsv4_h200_64k_sglang_vs_vllm/results/20260708-092556/sglang/results.json similarity index 100% rename from experiments/dsv4_h200_64k_sglang_vs_vllm/results/20260708-092556/sglang/results.json rename to experiments/h200/dsv4_h200_64k_sglang_vs_vllm/results/20260708-092556/sglang/results.json diff --git a/experiments/dsv4_h200_64k_sglang_vs_vllm/results/20260708-092556/vllm/report.md b/experiments/h200/dsv4_h200_64k_sglang_vs_vllm/results/20260708-092556/vllm/report.md similarity index 100% rename from experiments/dsv4_h200_64k_sglang_vs_vllm/results/20260708-092556/vllm/report.md rename to experiments/h200/dsv4_h200_64k_sglang_vs_vllm/results/20260708-092556/vllm/report.md diff --git a/experiments/dsv4_h200_64k_sglang_vs_vllm/results/20260708-092556/vllm/results.json b/experiments/h200/dsv4_h200_64k_sglang_vs_vllm/results/20260708-092556/vllm/results.json similarity index 100% rename from experiments/dsv4_h200_64k_sglang_vs_vllm/results/20260708-092556/vllm/results.json rename to experiments/h200/dsv4_h200_64k_sglang_vs_vllm/results/20260708-092556/vllm/results.json diff --git a/experiments/dsv4_h200_64k_sglang_vs_vllm/run_bench.sh b/experiments/h200/dsv4_h200_64k_sglang_vs_vllm/run_bench.sh similarity index 100% rename from experiments/dsv4_h200_64k_sglang_vs_vllm/run_bench.sh rename to experiments/h200/dsv4_h200_64k_sglang_vs_vllm/run_bench.sh diff --git a/experiments/dsv4_h200_64k_sglang_vs_vllm/start_sglang.sh b/experiments/h200/dsv4_h200_64k_sglang_vs_vllm/start_sglang.sh similarity index 100% rename from experiments/dsv4_h200_64k_sglang_vs_vllm/start_sglang.sh rename to experiments/h200/dsv4_h200_64k_sglang_vs_vllm/start_sglang.sh diff --git a/experiments/dsv4_h200_64k_sglang_vs_vllm/start_vllm.sh b/experiments/h200/dsv4_h200_64k_sglang_vs_vllm/start_vllm.sh similarity index 100% rename from experiments/dsv4_h200_64k_sglang_vs_vllm/start_vllm.sh rename to experiments/h200/dsv4_h200_64k_sglang_vs_vllm/start_vllm.sh diff --git a/experiments/dsv4_h200_dspark/README.md b/experiments/h200/dsv4_h200_dspark/README.md similarity index 100% rename from experiments/dsv4_h200_dspark/README.md rename to experiments/h200/dsv4_h200_dspark/README.md diff --git a/experiments/dsv4_h200_dspark/config.env b/experiments/h200/dsv4_h200_dspark/config.env similarity index 100% rename from experiments/dsv4_h200_dspark/config.env rename to experiments/h200/dsv4_h200_dspark/config.env diff --git a/experiments/dsv4_h200_dspark/parse_results.py b/experiments/h200/dsv4_h200_dspark/parse_results.py similarity index 100% rename from experiments/dsv4_h200_dspark/parse_results.py rename to experiments/h200/dsv4_h200_dspark/parse_results.py diff --git a/experiments/dsv4_h200_dspark/run_bench.sh b/experiments/h200/dsv4_h200_dspark/run_bench.sh similarity index 100% rename from experiments/dsv4_h200_dspark/run_bench.sh rename to experiments/h200/dsv4_h200_dspark/run_bench.sh diff --git a/experiments/dsv4_h200_long_context_matrix/compare.py b/experiments/h200/dsv4_h200_long_context_matrix/compare.py similarity index 100% rename from experiments/dsv4_h200_long_context_matrix/compare.py rename to experiments/h200/dsv4_h200_long_context_matrix/compare.py diff --git a/experiments/dsv4_h200_long_context_matrix/config.env b/experiments/h200/dsv4_h200_long_context_matrix/config.env similarity index 100% rename from experiments/dsv4_h200_long_context_matrix/config.env rename to experiments/h200/dsv4_h200_long_context_matrix/config.env diff --git a/experiments/dsv4_h200_long_context_matrix/results/20260708-100016/comparison.md b/experiments/h200/dsv4_h200_long_context_matrix/results/20260708-100016/comparison.md similarity index 100% rename from experiments/dsv4_h200_long_context_matrix/results/20260708-100016/comparison.md rename to experiments/h200/dsv4_h200_long_context_matrix/results/20260708-100016/comparison.md diff --git a/experiments/dsv4_h200_long_context_matrix/results/20260708-100016/sglang/report.md b/experiments/h200/dsv4_h200_long_context_matrix/results/20260708-100016/sglang/report.md similarity index 100% rename from experiments/dsv4_h200_long_context_matrix/results/20260708-100016/sglang/report.md rename to experiments/h200/dsv4_h200_long_context_matrix/results/20260708-100016/sglang/report.md diff --git a/experiments/dsv4_h200_long_context_matrix/results/20260708-100016/sglang/results.json b/experiments/h200/dsv4_h200_long_context_matrix/results/20260708-100016/sglang/results.json similarity index 100% rename from experiments/dsv4_h200_long_context_matrix/results/20260708-100016/sglang/results.json rename to experiments/h200/dsv4_h200_long_context_matrix/results/20260708-100016/sglang/results.json diff --git a/experiments/dsv4_h200_long_context_matrix/results/20260708-100016/vllm/report.md b/experiments/h200/dsv4_h200_long_context_matrix/results/20260708-100016/vllm/report.md similarity index 100% rename from experiments/dsv4_h200_long_context_matrix/results/20260708-100016/vllm/report.md rename to experiments/h200/dsv4_h200_long_context_matrix/results/20260708-100016/vllm/report.md diff --git a/experiments/dsv4_h200_long_context_matrix/results/20260708-100016/vllm/results.json b/experiments/h200/dsv4_h200_long_context_matrix/results/20260708-100016/vllm/results.json similarity index 100% rename from experiments/dsv4_h200_long_context_matrix/results/20260708-100016/vllm/results.json rename to experiments/h200/dsv4_h200_long_context_matrix/results/20260708-100016/vllm/results.json diff --git a/experiments/dsv4_h200_long_context_matrix/results/20260709-020227/comparison.md b/experiments/h200/dsv4_h200_long_context_matrix/results/20260709-020227/comparison.md similarity index 100% rename from experiments/dsv4_h200_long_context_matrix/results/20260709-020227/comparison.md rename to experiments/h200/dsv4_h200_long_context_matrix/results/20260709-020227/comparison.md diff --git a/experiments/dsv4_h200_long_context_matrix/results/20260709-020227/dspark/report.md b/experiments/h200/dsv4_h200_long_context_matrix/results/20260709-020227/dspark/report.md similarity index 100% rename from experiments/dsv4_h200_long_context_matrix/results/20260709-020227/dspark/report.md rename to experiments/h200/dsv4_h200_long_context_matrix/results/20260709-020227/dspark/report.md diff --git a/experiments/dsv4_h200_long_context_matrix/results/20260709-020227/dspark/results.json b/experiments/h200/dsv4_h200_long_context_matrix/results/20260709-020227/dspark/results.json similarity index 100% rename from experiments/dsv4_h200_long_context_matrix/results/20260709-020227/dspark/results.json rename to experiments/h200/dsv4_h200_long_context_matrix/results/20260709-020227/dspark/results.json diff --git a/experiments/dsv4_h200_long_context_matrix/run_bench.sh b/experiments/h200/dsv4_h200_long_context_matrix/run_bench.sh similarity index 100% rename from experiments/dsv4_h200_long_context_matrix/run_bench.sh rename to experiments/h200/dsv4_h200_long_context_matrix/run_bench.sh diff --git a/experiments/dsv4_h200_long_context_matrix/start_dspark.sh b/experiments/h200/dsv4_h200_long_context_matrix/start_dspark.sh similarity index 100% rename from experiments/dsv4_h200_long_context_matrix/start_dspark.sh rename to experiments/h200/dsv4_h200_long_context_matrix/start_dspark.sh diff --git a/experiments/dsv4_h200_long_context_matrix/start_sglang.sh b/experiments/h200/dsv4_h200_long_context_matrix/start_sglang.sh similarity index 100% rename from experiments/dsv4_h200_long_context_matrix/start_sglang.sh rename to experiments/h200/dsv4_h200_long_context_matrix/start_sglang.sh diff --git a/experiments/dsv4_h200_long_context_matrix/start_vllm.sh b/experiments/h200/dsv4_h200_long_context_matrix/start_vllm.sh similarity index 100% rename from experiments/dsv4_h200_long_context_matrix/start_vllm.sh rename to experiments/h200/dsv4_h200_long_context_matrix/start_vllm.sh diff --git a/experiments/dsv4_h200_max_context_length/README.md b/experiments/h200/dsv4_h200_max_context_length/README.md similarity index 100% rename from experiments/dsv4_h200_max_context_length/README.md rename to experiments/h200/dsv4_h200_max_context_length/README.md diff --git a/experiments/dsv4_h200_max_context_length/config.env b/experiments/h200/dsv4_h200_max_context_length/config.env similarity index 100% rename from experiments/dsv4_h200_max_context_length/config.env rename to experiments/h200/dsv4_h200_max_context_length/config.env diff --git a/experiments/dsv4_h200_max_context_length/extract_metrics.py b/experiments/h200/dsv4_h200_max_context_length/extract_metrics.py similarity index 100% rename from experiments/dsv4_h200_max_context_length/extract_metrics.py rename to experiments/h200/dsv4_h200_max_context_length/extract_metrics.py diff --git a/experiments/dsv4_h200_max_context_length/kv_cache_analysis.md b/experiments/h200/dsv4_h200_max_context_length/kv_cache_analysis.md similarity index 100% rename from experiments/dsv4_h200_max_context_length/kv_cache_analysis.md rename to experiments/h200/dsv4_h200_max_context_length/kv_cache_analysis.md diff --git a/experiments/dsv4_h200_max_context_length/parse_results.py b/experiments/h200/dsv4_h200_max_context_length/parse_results.py similarity index 100% rename from experiments/dsv4_h200_max_context_length/parse_results.py rename to experiments/h200/dsv4_h200_max_context_length/parse_results.py diff --git a/experiments/dsv4_h200_max_context_length/results/20260708-143534/report.md b/experiments/h200/dsv4_h200_max_context_length/results/20260708-143534/report.md similarity index 100% rename from experiments/dsv4_h200_max_context_length/results/20260708-143534/report.md rename to experiments/h200/dsv4_h200_max_context_length/results/20260708-143534/report.md diff --git a/experiments/dsv4_h200_max_context_length/results/20260708-143534/results.json b/experiments/h200/dsv4_h200_max_context_length/results/20260708-143534/results.json similarity index 100% rename from experiments/dsv4_h200_max_context_length/results/20260708-143534/results.json rename to experiments/h200/dsv4_h200_max_context_length/results/20260708-143534/results.json diff --git a/experiments/dsv4_h200_max_context_length/run_bench.sh b/experiments/h200/dsv4_h200_max_context_length/run_bench.sh similarity index 100% rename from experiments/dsv4_h200_max_context_length/run_bench.sh rename to experiments/h200/dsv4_h200_max_context_length/run_bench.sh diff --git a/experiments/dsv4_h200_max_context_length/start_sglang.sh b/experiments/h200/dsv4_h200_max_context_length/start_sglang.sh similarity index 100% rename from experiments/dsv4_h200_max_context_length/start_sglang.sh rename to experiments/h200/dsv4_h200_max_context_length/start_sglang.sh diff --git a/experiments/dsv4_h200_max_context_length/start_vllm.sh b/experiments/h200/dsv4_h200_max_context_length/start_vllm.sh similarity index 100% rename from experiments/dsv4_h200_max_context_length/start_vllm.sh rename to experiments/h200/dsv4_h200_max_context_length/start_vllm.sh diff --git a/experiments/dsv4_h200_sglang/README.md b/experiments/h200/dsv4_h200_sglang/README.md similarity index 100% rename from experiments/dsv4_h200_sglang/README.md rename to experiments/h200/dsv4_h200_sglang/README.md diff --git a/experiments/dsv4_h200_sglang/config.env b/experiments/h200/dsv4_h200_sglang/config.env similarity index 100% rename from experiments/dsv4_h200_sglang/config.env rename to experiments/h200/dsv4_h200_sglang/config.env diff --git a/experiments/dsv4_h200_sglang/parse_results.py b/experiments/h200/dsv4_h200_sglang/parse_results.py similarity index 100% rename from experiments/dsv4_h200_sglang/parse_results.py rename to experiments/h200/dsv4_h200_sglang/parse_results.py diff --git a/experiments/dsv4_h200_sglang/results/20260708-065101/report.md b/experiments/h200/dsv4_h200_sglang/results/20260708-065101/report.md similarity index 100% rename from experiments/dsv4_h200_sglang/results/20260708-065101/report.md rename to experiments/h200/dsv4_h200_sglang/results/20260708-065101/report.md diff --git a/experiments/dsv4_h200_sglang/results/20260708-065101/results.json b/experiments/h200/dsv4_h200_sglang/results/20260708-065101/results.json similarity index 100% rename from experiments/dsv4_h200_sglang/results/20260708-065101/results.json rename to experiments/h200/dsv4_h200_sglang/results/20260708-065101/results.json diff --git a/experiments/dsv4_h200_sglang/run_bench.sh b/experiments/h200/dsv4_h200_sglang/run_bench.sh similarity index 100% rename from experiments/dsv4_h200_sglang/run_bench.sh rename to experiments/h200/dsv4_h200_sglang/run_bench.sh diff --git a/experiments/dsv4_h200_sglang/start_server.sh b/experiments/h200/dsv4_h200_sglang/start_server.sh similarity index 100% rename from experiments/dsv4_h200_sglang/start_server.sh rename to experiments/h200/dsv4_h200_sglang/start_server.sh diff --git a/experiments/dsv4_h200_sglang_tp_dp_matrix/README.md b/experiments/h200/dsv4_h200_sglang_tp_dp_matrix/README.md similarity index 100% rename from experiments/dsv4_h200_sglang_tp_dp_matrix/README.md rename to experiments/h200/dsv4_h200_sglang_tp_dp_matrix/README.md diff --git a/experiments/dsv4_h200_sglang_tp_dp_matrix/README_adaptive_concurrency.md b/experiments/h200/dsv4_h200_sglang_tp_dp_matrix/README_adaptive_concurrency.md similarity index 100% rename from experiments/dsv4_h200_sglang_tp_dp_matrix/README_adaptive_concurrency.md rename to experiments/h200/dsv4_h200_sglang_tp_dp_matrix/README_adaptive_concurrency.md diff --git a/experiments/dsv4_h200_sglang_tp_dp_matrix/adaptive_config.env b/experiments/h200/dsv4_h200_sglang_tp_dp_matrix/adaptive_config.env similarity index 100% rename from experiments/dsv4_h200_sglang_tp_dp_matrix/adaptive_config.env rename to experiments/h200/dsv4_h200_sglang_tp_dp_matrix/adaptive_config.env diff --git a/experiments/dsv4_h200_sglang_tp_dp_matrix/compare.py b/experiments/h200/dsv4_h200_sglang_tp_dp_matrix/compare.py similarity index 100% rename from experiments/dsv4_h200_sglang_tp_dp_matrix/compare.py rename to experiments/h200/dsv4_h200_sglang_tp_dp_matrix/compare.py diff --git a/experiments/dsv4_h200_sglang_tp_dp_matrix/config.env b/experiments/h200/dsv4_h200_sglang_tp_dp_matrix/config.env similarity index 100% rename from experiments/dsv4_h200_sglang_tp_dp_matrix/config.env rename to experiments/h200/dsv4_h200_sglang_tp_dp_matrix/config.env diff --git a/experiments/dsv4_h200_sglang_tp_dp_matrix/generate_scenarios.py b/experiments/h200/dsv4_h200_sglang_tp_dp_matrix/generate_scenarios.py similarity index 100% rename from experiments/dsv4_h200_sglang_tp_dp_matrix/generate_scenarios.py rename to experiments/h200/dsv4_h200_sglang_tp_dp_matrix/generate_scenarios.py diff --git a/experiments/dsv4_h200_sglang_tp_dp_matrix/matrix.json b/experiments/h200/dsv4_h200_sglang_tp_dp_matrix/matrix.json similarity index 100% rename from experiments/dsv4_h200_sglang_tp_dp_matrix/matrix.json rename to experiments/h200/dsv4_h200_sglang_tp_dp_matrix/matrix.json diff --git a/experiments/dsv4_h200_sglang_tp_dp_matrix/run_adaptive_concurrency.sh b/experiments/h200/dsv4_h200_sglang_tp_dp_matrix/run_adaptive_concurrency.sh similarity index 100% rename from experiments/dsv4_h200_sglang_tp_dp_matrix/run_adaptive_concurrency.sh rename to experiments/h200/dsv4_h200_sglang_tp_dp_matrix/run_adaptive_concurrency.sh diff --git a/experiments/dsv4_h200_sglang_tp_dp_matrix/run_adaptive_concurrency_add16.sh b/experiments/h200/dsv4_h200_sglang_tp_dp_matrix/run_adaptive_concurrency_add16.sh similarity index 100% rename from experiments/dsv4_h200_sglang_tp_dp_matrix/run_adaptive_concurrency_add16.sh rename to experiments/h200/dsv4_h200_sglang_tp_dp_matrix/run_adaptive_concurrency_add16.sh diff --git a/experiments/dsv4_h200_sglang_tp_dp_matrix/run_bench.sh b/experiments/h200/dsv4_h200_sglang_tp_dp_matrix/run_bench.sh similarity index 100% rename from experiments/dsv4_h200_sglang_tp_dp_matrix/run_bench.sh rename to experiments/h200/dsv4_h200_sglang_tp_dp_matrix/run_bench.sh diff --git a/experiments/dsv4_h20_sglang_tp_dp_matrix/run_sglang_in_container.sh b/experiments/h200/dsv4_h200_sglang_tp_dp_matrix/run_sglang_in_container.sh similarity index 100% rename from experiments/dsv4_h20_sglang_tp_dp_matrix/run_sglang_in_container.sh rename to experiments/h200/dsv4_h200_sglang_tp_dp_matrix/run_sglang_in_container.sh diff --git a/experiments/dsv4_h200_sglang_tp_dp_matrix/smoke_matrix.json b/experiments/h200/dsv4_h200_sglang_tp_dp_matrix/smoke_matrix.json similarity index 100% rename from experiments/dsv4_h200_sglang_tp_dp_matrix/smoke_matrix.json rename to experiments/h200/dsv4_h200_sglang_tp_dp_matrix/smoke_matrix.json diff --git a/experiments/dsv4_h20_sglang_tp_dp_matrix/start_sglang_container.sh b/experiments/h200/dsv4_h200_sglang_tp_dp_matrix/start_sglang_container.sh similarity index 100% rename from experiments/dsv4_h20_sglang_tp_dp_matrix/start_sglang_container.sh rename to experiments/h200/dsv4_h200_sglang_tp_dp_matrix/start_sglang_container.sh diff --git a/experiments/dsv4_h20_sglang_tp_dp_matrix/start_sglang_docker.sh b/experiments/h200/dsv4_h200_sglang_tp_dp_matrix/start_sglang_docker.sh similarity index 100% rename from experiments/dsv4_h20_sglang_tp_dp_matrix/start_sglang_docker.sh rename to experiments/h200/dsv4_h200_sglang_tp_dp_matrix/start_sglang_docker.sh diff --git a/experiments/dsv4_h20_sglang_tp_dp_matrix/start_sglang_dp.sh b/experiments/h200/dsv4_h200_sglang_tp_dp_matrix/start_sglang_dp.sh similarity index 100% rename from experiments/dsv4_h20_sglang_tp_dp_matrix/start_sglang_dp.sh rename to experiments/h200/dsv4_h200_sglang_tp_dp_matrix/start_sglang_dp.sh diff --git a/experiments/dsv4_h200_sglang_vs_vllm/README.md b/experiments/h200/dsv4_h200_sglang_vs_vllm/README.md similarity index 100% rename from experiments/dsv4_h200_sglang_vs_vllm/README.md rename to experiments/h200/dsv4_h200_sglang_vs_vllm/README.md diff --git a/experiments/dsv4_h200_sglang_vs_vllm/config.env b/experiments/h200/dsv4_h200_sglang_vs_vllm/config.env similarity index 100% rename from experiments/dsv4_h200_sglang_vs_vllm/config.env rename to experiments/h200/dsv4_h200_sglang_vs_vllm/config.env diff --git a/experiments/dsv4_h200_sglang_vs_vllm/results/20260708-083346/comparison.md b/experiments/h200/dsv4_h200_sglang_vs_vllm/results/20260708-083346/comparison.md similarity index 100% rename from experiments/dsv4_h200_sglang_vs_vllm/results/20260708-083346/comparison.md rename to experiments/h200/dsv4_h200_sglang_vs_vllm/results/20260708-083346/comparison.md diff --git a/experiments/dsv4_h200_sglang_vs_vllm/results/20260708-083346/sglang/report.md b/experiments/h200/dsv4_h200_sglang_vs_vllm/results/20260708-083346/sglang/report.md similarity index 100% rename from experiments/dsv4_h200_sglang_vs_vllm/results/20260708-083346/sglang/report.md rename to experiments/h200/dsv4_h200_sglang_vs_vllm/results/20260708-083346/sglang/report.md diff --git a/experiments/dsv4_h200_sglang_vs_vllm/results/20260708-083346/sglang/results.json b/experiments/h200/dsv4_h200_sglang_vs_vllm/results/20260708-083346/sglang/results.json similarity index 100% rename from experiments/dsv4_h200_sglang_vs_vllm/results/20260708-083346/sglang/results.json rename to experiments/h200/dsv4_h200_sglang_vs_vllm/results/20260708-083346/sglang/results.json diff --git a/experiments/dsv4_h200_sglang_vs_vllm/results/20260708-083346/vllm/report.md b/experiments/h200/dsv4_h200_sglang_vs_vllm/results/20260708-083346/vllm/report.md similarity index 100% rename from experiments/dsv4_h200_sglang_vs_vllm/results/20260708-083346/vllm/report.md rename to experiments/h200/dsv4_h200_sglang_vs_vllm/results/20260708-083346/vllm/report.md diff --git a/experiments/dsv4_h200_sglang_vs_vllm/results/20260708-083346/vllm/results.json b/experiments/h200/dsv4_h200_sglang_vs_vllm/results/20260708-083346/vllm/results.json similarity index 100% rename from experiments/dsv4_h200_sglang_vs_vllm/results/20260708-083346/vllm/results.json rename to experiments/h200/dsv4_h200_sglang_vs_vllm/results/20260708-083346/vllm/results.json diff --git a/experiments/dsv4_h200_sglang_vs_vllm/run_bench.sh b/experiments/h200/dsv4_h200_sglang_vs_vllm/run_bench.sh similarity index 100% rename from experiments/dsv4_h200_sglang_vs_vllm/run_bench.sh rename to experiments/h200/dsv4_h200_sglang_vs_vllm/run_bench.sh diff --git a/experiments/dsv4_h200_sglang_vs_vllm/start_sglang.sh b/experiments/h200/dsv4_h200_sglang_vs_vllm/start_sglang.sh similarity index 100% rename from experiments/dsv4_h200_sglang_vs_vllm/start_sglang.sh rename to experiments/h200/dsv4_h200_sglang_vs_vllm/start_sglang.sh diff --git a/experiments/dsv4_h200_sglang_vs_vllm/start_vllm.sh b/experiments/h200/dsv4_h200_sglang_vs_vllm/start_vllm.sh similarity index 100% rename from experiments/dsv4_h200_sglang_vs_vllm/start_vllm.sh rename to experiments/h200/dsv4_h200_sglang_vs_vllm/start_vllm.sh diff --git a/experiments/dsv4_h200_vllm/README.md b/experiments/h200/dsv4_h200_vllm/README.md similarity index 100% rename from experiments/dsv4_h200_vllm/README.md rename to experiments/h200/dsv4_h200_vllm/README.md diff --git a/experiments/dsv4_h200_vllm/config.env b/experiments/h200/dsv4_h200_vllm/config.env similarity index 100% rename from experiments/dsv4_h200_vllm/config.env rename to experiments/h200/dsv4_h200_vllm/config.env diff --git a/experiments/dsv4_h200_vllm/parse_results.py b/experiments/h200/dsv4_h200_vllm/parse_results.py similarity index 100% rename from experiments/dsv4_h200_vllm/parse_results.py rename to experiments/h200/dsv4_h200_vllm/parse_results.py diff --git a/experiments/dsv4_h200_vllm/results/20260708-062348/report.md b/experiments/h200/dsv4_h200_vllm/results/20260708-062348/report.md similarity index 100% rename from experiments/dsv4_h200_vllm/results/20260708-062348/report.md rename to experiments/h200/dsv4_h200_vllm/results/20260708-062348/report.md diff --git a/experiments/dsv4_h200_vllm/results/20260708-062348/results.json b/experiments/h200/dsv4_h200_vllm/results/20260708-062348/results.json similarity index 100% rename from experiments/dsv4_h200_vllm/results/20260708-062348/results.json rename to experiments/h200/dsv4_h200_vllm/results/20260708-062348/results.json diff --git a/experiments/dsv4_h200_vllm/run_bench.sh b/experiments/h200/dsv4_h200_vllm/run_bench.sh similarity index 100% rename from experiments/dsv4_h200_vllm/run_bench.sh rename to experiments/h200/dsv4_h200_vllm/run_bench.sh diff --git a/experiments/dsv4_h200_vllm/start_server.sh b/experiments/h200/dsv4_h200_vllm/start_server.sh similarity index 100% rename from experiments/dsv4_h200_vllm/start_server.sh rename to experiments/h200/dsv4_h200_vllm/start_server.sh diff --git a/experiments/dsv4_h200_vllm_dspark_vs_default/README.md b/experiments/h200/dsv4_h200_vllm_dspark_vs_default/README.md similarity index 100% rename from experiments/dsv4_h200_vllm_dspark_vs_default/README.md rename to experiments/h200/dsv4_h200_vllm_dspark_vs_default/README.md diff --git a/experiments/dsv4_h200_vllm_dspark_vs_default/compare.py b/experiments/h200/dsv4_h200_vllm_dspark_vs_default/compare.py similarity index 100% rename from experiments/dsv4_h200_vllm_dspark_vs_default/compare.py rename to experiments/h200/dsv4_h200_vllm_dspark_vs_default/compare.py diff --git a/experiments/dsv4_h200_vllm_dspark_vs_default/config.env b/experiments/h200/dsv4_h200_vllm_dspark_vs_default/config.env similarity index 100% rename from experiments/dsv4_h200_vllm_dspark_vs_default/config.env rename to experiments/h200/dsv4_h200_vllm_dspark_vs_default/config.env diff --git a/experiments/dsv4_h200_vllm_dspark_vs_default/parse_backend.py b/experiments/h200/dsv4_h200_vllm_dspark_vs_default/parse_backend.py similarity index 100% rename from experiments/dsv4_h200_vllm_dspark_vs_default/parse_backend.py rename to experiments/h200/dsv4_h200_vllm_dspark_vs_default/parse_backend.py diff --git a/experiments/dsv4_h200_vllm_dspark_vs_default/results/20260708-142121/comparison.md b/experiments/h200/dsv4_h200_vllm_dspark_vs_default/results/20260708-142121/comparison.md similarity index 100% rename from experiments/dsv4_h200_vllm_dspark_vs_default/results/20260708-142121/comparison.md rename to experiments/h200/dsv4_h200_vllm_dspark_vs_default/results/20260708-142121/comparison.md diff --git a/experiments/dsv4_h200_vllm_dspark_vs_default/results/20260708-142121/default/report.md b/experiments/h200/dsv4_h200_vllm_dspark_vs_default/results/20260708-142121/default/report.md similarity index 100% rename from experiments/dsv4_h200_vllm_dspark_vs_default/results/20260708-142121/default/report.md rename to experiments/h200/dsv4_h200_vllm_dspark_vs_default/results/20260708-142121/default/report.md diff --git a/experiments/dsv4_h200_vllm_dspark_vs_default/results/20260708-142121/default/results.json b/experiments/h200/dsv4_h200_vllm_dspark_vs_default/results/20260708-142121/default/results.json similarity index 100% rename from experiments/dsv4_h200_vllm_dspark_vs_default/results/20260708-142121/default/results.json rename to experiments/h200/dsv4_h200_vllm_dspark_vs_default/results/20260708-142121/default/results.json diff --git a/experiments/dsv4_h200_vllm_dspark_vs_default/results/20260708-142121/dspark/report.md b/experiments/h200/dsv4_h200_vllm_dspark_vs_default/results/20260708-142121/dspark/report.md similarity index 100% rename from experiments/dsv4_h200_vllm_dspark_vs_default/results/20260708-142121/dspark/report.md rename to experiments/h200/dsv4_h200_vllm_dspark_vs_default/results/20260708-142121/dspark/report.md diff --git a/experiments/dsv4_h200_vllm_dspark_vs_default/results/20260708-142121/dspark/results.json b/experiments/h200/dsv4_h200_vllm_dspark_vs_default/results/20260708-142121/dspark/results.json similarity index 100% rename from experiments/dsv4_h200_vllm_dspark_vs_default/results/20260708-142121/dspark/results.json rename to experiments/h200/dsv4_h200_vllm_dspark_vs_default/results/20260708-142121/dspark/results.json diff --git a/experiments/dsv4_h200_vllm_dspark_vs_default/results/20260708-142121/ttft_analysis.md b/experiments/h200/dsv4_h200_vllm_dspark_vs_default/results/20260708-142121/ttft_analysis.md similarity index 100% rename from experiments/dsv4_h200_vllm_dspark_vs_default/results/20260708-142121/ttft_analysis.md rename to experiments/h200/dsv4_h200_vllm_dspark_vs_default/results/20260708-142121/ttft_analysis.md diff --git a/experiments/dsv4_h200_vllm_dspark_vs_default/run_bench.sh b/experiments/h200/dsv4_h200_vllm_dspark_vs_default/run_bench.sh similarity index 100% rename from experiments/dsv4_h200_vllm_dspark_vs_default/run_bench.sh rename to experiments/h200/dsv4_h200_vllm_dspark_vs_default/run_bench.sh diff --git a/experiments/dsv4_h200_vllm_dspark_vs_default/start_default.sh b/experiments/h200/dsv4_h200_vllm_dspark_vs_default/start_default.sh similarity index 100% rename from experiments/dsv4_h200_vllm_dspark_vs_default/start_default.sh rename to experiments/h200/dsv4_h200_vllm_dspark_vs_default/start_default.sh diff --git a/experiments/dsv4_h200_vllm_dspark_vs_default/start_dspark.sh b/experiments/h200/dsv4_h200_vllm_dspark_vs_default/start_dspark.sh similarity index 100% rename from experiments/dsv4_h200_vllm_dspark_vs_default/start_dspark.sh rename to experiments/h200/dsv4_h200_vllm_dspark_vs_default/start_dspark.sh diff --git a/experiments/dsv4_h200_vllm_mtp_vs_default/compare.py b/experiments/h200/dsv4_h200_vllm_mtp_vs_default/compare.py similarity index 100% rename from experiments/dsv4_h200_vllm_mtp_vs_default/compare.py rename to experiments/h200/dsv4_h200_vllm_mtp_vs_default/compare.py diff --git a/experiments/dsv4_h200_vllm_mtp_vs_default/config.env b/experiments/h200/dsv4_h200_vllm_mtp_vs_default/config.env similarity index 100% rename from experiments/dsv4_h200_vllm_mtp_vs_default/config.env rename to experiments/h200/dsv4_h200_vllm_mtp_vs_default/config.env diff --git a/experiments/dsv4_h200_vllm_mtp_vs_default/results/20260708-160349/comparison.md b/experiments/h200/dsv4_h200_vllm_mtp_vs_default/results/20260708-160349/comparison.md similarity index 100% rename from experiments/dsv4_h200_vllm_mtp_vs_default/results/20260708-160349/comparison.md rename to experiments/h200/dsv4_h200_vllm_mtp_vs_default/results/20260708-160349/comparison.md diff --git a/experiments/dsv4_h200_vllm_mtp_vs_default/results/20260708-160349/mtp/report.md b/experiments/h200/dsv4_h200_vllm_mtp_vs_default/results/20260708-160349/mtp/report.md similarity index 100% rename from experiments/dsv4_h200_vllm_mtp_vs_default/results/20260708-160349/mtp/report.md rename to experiments/h200/dsv4_h200_vllm_mtp_vs_default/results/20260708-160349/mtp/report.md diff --git a/experiments/dsv4_h200_vllm_mtp_vs_default/results/20260708-160349/mtp/results.json b/experiments/h200/dsv4_h200_vllm_mtp_vs_default/results/20260708-160349/mtp/results.json similarity index 100% rename from experiments/dsv4_h200_vllm_mtp_vs_default/results/20260708-160349/mtp/results.json rename to experiments/h200/dsv4_h200_vllm_mtp_vs_default/results/20260708-160349/mtp/results.json diff --git a/experiments/dsv4_h200_vllm_mtp_vs_default/results/20260708-160349/three_way_comparison.md b/experiments/h200/dsv4_h200_vllm_mtp_vs_default/results/20260708-160349/three_way_comparison.md similarity index 100% rename from experiments/dsv4_h200_vllm_mtp_vs_default/results/20260708-160349/three_way_comparison.md rename to experiments/h200/dsv4_h200_vllm_mtp_vs_default/results/20260708-160349/three_way_comparison.md diff --git a/experiments/dsv4_h200_vllm_mtp_vs_default/run_bench.sh b/experiments/h200/dsv4_h200_vllm_mtp_vs_default/run_bench.sh similarity index 100% rename from experiments/dsv4_h200_vllm_mtp_vs_default/run_bench.sh rename to experiments/h200/dsv4_h200_vllm_mtp_vs_default/run_bench.sh diff --git a/experiments/dsv4_h200_vllm_mtp_vs_default/start_mtp.sh b/experiments/h200/dsv4_h200_vllm_mtp_vs_default/start_mtp.sh similarity index 100% rename from experiments/dsv4_h200_vllm_mtp_vs_default/start_mtp.sh rename to experiments/h200/dsv4_h200_vllm_mtp_vs_default/start_mtp.sh diff --git a/experiments/dsv4_h200_vllm_tp2_custom_bench/README.md b/experiments/h200/dsv4_h200_vllm_tp2_custom_bench/README.md similarity index 100% rename from experiments/dsv4_h200_vllm_tp2_custom_bench/README.md rename to experiments/h200/dsv4_h200_vllm_tp2_custom_bench/README.md diff --git a/experiments/dsv4_h200_vllm_tp2_custom_bench/bench_client.py b/experiments/h200/dsv4_h200_vllm_tp2_custom_bench/bench_client.py similarity index 100% rename from experiments/dsv4_h200_vllm_tp2_custom_bench/bench_client.py rename to experiments/h200/dsv4_h200_vllm_tp2_custom_bench/bench_client.py diff --git a/experiments/dsv4_h200_vllm_tp2_custom_bench/config.env b/experiments/h200/dsv4_h200_vllm_tp2_custom_bench/config.env similarity index 100% rename from experiments/dsv4_h200_vllm_tp2_custom_bench/config.env rename to experiments/h200/dsv4_h200_vllm_tp2_custom_bench/config.env diff --git a/experiments/dsv4_h200_vllm_tp2_custom_bench/parse_results.py b/experiments/h200/dsv4_h200_vllm_tp2_custom_bench/parse_results.py similarity index 100% rename from experiments/dsv4_h200_vllm_tp2_custom_bench/parse_results.py rename to experiments/h200/dsv4_h200_vllm_tp2_custom_bench/parse_results.py diff --git a/experiments/dsv4_h200_vllm_tp2_custom_bench/results/20260710-104930/results.json b/experiments/h200/dsv4_h200_vllm_tp2_custom_bench/results/20260710-104930/results.json similarity index 100% rename from experiments/dsv4_h200_vllm_tp2_custom_bench/results/20260710-104930/results.json rename to experiments/h200/dsv4_h200_vllm_tp2_custom_bench/results/20260710-104930/results.json diff --git a/experiments/dsv4_h200_vllm_tp2_custom_bench/run_bench.sh b/experiments/h200/dsv4_h200_vllm_tp2_custom_bench/run_bench.sh similarity index 100% rename from experiments/dsv4_h200_vllm_tp2_custom_bench/run_bench.sh rename to experiments/h200/dsv4_h200_vllm_tp2_custom_bench/run_bench.sh diff --git a/experiments/dsv4_h200_vllm_tp2_custom_bench/start_server.sh b/experiments/h200/dsv4_h200_vllm_tp2_custom_bench/start_server.sh similarity index 100% rename from experiments/dsv4_h200_vllm_tp2_custom_bench/start_server.sh rename to experiments/h200/dsv4_h200_vllm_tp2_custom_bench/start_server.sh diff --git a/experiments/dsv4_h200_vllm_tp4_custom_bench/README.md b/experiments/h200/dsv4_h200_vllm_tp4_custom_bench/README.md similarity index 100% rename from experiments/dsv4_h200_vllm_tp4_custom_bench/README.md rename to experiments/h200/dsv4_h200_vllm_tp4_custom_bench/README.md diff --git a/experiments/dsv4_h200_vllm_tp4_custom_bench/bench_client.py b/experiments/h200/dsv4_h200_vllm_tp4_custom_bench/bench_client.py similarity index 100% rename from experiments/dsv4_h200_vllm_tp4_custom_bench/bench_client.py rename to experiments/h200/dsv4_h200_vllm_tp4_custom_bench/bench_client.py diff --git a/experiments/dsv4_h200_vllm_tp4_custom_bench/config.env b/experiments/h200/dsv4_h200_vllm_tp4_custom_bench/config.env similarity index 100% rename from experiments/dsv4_h200_vllm_tp4_custom_bench/config.env rename to experiments/h200/dsv4_h200_vllm_tp4_custom_bench/config.env diff --git a/experiments/dsv4_h200_vllm_tp4_custom_bench/parse_results.py b/experiments/h200/dsv4_h200_vllm_tp4_custom_bench/parse_results.py similarity index 100% rename from experiments/dsv4_h200_vllm_tp4_custom_bench/parse_results.py rename to experiments/h200/dsv4_h200_vllm_tp4_custom_bench/parse_results.py diff --git a/experiments/dsv4_h200_vllm_tp4_custom_bench/results/20260711-133908/report.md b/experiments/h200/dsv4_h200_vllm_tp4_custom_bench/results/20260711-133908/report.md similarity index 100% rename from experiments/dsv4_h200_vllm_tp4_custom_bench/results/20260711-133908/report.md rename to experiments/h200/dsv4_h200_vllm_tp4_custom_bench/results/20260711-133908/report.md diff --git a/experiments/dsv4_h200_vllm_tp4_custom_bench/results/20260711-133908/results.json b/experiments/h200/dsv4_h200_vllm_tp4_custom_bench/results/20260711-133908/results.json similarity index 100% rename from experiments/dsv4_h200_vllm_tp4_custom_bench/results/20260711-133908/results.json rename to experiments/h200/dsv4_h200_vllm_tp4_custom_bench/results/20260711-133908/results.json diff --git a/experiments/dsv4_h200_vllm_tp4_custom_bench/run_bench.sh b/experiments/h200/dsv4_h200_vllm_tp4_custom_bench/run_bench.sh similarity index 100% rename from experiments/dsv4_h200_vllm_tp4_custom_bench/run_bench.sh rename to experiments/h200/dsv4_h200_vllm_tp4_custom_bench/run_bench.sh diff --git a/experiments/dsv4_h200_vllm_tp4_custom_bench/start_server.sh b/experiments/h200/dsv4_h200_vllm_tp4_custom_bench/start_server.sh similarity index 100% rename from experiments/dsv4_h200_vllm_tp4_custom_bench/start_server.sh rename to experiments/h200/dsv4_h200_vllm_tp4_custom_bench/start_server.sh diff --git a/experiments/dsv4_h200_vllm_tp8_custom_bench/README.md b/experiments/h200/dsv4_h200_vllm_tp8_custom_bench/README.md similarity index 100% rename from experiments/dsv4_h200_vllm_tp8_custom_bench/README.md rename to experiments/h200/dsv4_h200_vllm_tp8_custom_bench/README.md diff --git a/experiments/dsv4_h200_vllm_tp8_custom_bench/bench_client.py b/experiments/h200/dsv4_h200_vllm_tp8_custom_bench/bench_client.py similarity index 100% rename from experiments/dsv4_h200_vllm_tp8_custom_bench/bench_client.py rename to experiments/h200/dsv4_h200_vllm_tp8_custom_bench/bench_client.py diff --git a/experiments/dsv4_h200_vllm_tp8_custom_bench/config.env b/experiments/h200/dsv4_h200_vllm_tp8_custom_bench/config.env similarity index 100% rename from experiments/dsv4_h200_vllm_tp8_custom_bench/config.env rename to experiments/h200/dsv4_h200_vllm_tp8_custom_bench/config.env diff --git a/experiments/dsv4_h200_vllm_tp8_custom_bench/parse_results.py b/experiments/h200/dsv4_h200_vllm_tp8_custom_bench/parse_results.py similarity index 100% rename from experiments/dsv4_h200_vllm_tp8_custom_bench/parse_results.py rename to experiments/h200/dsv4_h200_vllm_tp8_custom_bench/parse_results.py diff --git a/experiments/dsv4_h200_vllm_tp8_custom_bench/results/20260711-193756/report.md b/experiments/h200/dsv4_h200_vllm_tp8_custom_bench/results/20260711-193756/report.md similarity index 100% rename from experiments/dsv4_h200_vllm_tp8_custom_bench/results/20260711-193756/report.md rename to experiments/h200/dsv4_h200_vllm_tp8_custom_bench/results/20260711-193756/report.md diff --git a/experiments/dsv4_h200_vllm_tp8_custom_bench/results/20260711-193756/results.json b/experiments/h200/dsv4_h200_vllm_tp8_custom_bench/results/20260711-193756/results.json similarity index 100% rename from experiments/dsv4_h200_vllm_tp8_custom_bench/results/20260711-193756/results.json rename to experiments/h200/dsv4_h200_vllm_tp8_custom_bench/results/20260711-193756/results.json diff --git a/experiments/dsv4_h200_vllm_tp8_custom_bench/run_bench.sh b/experiments/h200/dsv4_h200_vllm_tp8_custom_bench/run_bench.sh similarity index 100% rename from experiments/dsv4_h200_vllm_tp8_custom_bench/run_bench.sh rename to experiments/h200/dsv4_h200_vllm_tp8_custom_bench/run_bench.sh diff --git a/experiments/dsv4_h200_vllm_tp8_custom_bench/start_server.sh b/experiments/h200/dsv4_h200_vllm_tp8_custom_bench/start_server.sh similarity index 100% rename from experiments/dsv4_h200_vllm_tp8_custom_bench/start_server.sh rename to experiments/h200/dsv4_h200_vllm_tp8_custom_bench/start_server.sh diff --git a/experiments/dsv4_h200_vllm_tp_dp_matrix/README_adaptive_concurrency.md b/experiments/h200/dsv4_h200_vllm_tp_dp_matrix/README_adaptive_concurrency.md similarity index 100% rename from experiments/dsv4_h200_vllm_tp_dp_matrix/README_adaptive_concurrency.md rename to experiments/h200/dsv4_h200_vllm_tp_dp_matrix/README_adaptive_concurrency.md diff --git a/experiments/dsv4_h200_vllm_tp_dp_matrix/adaptive_config.env b/experiments/h200/dsv4_h200_vllm_tp_dp_matrix/adaptive_config.env similarity index 100% rename from experiments/dsv4_h200_vllm_tp_dp_matrix/adaptive_config.env rename to experiments/h200/dsv4_h200_vllm_tp_dp_matrix/adaptive_config.env diff --git a/experiments/dsv4_h200_vllm_tp_dp_matrix/compare.py b/experiments/h200/dsv4_h200_vllm_tp_dp_matrix/compare.py similarity index 100% rename from experiments/dsv4_h200_vllm_tp_dp_matrix/compare.py rename to experiments/h200/dsv4_h200_vllm_tp_dp_matrix/compare.py diff --git a/experiments/dsv4_h200_vllm_tp_dp_matrix/config.env b/experiments/h200/dsv4_h200_vllm_tp_dp_matrix/config.env similarity index 100% rename from experiments/dsv4_h200_vllm_tp_dp_matrix/config.env rename to experiments/h200/dsv4_h200_vllm_tp_dp_matrix/config.env diff --git a/experiments/dsv4_h200_vllm_tp_dp_matrix/generate_scenarios.py b/experiments/h200/dsv4_h200_vllm_tp_dp_matrix/generate_scenarios.py similarity index 100% rename from experiments/dsv4_h200_vllm_tp_dp_matrix/generate_scenarios.py rename to experiments/h200/dsv4_h200_vllm_tp_dp_matrix/generate_scenarios.py diff --git a/experiments/dsv4_h200_vllm_tp_dp_matrix/matrix.json b/experiments/h200/dsv4_h200_vllm_tp_dp_matrix/matrix.json similarity index 100% rename from experiments/dsv4_h200_vllm_tp_dp_matrix/matrix.json rename to experiments/h200/dsv4_h200_vllm_tp_dp_matrix/matrix.json diff --git a/experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/comparison.md b/experiments/h200/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/comparison.md similarity index 100% rename from experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/comparison.md rename to experiments/h200/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/comparison.md diff --git a/experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/skipped_after_oom.csv b/experiments/h200/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/skipped_after_oom.csv similarity index 100% rename from experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/skipped_after_oom.csv rename to experiments/h200/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/skipped_after_oom.csv diff --git a/experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp2_dp4/report.md b/experiments/h200/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp2_dp4/report.md similarity index 100% rename from experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp2_dp4/report.md rename to experiments/h200/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp2_dp4/report.md diff --git a/experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp2_dp4/results.json b/experiments/h200/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp2_dp4/results.json similarity index 100% rename from experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp2_dp4/results.json rename to experiments/h200/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp2_dp4/results.json diff --git a/experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp2_dp4/scenarios.tsv b/experiments/h200/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp2_dp4/scenarios.tsv similarity index 100% rename from experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp2_dp4/scenarios.tsv rename to experiments/h200/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp2_dp4/scenarios.tsv diff --git a/experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp4_dp2/report.md b/experiments/h200/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp4_dp2/report.md similarity index 100% rename from experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp4_dp2/report.md rename to experiments/h200/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp4_dp2/report.md diff --git a/experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp4_dp2/results.json b/experiments/h200/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp4_dp2/results.json similarity index 100% rename from experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp4_dp2/results.json rename to experiments/h200/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp4_dp2/results.json diff --git a/experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp4_dp2/scenarios.tsv b/experiments/h200/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp4_dp2/scenarios.tsv similarity index 100% rename from experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp4_dp2/scenarios.tsv rename to experiments/h200/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp4_dp2/scenarios.tsv diff --git a/experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp8_dp1/report.md b/experiments/h200/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp8_dp1/report.md similarity index 100% rename from experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp8_dp1/report.md rename to experiments/h200/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp8_dp1/report.md diff --git a/experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp8_dp1/results.json b/experiments/h200/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp8_dp1/results.json similarity index 100% rename from experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp8_dp1/results.json rename to experiments/h200/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp8_dp1/results.json diff --git a/experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp8_dp1/scenarios.tsv b/experiments/h200/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp8_dp1/scenarios.tsv similarity index 100% rename from experiments/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp8_dp1/scenarios.tsv rename to experiments/h200/dsv4_h200_vllm_tp_dp_matrix/results/20260709-152419_matrix/tp8_dp1/scenarios.tsv diff --git a/experiments/dsv4_h200_vllm_tp_dp_matrix/run_adaptive_concurrency.sh b/experiments/h200/dsv4_h200_vllm_tp_dp_matrix/run_adaptive_concurrency.sh similarity index 100% rename from experiments/dsv4_h200_vllm_tp_dp_matrix/run_adaptive_concurrency.sh rename to experiments/h200/dsv4_h200_vllm_tp_dp_matrix/run_adaptive_concurrency.sh diff --git a/experiments/dsv4_h200_vllm_tp_dp_matrix/run_adaptive_concurrency_add16.sh b/experiments/h200/dsv4_h200_vllm_tp_dp_matrix/run_adaptive_concurrency_add16.sh similarity index 100% rename from experiments/dsv4_h200_vllm_tp_dp_matrix/run_adaptive_concurrency_add16.sh rename to experiments/h200/dsv4_h200_vllm_tp_dp_matrix/run_adaptive_concurrency_add16.sh diff --git a/experiments/dsv4_h200_vllm_tp_dp_matrix/run_bench.sh b/experiments/h200/dsv4_h200_vllm_tp_dp_matrix/run_bench.sh similarity index 100% rename from experiments/dsv4_h200_vllm_tp_dp_matrix/run_bench.sh rename to experiments/h200/dsv4_h200_vllm_tp_dp_matrix/run_bench.sh diff --git a/experiments/dsv4_h200_vllm_tp_dp_matrix/smoke_matrix.json b/experiments/h200/dsv4_h200_vllm_tp_dp_matrix/smoke_matrix.json similarity index 100% rename from experiments/dsv4_h200_vllm_tp_dp_matrix/smoke_matrix.json rename to experiments/h200/dsv4_h200_vllm_tp_dp_matrix/smoke_matrix.json diff --git a/experiments/dsv4_h200_vllm_tp_dp_matrix/start_vllm_docker.sh b/experiments/h200/dsv4_h200_vllm_tp_dp_matrix/start_vllm_docker.sh similarity index 100% rename from experiments/dsv4_h200_vllm_tp_dp_matrix/start_vllm_docker.sh rename to experiments/h200/dsv4_h200_vllm_tp_dp_matrix/start_vllm_docker.sh diff --git a/experiments/dsv4_h20_vllm_tp_dp_matrix/start_vllm_dp.sh b/experiments/h200/dsv4_h200_vllm_tp_dp_matrix/start_vllm_dp.sh similarity index 100% rename from experiments/dsv4_h20_vllm_tp_dp_matrix/start_vllm_dp.sh rename to experiments/h200/dsv4_h200_vllm_tp_dp_matrix/start_vllm_dp.sh diff --git a/experiments/dsv4_p800_long_context_matrix/README.md b/experiments/p800/dsv4_p800_long_context_matrix/README.md similarity index 100% rename from experiments/dsv4_p800_long_context_matrix/README.md rename to experiments/p800/dsv4_p800_long_context_matrix/README.md diff --git a/experiments/dsv4_p800_long_context_matrix/config.env b/experiments/p800/dsv4_p800_long_context_matrix/config.env similarity index 100% rename from experiments/dsv4_p800_long_context_matrix/config.env rename to experiments/p800/dsv4_p800_long_context_matrix/config.env diff --git a/experiments/dsv4_p800_long_context_matrix/run_bench.sh b/experiments/p800/dsv4_p800_long_context_matrix/run_bench.sh similarity index 100% rename from experiments/dsv4_p800_long_context_matrix/run_bench.sh rename to experiments/p800/dsv4_p800_long_context_matrix/run_bench.sh diff --git a/experiments/dsv4_p800_long_context_matrix/start_sglang.sh b/experiments/p800/dsv4_p800_long_context_matrix/start_sglang.sh similarity index 100% rename from experiments/dsv4_p800_long_context_matrix/start_sglang.sh rename to experiments/p800/dsv4_p800_long_context_matrix/start_sglang.sh diff --git a/experiments/dsv4_p800_max_context_length/README.md b/experiments/p800/dsv4_p800_max_context_length/README.md similarity index 100% rename from experiments/dsv4_p800_max_context_length/README.md rename to experiments/p800/dsv4_p800_max_context_length/README.md diff --git a/experiments/dsv4_p800_max_context_length/config.env b/experiments/p800/dsv4_p800_max_context_length/config.env similarity index 100% rename from experiments/dsv4_p800_max_context_length/config.env rename to experiments/p800/dsv4_p800_max_context_length/config.env diff --git a/experiments/dsv4_p800_max_context_length/extract_metrics.py b/experiments/p800/dsv4_p800_max_context_length/extract_metrics.py similarity index 100% rename from experiments/dsv4_p800_max_context_length/extract_metrics.py rename to experiments/p800/dsv4_p800_max_context_length/extract_metrics.py diff --git a/experiments/dsv4_p800_max_context_length/parse_results.py b/experiments/p800/dsv4_p800_max_context_length/parse_results.py similarity index 100% rename from experiments/dsv4_p800_max_context_length/parse_results.py rename to experiments/p800/dsv4_p800_max_context_length/parse_results.py diff --git a/experiments/dsv4_p800_max_context_length/results/20260709-032422/report.md b/experiments/p800/dsv4_p800_max_context_length/results/20260709-032422/report.md similarity index 100% rename from experiments/dsv4_p800_max_context_length/results/20260709-032422/report.md rename to experiments/p800/dsv4_p800_max_context_length/results/20260709-032422/report.md diff --git a/experiments/dsv4_p800_max_context_length/results/20260709-032422/results.json b/experiments/p800/dsv4_p800_max_context_length/results/20260709-032422/results.json similarity index 100% rename from experiments/dsv4_p800_max_context_length/results/20260709-032422/results.json rename to experiments/p800/dsv4_p800_max_context_length/results/20260709-032422/results.json diff --git a/experiments/dsv4_p800_max_context_length/results/20260709-033134/report.md b/experiments/p800/dsv4_p800_max_context_length/results/20260709-033134/report.md similarity index 100% rename from experiments/dsv4_p800_max_context_length/results/20260709-033134/report.md rename to experiments/p800/dsv4_p800_max_context_length/results/20260709-033134/report.md diff --git a/experiments/dsv4_p800_max_context_length/results/20260709-033134/results.json b/experiments/p800/dsv4_p800_max_context_length/results/20260709-033134/results.json similarity index 100% rename from experiments/dsv4_p800_max_context_length/results/20260709-033134/results.json rename to experiments/p800/dsv4_p800_max_context_length/results/20260709-033134/results.json diff --git a/experiments/dsv4_p800_max_context_length/run_bench.sh b/experiments/p800/dsv4_p800_max_context_length/run_bench.sh similarity index 100% rename from experiments/dsv4_p800_max_context_length/run_bench.sh rename to experiments/p800/dsv4_p800_max_context_length/run_bench.sh diff --git a/experiments/dsv4_p800_max_context_length/start_server.sh b/experiments/p800/dsv4_p800_max_context_length/start_server.sh similarity index 100% rename from experiments/dsv4_p800_max_context_length/start_server.sh rename to experiments/p800/dsv4_p800_max_context_length/start_server.sh diff --git a/experiments/dsv4_p800_sglang/README.md b/experiments/p800/dsv4_p800_sglang/README.md similarity index 100% rename from experiments/dsv4_p800_sglang/README.md rename to experiments/p800/dsv4_p800_sglang/README.md diff --git a/experiments/dsv4_p800_sglang/config.env b/experiments/p800/dsv4_p800_sglang/config.env similarity index 100% rename from experiments/dsv4_p800_sglang/config.env rename to experiments/p800/dsv4_p800_sglang/config.env diff --git a/experiments/dsv4_p800_sglang/parse_results.py b/experiments/p800/dsv4_p800_sglang/parse_results.py similarity index 100% rename from experiments/dsv4_p800_sglang/parse_results.py rename to experiments/p800/dsv4_p800_sglang/parse_results.py diff --git a/experiments/dsv4_p800_sglang/run_bench.sh b/experiments/p800/dsv4_p800_sglang/run_bench.sh similarity index 100% rename from experiments/dsv4_p800_sglang/run_bench.sh rename to experiments/p800/dsv4_p800_sglang/run_bench.sh diff --git a/experiments/dsv4_p800_sglang/start_server.sh b/experiments/p800/dsv4_p800_sglang/start_server.sh similarity index 100% rename from experiments/dsv4_p800_sglang/start_server.sh rename to experiments/p800/dsv4_p800_sglang/start_server.sh diff --git a/experiments/dsv4_h20_sglang_tp_dp_matrix/adaptive_config.env b/experiments/pro6000/dsv4_pro6000_sglang_tp_dp_matrix/adaptive_config.env similarity index 100% rename from experiments/dsv4_h20_sglang_tp_dp_matrix/adaptive_config.env rename to experiments/pro6000/dsv4_pro6000_sglang_tp_dp_matrix/adaptive_config.env diff --git a/experiments/dsv4_pro6000_sglang_tp_dp_matrix/compare.py b/experiments/pro6000/dsv4_pro6000_sglang_tp_dp_matrix/compare.py similarity index 100% rename from experiments/dsv4_pro6000_sglang_tp_dp_matrix/compare.py rename to experiments/pro6000/dsv4_pro6000_sglang_tp_dp_matrix/compare.py diff --git a/experiments/dsv4_pro6000_sglang_tp_dp_matrix/config.env b/experiments/pro6000/dsv4_pro6000_sglang_tp_dp_matrix/config.env similarity index 100% rename from experiments/dsv4_pro6000_sglang_tp_dp_matrix/config.env rename to experiments/pro6000/dsv4_pro6000_sglang_tp_dp_matrix/config.env diff --git a/experiments/dsv4_pro6000_sglang_tp_dp_matrix/generate_scenarios.py b/experiments/pro6000/dsv4_pro6000_sglang_tp_dp_matrix/generate_scenarios.py similarity index 100% rename from experiments/dsv4_pro6000_sglang_tp_dp_matrix/generate_scenarios.py rename to experiments/pro6000/dsv4_pro6000_sglang_tp_dp_matrix/generate_scenarios.py diff --git a/experiments/dsv4_pro6000_sglang_tp_dp_matrix/matrix.json b/experiments/pro6000/dsv4_pro6000_sglang_tp_dp_matrix/matrix.json similarity index 100% rename from experiments/dsv4_pro6000_sglang_tp_dp_matrix/matrix.json rename to experiments/pro6000/dsv4_pro6000_sglang_tp_dp_matrix/matrix.json diff --git a/experiments/dsv4_h20_sglang_tp_dp_matrix/run_adaptive_concurrency.sh b/experiments/pro6000/dsv4_pro6000_sglang_tp_dp_matrix/run_adaptive_concurrency.sh similarity index 100% rename from experiments/dsv4_h20_sglang_tp_dp_matrix/run_adaptive_concurrency.sh rename to experiments/pro6000/dsv4_pro6000_sglang_tp_dp_matrix/run_adaptive_concurrency.sh diff --git a/experiments/dsv4_h20_sglang_tp_dp_matrix/run_adaptive_concurrency_add16.sh b/experiments/pro6000/dsv4_pro6000_sglang_tp_dp_matrix/run_adaptive_concurrency_add16.sh similarity index 100% rename from experiments/dsv4_h20_sglang_tp_dp_matrix/run_adaptive_concurrency_add16.sh rename to experiments/pro6000/dsv4_pro6000_sglang_tp_dp_matrix/run_adaptive_concurrency_add16.sh diff --git a/experiments/dsv4_pro6000_sglang_tp_dp_matrix/run_bench.sh b/experiments/pro6000/dsv4_pro6000_sglang_tp_dp_matrix/run_bench.sh similarity index 100% rename from experiments/dsv4_pro6000_sglang_tp_dp_matrix/run_bench.sh rename to experiments/pro6000/dsv4_pro6000_sglang_tp_dp_matrix/run_bench.sh diff --git a/experiments/dsv4_pro6000_sglang_tp_dp_matrix/run_sglang_in_container.sh b/experiments/pro6000/dsv4_pro6000_sglang_tp_dp_matrix/run_sglang_in_container.sh similarity index 100% rename from experiments/dsv4_pro6000_sglang_tp_dp_matrix/run_sglang_in_container.sh rename to experiments/pro6000/dsv4_pro6000_sglang_tp_dp_matrix/run_sglang_in_container.sh diff --git a/experiments/dsv4_pro6000_sglang_tp_dp_matrix/start_sglang_container.sh b/experiments/pro6000/dsv4_pro6000_sglang_tp_dp_matrix/start_sglang_container.sh similarity index 100% rename from experiments/dsv4_pro6000_sglang_tp_dp_matrix/start_sglang_container.sh rename to experiments/pro6000/dsv4_pro6000_sglang_tp_dp_matrix/start_sglang_container.sh diff --git a/experiments/dsv4_pro6000_sglang_tp_dp_matrix/start_sglang_docker.sh b/experiments/pro6000/dsv4_pro6000_sglang_tp_dp_matrix/start_sglang_docker.sh similarity index 100% rename from experiments/dsv4_pro6000_sglang_tp_dp_matrix/start_sglang_docker.sh rename to experiments/pro6000/dsv4_pro6000_sglang_tp_dp_matrix/start_sglang_docker.sh diff --git a/experiments/dsv4_pro6000_sglang_tp_dp_matrix/start_sglang_dp.sh b/experiments/pro6000/dsv4_pro6000_sglang_tp_dp_matrix/start_sglang_dp.sh similarity index 100% rename from experiments/dsv4_pro6000_sglang_tp_dp_matrix/start_sglang_dp.sh rename to experiments/pro6000/dsv4_pro6000_sglang_tp_dp_matrix/start_sglang_dp.sh diff --git a/experiments/dsv4_h20_vllm_tp_dp_matrix/adaptive_config.env b/experiments/pro6000/dsv4_pro6000_vllm_tp_dp_matrix/adaptive_config.env similarity index 100% rename from experiments/dsv4_h20_vllm_tp_dp_matrix/adaptive_config.env rename to experiments/pro6000/dsv4_pro6000_vllm_tp_dp_matrix/adaptive_config.env diff --git a/experiments/dsv4_pro6000_vllm_tp_dp_matrix/config.env b/experiments/pro6000/dsv4_pro6000_vllm_tp_dp_matrix/config.env similarity index 100% rename from experiments/dsv4_pro6000_vllm_tp_dp_matrix/config.env rename to experiments/pro6000/dsv4_pro6000_vllm_tp_dp_matrix/config.env diff --git a/experiments/dsv4_h20_vllm_tp_dp_matrix/run_adaptive_concurrency.sh b/experiments/pro6000/dsv4_pro6000_vllm_tp_dp_matrix/run_adaptive_concurrency.sh similarity index 100% rename from experiments/dsv4_h20_vllm_tp_dp_matrix/run_adaptive_concurrency.sh rename to experiments/pro6000/dsv4_pro6000_vllm_tp_dp_matrix/run_adaptive_concurrency.sh diff --git a/experiments/dsv4_h20_vllm_tp_dp_matrix/run_adaptive_concurrency_add16.sh b/experiments/pro6000/dsv4_pro6000_vllm_tp_dp_matrix/run_adaptive_concurrency_add16.sh similarity index 100% rename from experiments/dsv4_h20_vllm_tp_dp_matrix/run_adaptive_concurrency_add16.sh rename to experiments/pro6000/dsv4_pro6000_vllm_tp_dp_matrix/run_adaptive_concurrency_add16.sh diff --git a/experiments/dsv4_pro6000_vllm_tp_dp_matrix/start_vllm_docker.sh b/experiments/pro6000/dsv4_pro6000_vllm_tp_dp_matrix/start_vllm_docker.sh similarity index 100% rename from experiments/dsv4_pro6000_vllm_tp_dp_matrix/start_vllm_docker.sh rename to experiments/pro6000/dsv4_pro6000_vllm_tp_dp_matrix/start_vllm_docker.sh diff --git a/experiments/dsv4_pro6000_vllm_tp_dp_matrix/start_vllm_dp.sh b/experiments/pro6000/dsv4_pro6000_vllm_tp_dp_matrix/start_vllm_dp.sh similarity index 100% rename from experiments/dsv4_pro6000_vllm_tp_dp_matrix/start_vllm_dp.sh rename to experiments/pro6000/dsv4_pro6000_vllm_tp_dp_matrix/start_vllm_dp.sh diff --git a/scripts/common/adaptive_bench_lib.sh b/scripts/common/adaptive_bench_lib.sh index 35dc5d2..fcd06f4 100755 --- a/scripts/common/adaptive_bench_lib.sh +++ b/scripts/common/adaptive_bench_lib.sh @@ -69,6 +69,14 @@ adaptive_validate_config() { log "ERROR: RANDOM_RANGE_RATIO must be between 0.0 and 1.0" return 1 fi + if ! [[ "${TTFT_SLO_MS:-4000}" =~ ^[0-9]+$ ]] || (( TTFT_SLO_MS < 1 )); then + log "ERROR: TTFT_SLO_MS must be a positive integer, got ${TTFT_SLO_MS}" + return 1 + fi + if [[ "${ENABLE_TTFT_SLO_STOP:-1}" != "0" && "${ENABLE_TTFT_SLO_STOP:-1}" != "1" ]]; then + log "ERROR: ENABLE_TTFT_SLO_STOP must be 0 or 1, got ${ENABLE_TTFT_SLO_STOP}" + return 1 + fi } adaptive_start_gpu_monitor() { @@ -408,6 +416,23 @@ adaptive_run_shape() { fi max_successful_concurrency="$concurrency" last_total_tps="$current_tps" + + # TTFT SLO check: stop searching if TTFT P95 exceeds the SLO threshold + local ttft_p95_ms="" + if [[ "${ENABLE_TTFT_SLO_STOP:-1}" == "1" ]]; then + ttft_p95_ms="$(jq -r '.ttft_p95_ms' "$POINT_METRICS_FILE")" + if awk -v ttft="$ttft_p95_ms" -v slo="${TTFT_SLO_MS:-4000}" 'BEGIN { exit !(ttft > slo) }'; then + adaptive_append_point_from_metrics \ + "$POINT_METRICS_FILE" "$tp" "$dp" "$mark" "$isl" "$osl" \ + "$concurrency" "$num_prompts" "$POINT_ATTEMPT" "$gain_pct" \ + "$plateau_streak" "$POINT_RAW_FILE" "$POINT_DETAIL_LOG" + stop_reason="TTFT_SLO_EXCEEDED" + shape_status="TTFT_BOUNDARY" + log "probe result c=${concurrency} total_tps=${current_tps} ttft_p95=${ttft_p95_ms}ms > SLO=${TTFT_SLO_MS}ms, stopping shape" + break + fi + fi + adaptive_append_point_from_metrics \ "$POINT_METRICS_FILE" "$tp" "$dp" "$mark" "$isl" "$osl" \ "$concurrency" "$num_prompts" "$POINT_ATTEMPT" "$gain_pct" \ @@ -625,6 +650,8 @@ adaptive_main() { --argjson min_gain_pct "$TPS_MIN_GAIN_PCT" \ --argjson plateau_patience "$PLATEAU_PATIENCE" \ --argjson warmup_max_requests "$BENCH_WARMUP_MAX_REQUESTS" \ + --argjson ttft_slo_ms "${TTFT_SLO_MS:-4000}" \ + --argjson enable_ttft_slo_stop "${ENABLE_TTFT_SLO_STOP:-1}" \ '{ experiment: $experiment, engine: $engine, @@ -642,7 +669,9 @@ adaptive_main() { num_prompts_multiplier: $prompts_multiplier, min_tps_gain_pct: $min_gain_pct, plateau_patience: $plateau_patience, - warmup_max_requests: $warmup_max_requests + warmup_max_requests: $warmup_max_requests, + ttft_slo_ms: $ttft_slo_ms, + enable_ttft_slo_stop: $enable_ttft_slo_stop } }' > "${ADAPTIVE_RUN_ROOT}/run_manifest.json"