성능 대시보드
성능 대시보드 (Performance Dashboard)
성능 대시보드는 새 변경사항이 다양한 워크로드에서 성능을 개선했는지·저하시켰는지 확인하는 데 쓰여요. perf-benchmarks와 ready 두 라벨이 붙은 커밋마다, 그리고 PR이 vLLM에 머지될 때 벤치마크 실행을 트리거해 갱신돼요.
결과는 공개 vLLM Performance Dashboard에 자동 게시돼요.
벤치마크 수동 트리거 (Manually Trigger the benchmark)
vllm-ci-test-repo 이미지를 vLLM 벤치마크 스위트와 함께 사용해요. x86 CPU 환경은 "-cpu" 접미사 이미지를, AArch64 CPU 환경은 "-arm64-cpu" 접미사 이미지를 사용해요.
다음은 CPU용 docker run 명령 예시예요. GPU는 ON_CPU 환경변수를 설정하지 않으면 돼요.
export VLLM_COMMIT=7f42dc20bb2800d09faa72b26f25d54e26f1b694 # use full commit hash from the main branch
export HF_TOKEN=<valid Hugging Face token>
if [[ "$(uname -m)" == aarch64 || "$(uname -m)" == arm64 ]]; then
IMG_SUFFIX="arm64-cpu"
else
IMG_SUFFIX="cpu"
fi
docker run -it --entrypoint /bin/bash -v /data/huggingface:/root/.cache/huggingface -e HF_TOKEN=$HF_TOKEN -e ON_CPU=1 --shm-size=16g --name vllm-cpu-ci public.ecr.aws/q9t5s3a7/vllm-ci-test-repo:${VLLM_COMMIT}-${IMG_SUFFIX}
그런 다음 docker 인스턴스 안에서 아래 명령을 실행해요.
bash .buildkite/performance-benchmarks/scripts/run-performance-benchmarks.sh
실행되면 벤치마크 스크립트는 benchmark/results 폴더에 benchmark_results.md와 benchmark_results.json을 함께 생성해요.
런타임 환경변수들 (Runtime environment variables)
ON_CPU: Intel® Xeon®·Arm® Neoverse™ 프로세서에서 '1'로 설정. 기본값 0.SERVING_JSON: 서빙 테스트에 쓸 JSON 파일. 기본값은 빈 문자열(기본 파일 사용).LATENCY_JSON: 지연 테스트에 쓸 JSON 파일. 기본값은 빈 문자열(기본 파일 사용).THROUGHPUT_JSON: 처리량 테스트에 쓸 JSON 파일. 기본값은 빈 문자열(기본 파일 사용).REMOTE_HOST: 벤치마킹할 원격 vLLM 서비스의 IP. 기본값은 빈 문자열.REMOTE_PORT: 벤치마킹할 원격 vLLM 서비스의 포트. 기본값은 빈 문자열.PROMPTS_PER_CONCURRENCY: 서빙 테스트의num_prompts를 계산하는 배수(num_prompts = max_concurrency × value). JSON의num_prompts를 덮어써요. 기본값은 NULL.ENABLE_ADAPTIVE_CONCURRENCY: 정적 서빙 max_concurrency 스윕 후 적응형 SLA 기반 동시성 탐색을 켜려면 '1'로 설정. 기본값 0.SLA_TTFT_MS: 적응형 동시성 탐색의 기본 TTFT SLA 임계값(밀리초). 기본값 3000.SLA_TPOT_MS: 적응형 동시성 탐색의 기본 TPOT SLA 임계값(밀리초). 기본값 100.ADAPTIVE_MAX_PROBES: 추가 적응형 탐색 프로브의 최대 수. 기본값 8.ADAPTIVE_MAX_CONCURRENCY: 적응형 탐색 중 허용되는 최대 동시성. 기본값 1024.
시각화 (Visualization)
convert-results-json-to-markdown.py는 벤치마킹 결과를 실제 벤치마킹 결과가 있는 마크다운 표 안에 넣는 데 도움을 줘요. 결과는 buildkite/performance-benchmark 잡 페이지 안에서 표로 볼 수 있어요. 표가 보이지 않으면 벤치마크 실행이 끝날 때까지 기다려 주세요. 표의 JSON 버전(벤치마크의 JSON 버전과 함께)도 마크다운 파일에 첨부돼요. 원시 벤치마크 결과(JSON 파일 형식)는 벤치마킹의 Artifacts 탭에 있어요.
성능 결과 비교 (Performance Results Comparison)
compare-json-results.py는 convert-results-json-to-markdown.py로 변환된 벤치마크 결과 JSON 파일을 비교하는 데 도움을 줘요. 실행되면 벤치마크 스크립트는 benchmark/results 폴더에 benchmark_results.md와 benchmark_results.json을 생성해요. compare-json-results.py는 두 benchmark_results.json 파일을 비교해 Output Tput, Median TTFT, Median TPOT 같은 성능 비율을 제공해요. benchmark_results.json이 하나만 넘어오면 그 파일 안의 서로 다른 TP·PP 구성을 비교해요.
같은 Model, Dataset name, input/output length에서 max concurrency와 qps로 result_a·result_b를 비교하는 스크립트 예시예요.
python3 compare-json-results.py -f results_a/benchmark_results.json -f results_b/benchmark_results.json
Output Tput (tok/s) — Model : [ meta-llama/Llama-3.1-8B-Instruct ] , Dataset Name : [ random ] , Input Len : [ 2048.0 ] , Output Len : [ 2048.0 ]
| | # of max concurrency | qps | results_a/benchmark_results.json | results_b/benchmark_results.json | perf_ratio | | | -------------------- | --- | -------------------------------- | -------------------------------- | ---------- | | 0 | 12 | inf | 24.98 | 186.03 | 7.45 | | 1 | 16 | inf | 25.49 | 246.92 | 9.69 | | 2 | 24 | inf | 27.74 | 293.34 | 10.57 | | 3 | 32 | inf | 28.61 |306.69 | 10.72 |
compare-json-results.py – Command-Line Parameters
compare-json-results.py는 하나 이상의 benchmark_results.json을 비교하고 요약 표·플롯을 생성하는 설정 가능한 파라미터를 제공해요. 대부분의 경우 사용자는 원하는 벤치마크 결과를 파싱하기 위해 --file만 지정하면 돼요.
| Parameter | Type | Default Value | Description |
|---|---|---|---|
--file |
str (appendable) |
None | Input JSON result file(s). Can be specified multiple times to compare multiple benchmark outputs. |
--debug |
bool |
False |
Enables debug mode. When set, prints all available information to aid troubleshooting and validation. |
--plot / --no-plot |
bool |
True |
Controls whether performance plots are generated. Use --no-plot to disable graph generation. |
--xaxis |
str |
# of max concurrency. |
Column name used as the X-axis in comparison plots (for example, concurrency or batch size). |
--latency |
str |
p99 |
Latency aggregation method used for TTFT/TPOT. Supported values: median or p99. |
--ttft-max-ms |
float |
3000.0 |
Reference upper bound (milliseconds) for TTFT plots, typically used to visualize SLA thresholds. |
--tpot-max-ms |
float |
100.0 |
Reference upper bound (milliseconds) for TPOT plots, typically used to visualize SLA thresholds. |
Valid Max Concurrency Summary
설정된 TTFT·TPOT SLA 임계값에 따라, compare-json-results.py는 각 벤치마크 결과의 최대 유효 동시성을 계산해요. "Max # of max concurrency. (Both)" 열은 TTFT와 TPOT 제약을 동시에 만족시키는 최고 동시성 수준을 나타내요. 이 값은 보통 용량 계획·사이징 가이드에 쓰여요.
| # | Configuration | Max # of max concurrency. (TTFT ≤ 10000 ms) | Max # of max concurrency. (TPOT ≤ 100 ms) | Max # of max concurrency. (Both) | Output Tput @ Both (tok/s) | TTFT @ Both (ms) | TPOT @ Both (ms) |
|---|---|---|---|---|---|---|---|
| 0 | results-a | 128.00 | 12.00 | 12.00 | 127.76 | 3000.82 | 93.24 |
| 1 | results-b | 128.00 | 32.00 | 32.00 | 371.42 | 2261.53 | 81.74 |
성능 벤치마크와 그 파라미터에 대한 자세한 정보는 Benchmark README와 performance benchmark description에서 볼 수 있어요.
연속 벤치마킹 (Continuous Benchmarking)
연속 벤치마킹은 다양한 모델·GPU 장치에 걸쳐 vLLM의 자동 성능 모니터링을 제공해요. 시간에 따른 vLLM 성능 특성을 추적하고 성능 회귀·개선을 식별하는 데 도움을 줘요.
작동 방식 (How It Works)
연속 벤치마킹은 PyTorch 인프라 저장소의 GitHub workflow CI로 트리거되며, 4시간마다 자동 실행돼요. 워크플로는 세 가지 유형의 성능 테스트를 실행해요:
- 서빙 테스트: 요청 처리·API 성능 측정
- 처리량 테스트: 토큰 생성률 평가
- 지연 테스트: 응답 시간 특성 평가
벤치마크 구성 (Benchmark Configuration)
벤치마킹은 현재 vllm-benchmarks 디렉터리에 구성된 미리 정의된 모델 집합에서 실행돼요. 벤치마킹에 새 모델을 추가하려면:
- 벤치마크 구성에서 적절한 GPU 디렉터리로 이동해요.
- 해당 구성 파일에 모델 사양을 추가해요.
- 새 모델은 다음 예약된 벤치마크 실행에 포함돼요.
출처: 공식문서
더 알아보기 (Learn more)
- 벤치마크 전체 개요: Benchmark Suites
- 벤치마크 CLI 상세: Benchmark CLI
- 파라미터 스윕: Parameter Sweeps