- Restructure repo around experiments/<name>/ and platforms/<chip>.env. - Add shared scripts under scripts/common/ for platform/server/bench-client logic. - Add Kunlun P800 platform config and runtime patches. - Add dsv4_p800_sglang experiment with INT8 smoke-test support. - Update BENCHMARK_WORKFLOW.md and README.md with chip/engine recording rules. - Add scripts/analysis/compare_experiments.py for cross-experiment comparison. - Ignore experiments/*/results/ raw output directories by default.
77 lines
2.2 KiB
Bash
Executable File
77 lines
2.2 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Helpers to run sglang.bench_serving inside the P800 Docker container.
|
|
# Usage: source "$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)/../scripts/common/bench_client_docker.sh"
|
|
|
|
set -Eeuo pipefail
|
|
|
|
_BENCH_CLIENT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
# shellcheck source=/dev/null
|
|
source "${_BENCH_CLIENT_DIR}/lib.sh"
|
|
# shellcheck source=/dev/null
|
|
source "${_BENCH_CLIENT_DIR}/platform.sh"
|
|
|
|
# Required platform variables: CONTAINER_NAME, CONTAINER_PYTHON
|
|
|
|
# Run sglang.bench_serving inside the running container.
|
|
# All arguments are forwarded to bench_serving.
|
|
run_bench_in_container() {
|
|
local container="${CONTAINER_NAME}"
|
|
|
|
if ! docker inspect "$container" >/dev/null 2>&1; then
|
|
log "ERROR: container ${container} is not running"
|
|
return 1
|
|
fi
|
|
|
|
log "running bench_serving in container ${container}"
|
|
docker exec "$container" \
|
|
env HF_HUB_OFFLINE=1 TRANSFORMERS_OFFLINE=1 HF_DATASETS_OFFLINE=1 \
|
|
"${CONTAINER_PYTHON}" -m sglang.bench_serving "$@"
|
|
}
|
|
|
|
# Convenience wrapper for a single random-dataset case.
|
|
# Args:
|
|
# $1: backend (e.g. sglang)
|
|
# $2: port
|
|
# $3: model path or served model name
|
|
# $4: output jsonl path (inside the container)
|
|
# $5: concurrency
|
|
# $6: input length
|
|
# $7: output length
|
|
# $8: num prompts (optional, default 512)
|
|
# $9: dataset path inside container (optional)
|
|
run_random_case() {
|
|
local backend="$1"
|
|
local port="$2"
|
|
local model="$3"
|
|
local output_file="$4"
|
|
local concurrency="$5"
|
|
local input_len="$6"
|
|
local output_len="$7"
|
|
local num_prompts="${8:-512}"
|
|
local dataset_path="${9:-}"
|
|
local warmup="${WARMUP:-100}"
|
|
|
|
# Ensure the output directory exists inside the container.
|
|
docker exec "${CONTAINER_NAME}" mkdir -p "$(dirname "$output_file")"
|
|
|
|
local args=(
|
|
--backend "$backend"
|
|
--host 127.0.0.1
|
|
--port "$port"
|
|
--model "$model"
|
|
--dataset-name random
|
|
--random-input-len "$input_len"
|
|
--random-output-len "$output_len"
|
|
--num-prompts "$num_prompts"
|
|
--max-concurrency "$concurrency"
|
|
--warmup-requests "$warmup"
|
|
--output-file "$output_file"
|
|
--output-details
|
|
)
|
|
if [[ -n "$dataset_path" ]]; then
|
|
args+=(--dataset-path "$dataset_path")
|
|
fi
|
|
|
|
run_bench_in_container "${args[@]}"
|
|
}
|