vllm:
#!/usr/bin/env bash
set -uo pipefail
# ============================================================
# Config
# ============================================================
# ---------- Server ----------
BASE_URL="http://127.0.0.1:8000"
BACKEND="openai-chat"
ENDPOINT="/v1/chat/completions"
# ---------- Model / Tokenizer ----------
MODEL="qwen3.6-27b"
TOKENIZER="/data/model"
TOKENIZER_MODE="auto"
# ---------- Dataset ----------
DATASET_NAME="random"
INPUT_LENGTHS=(
20000
40000
80000
120000
)
OUTPUT_LENGTH=2000
CONCURRENCIES=(
1
2
4
8
16
)
# ---------- Sampling ----------
REQUEST_RATE="inf"
RANDOM_RANGE_RATIO="0"
TEMPERATURE="0"
IGNORE_EOS=true
# ---------- Result ----------
RESULT_DIR="/data/model/benchmark_results"
SAVE_DETAILED=true
# ---------- Offline ----------
export HF_HUB_OFFLINE=1
export TRANSFORMERS_OFFLINE=1
export HF_DATASETS_OFFLINE=1
export TOKENIZERS_PARALLELISM=false
# ============================================================
# Prepare
# ============================================================
mkdir -p "${RESULT_DIR}"
echo "============================================================"
echo "vLLM concurrency benchmark"
echo "============================================================"
echo "BASE_URL : ${BASE_URL}"
echo "BACKEND : ${BACKEND}"
echo "ENDPOINT : ${ENDPOINT}"
echo "MODEL : ${MODEL}"
echo "TOKENIZER : ${TOKENIZER}"
echo "INPUT_LENGTHS : ${INPUT_LENGTHS[*]}"
echo "OUTPUT_LENGTH : ${OUTPUT_LENGTH}"
echo "CONCURRENCIES : ${CONCURRENCIES[*]}"
echo "RESULT_DIR : ${RESULT_DIR}"
echo "============================================================"
# ============================================================
# Benchmark
# ============================================================
for INPUT_LENGTH in "${INPUT_LENGTHS[@]}"; do
for CONCURRENCY in "${CONCURRENCIES[@]}"; do
# 每组只发送一波请求
NUM_PROMPTS="${CONCURRENCY}"
INPUT_K=$((INPUT_LENGTH / 1000))
OUTPUT_K=$((OUTPUT_LENGTH / 1000))
RUN_NAME="input_${INPUT_K}k_output_${OUTPUT_K}k_concurrency_${CONCURRENCY}"
RESULT_FILE="${RUN_NAME}.json"
LOG_FILE="${RESULT_DIR}/${RUN_NAME}.log"
echo
echo "============================================================"
echo "Running : ${RUN_NAME}"
echo "Input : ${INPUT_LENGTH}"
echo "Output : ${OUTPUT_LENGTH}"
echo "Concurrency : ${CONCURRENCY}"
echo "Requests : ${NUM_PROMPTS}"
echo "Result : ${RESULT_DIR}/${RESULT_FILE}"
echo "============================================================"
CMD=(
vllm bench serve
--backend "${BACKEND}"
--base-url "${BASE_URL}"
--endpoint "${ENDPOINT}"
--model "${MODEL}"
--tokenizer "${TOKENIZER}"
--tokenizer-mode "${TOKENIZER_MODE}"
--dataset-name "${DATASET_NAME}"
--random-input-len "${INPUT_LENGTH}"
--random-output-len "${OUTPUT_LENGTH}"
--random-range-ratio "${RANDOM_RANGE_RATIO}"
--num-prompts "${NUM_PROMPTS}"
--request-rate "${REQUEST_RATE}"
--max-concurrency "${CONCURRENCY}"
--temperature "${TEMPERATURE}"
--save-result
--result-dir "${RESULT_DIR}"
--result-filename "${RESULT_FILE}"
--metadata
"input_len=${INPUT_LENGTH}"
"output_len=${OUTPUT_LENGTH}"
"concurrency=${CONCURRENCY}"
)
if [[ "${IGNORE_EOS}" == "true" ]]; then
CMD+=(--ignore-eos)
fi
if [[ "${SAVE_DETAILED}" == "true" ]]; then
CMD+=(--save-detailed)
fi
printf 'Command: '
printf '%q ' "${CMD[@]}"
echo
echo
"${CMD[@]}" 2>&1 | tee "${LOG_FILE}"
STATUS=${PIPESTATUS[0]}
if [[ ${STATUS} -ne 0 ]]; then
echo "[FAILED] ${RUN_NAME}, exit_code=${STATUS}"
else
echo "[DONE] ${RUN_NAME}"
fi
done
done
echo
echo "============================================================"
echo "All benchmark cases finished"
echo "Results: ${RESULT_DIR}"
echo "============================================================"
sglang:
#!/usr/bin/env bash set -uo pipefail
============================================================
SGLang Fully Offline Concurrency Benchmark
============================================================
---------- Server ----------
HOST="127.0.0.1" PORT="8000" BACKEND="sglang"
---------- Model / Tokenizer ----------
MODEL="/data/model" TOKENIZER="/data/model"
---------- Dataset ----------
关键:random-ids 完全本地生成 token ids,不依赖 ShareGPT
DATASET_NAME="random-ids"
---------- Input / Output ----------
INPUT_LENGTHS=( 20000 40000 80000 120000 )
OUTPUT_LENGTH=2000
---------- Concurrency ----------
CONCURRENCIES=( 1 2 4 8 16 32 )
---------- Benchmark ----------
REQUEST_RATE="inf"
0 = 输入/输出长度固定,不浮动
RANDOM_RANGE_RATIO="1.0"
---------- Result ----------
RESULT_DIR="/data/benchmark_results_sglang" OUTPUT_DETAILS=true
---------- Offline ----------
export HF_HUB_OFFLINE=1 export TRANSFORMERS_OFFLINE=1 export HF_DATASETS_OFFLINE=1 export TOKENIZERS_PARALLELISM=false
============================================================
Prepare
============================================================
mkdir -p "${RESULT_DIR}"
echo "============================================================" echo "SGLang fully-offline concurrency benchmark" echo "============================================================" echo "HOST : ${HOST}" echo "PORT : ${PORT}" echo "BACKEND : ${BACKEND}" echo "MODEL : ${MODEL}" echo "TOKENIZER : ${TOKENIZER}" echo "DATASET : ${DATASET_NAME}" echo "INPUT_LENGTHS : ${INPUT_LENGTHS[]}" echo "OUTPUT_LENGTH : ${OUTPUT_LENGTH}" echo "CONCURRENCIES : ${CONCURRENCIES[]}" echo "RESULT_DIR : ${RESULT_DIR}" echo "============================================================"
============================================================
Benchmark
============================================================
for INPUT_LENGTH in "${INPUT_LENGTHS[@]}"; do for CONCURRENCY in "${CONCURRENCIES[@]}"; do
# 每个并发档只打一波
NUM_PROMPTS="${CONCURRENCY}"
INPUT_K=$((INPUT_LENGTH / 1000))
OUTPUT_K=$((OUTPUT_LENGTH / 1000))
RUN_NAME="input_${INPUT_K}k_output_${OUTPUT_K}k_concurrency_${CONCURRENCY}"
RESULT_FILE="${RESULT_DIR}/${RUN_NAME}.jsonl"
LOG_FILE="${RESULT_DIR}/${RUN_NAME}.log"
echo
echo "============================================================"
echo "Running : ${RUN_NAME}"
echo "Input : ${INPUT_LENGTH}"
echo "Output : ${OUTPUT_LENGTH}"
echo "Concurrency : ${CONCURRENCY}"
echo "Requests : ${NUM_PROMPTS}"
echo "Result : ${RESULT_FILE}"
echo "Log : ${LOG_FILE}"
echo "============================================================"
CMD=(
python3 -m sglang.benchmark.serving
--backend "${BACKEND}"
--host "${HOST}"
--port "${PORT}"
--model "${MODEL}"
--tokenizer "${TOKENIZER}"
--dataset-name "${DATASET_NAME}"
--random-input-len "${INPUT_LENGTH}"
--random-output-len "${OUTPUT_LENGTH}"
--random-range-ratio "${RANDOM_RANGE_RATIO}"
--num-prompts "${NUM_PROMPTS}"
--request-rate "${REQUEST_RATE}"
--max-concurrency "${CONCURRENCY}"
--output-file "${RESULT_FILE}"
)
if [[ "${OUTPUT_DETAILS}" == "true" ]]; then
CMD+=(--output-details)
fi
echo "Command:"
printf '%q ' "${CMD[@]}"
echo
echo
"${CMD[@]}" 2>&1 | tee "${LOG_FILE}"
STATUS=${PIPESTATUS[0]}
if [[ ${STATUS} -ne 0 ]]; then
echo "[FAILED] ${RUN_NAME}, exit_code=${STATUS}"
else
echo "[DONE] ${RUN_NAME}"
fi
done
done
echo echo "============================================================" echo "All benchmark cases finished" echo "Results: ${RESULT_DIR}" echo "============================================================"