Autoregressive Model Benchmark Documentation
Autoregressive Model Benchmark Documentation (자기회귀 모델 벤치마크 문서)
sglang.bench_serving은 대규모 언어 모델(LLM)과 비전 언어 모델(VLM)의 온라인 서빙 처리량과 지연 시간을 벤치마킹하는 명령줄 도구예요. 여러 백엔드(SGLang, vLLM 등)를 지원하며, 요청 속도·데이터셋 종류·프로파일링에 대한 유연한 설정을 제공해요.
출처: 문서
본문
sglang.bench_serving은 LLM(대규모 언어 모델)과 VLM(비전 언어 모델)의 온라인 서빙 처리량과 지연 시간을 벤치마킹하도록 설계된 명령줄 도구예요. 여러 백엔드(SGLang, vLLM 등)를 지원하고 요청 속도, 데이터셋 종류, 프로파일링을 유연하게 구성할 수 있어요.
1. Quick Start (빠른 시작)
기본 사용법 (랜덤 데이터)
로컬 SGLang 서버로 무작위 생성된 프롬프트를 사용해 벤치마크를 실행해요.
python -m sglang.bench_serving --backend sglang --port 30000 --dataset-name random --num-prompts 100
실제 데이터 (ShareGPT)
지정된 요청 속도로 ShareGPT 데이터셋을 사용해 벤치마크를 실행해요.
python -m sglang.bench_serving \
--backend sglang \
--dataset-name sharegpt \
--dataset-path ./ShareGPT_V3_unfiltered_cleaned_split.json \
--num-prompts 1000 \
--request-rate 10
2. Parameter Reference (파라미터 참조)
2.1 Backend & Server Configuration
이 파라미터들은 타겟 서버와 사용 중인 추론 엔진을 정의해요.
| Parameter | Description |
|---|---|
--backend |
필수. 백엔드 엔진 지정. 옵션: sglang, sglang-native, sglang-oai, sglang-oai-chat, vllm, vllm-chat, lmdeploy, lmdeploy-chat, trt, gserver, truss. |
--base-url |
API base URL (특정 host/port 플래그를 쓰지 않을 때). |
--host |
서버 호스트명. 기본값: 0.0.0.0. |
--port |
서버 포트. 설정하지 않으면 해당 백엔드의 표준 포트로 기본 설정돼요. |
--model |
모델 이름 또는 경로. 설정하지 않으면 구성 확인을 위해 /v1/models를 질의해요. |
--served-model-name |
API 요청 본문에 사용되는 모델 이름. 기본값은 --model의 값이에요. |
--tokenizer |
토크나이저의 경로 또는 이름. 기본값은 모델 구성이에요. |
2.2 Dataset Configuration
벤치마킹에 사용되는 프롬프트의 출처를 제어해요.
| Parameter | Description |
|---|---|
--dataset-name |
데이터셋 종류. 옵션: sharegpt, custom, random, random-ids, generated-shared-prefix, mmmu, image, mooncake. |
--dataset-path |
데이터셋 파일 경로 (예: ShareGPT용 로컬 JSON 파일). |
--num-prompts |
처리할 총 프롬프트 수. 기본값: 1000. |
--seed |
재현성을 위한 랜덤 시드. |
--tokenize-prompt |
입력에 문자열 대신 정수 ID 사용. 정밀한 길이 제어에 유용. |
2.3 Input/Output Length Control
요청의 형태(문맥 길이, 생성 길이)를 제어하는 파라미터예요.
Random/Image 데이터셋:
--random-input-len: 요청당 입력 토큰 수.--random-output-len: 요청당 출력 토큰 수.--random-range-ratio: 입력/출력 길이 샘플링 범위 비율.
ShareGPT 데이터셋:
--sharegpt-output-len: 각 요청에 대해 데이터셋에 정의된 출력 길이를 덮어써요.--sharegpt-context-len: 최대 문맥 길이. 이보다 긴 요청은 버려져요.
일반 요청 수정자:
--extra-request-body: 요청 페이로드에 JSON 객체를 추가해요 (예: {"key": "value"}). 샘플링 파라미터 전달에 유용.--prompt-suffix: 모든 사용자 프롬프트에 추가되는 문자열 접미사.--disable-ignore-eos: 설정 시 EOS 토큰에 도달하면 생성이 중단돼요 (벤치마크는 보통 EOS를 무시해 최대 생성 길이를 강제해요).--apply-chat-template: 입력에 모델의 채팅 템플릿을 적용해요.
2.4 Traffic & Concurrency
요청이 서버로 전송되는 속도를 제어해요.
| Parameter | Description |
|---|---|
--request-rate |
초당 요청 수(RPS). inf(기본값)이면 모든 요청이 즉시 전송돼요(burst). 그 외에는 도착 시간이 Poisson 프로세스를 따르게 돼요. |
--max-concurrency |
한 번에 허용되는 활성 요청의 최대 수. request-rate가 높아도 이 한도에 도달하면 클라이언트가 요청을 보류해요. |
--warmup-requests |
실제 측정 전에 서버를 워밍업하기 위해 실행하는 요청 수. |
--flush-cache |
벤치마크 시작 전 서버 캐시를 비워요. |
2.5 Output & Logging
| Parameter | Description |
|---|---|
--output-file |
결과를 JSONL 형식으로 저장할 경로. |
--output-details |
출력에 상세 메트릭 포함. |
--print-requests |
요청이 전송될 때 stdout으로 출력 (디버깅에 유용). |
--disable-tqdm |
진행률 바를 숨겨요. |
--disable-stream |
스트리밍 모드를 비활성화 (전체 응답 대기). |
--return-logprob |
서버에 logprob을 요청해요. |
--tag |
식별을 위해 출력 파일에 추가되는 임의 문자열 태그. |
2.6 Advanced
2.6.1 Image / Multi-modal
--dataset-name이 image로 설정된 경우에만 적용돼요.
--image-count: 요청당 이미지 수.--image-resolution: 해상도 (예: 1080p, 4k, 또는 커스텀 1080x1920).--image-format: jpeg 또는 png.--image-content: random (노이즈) 또는 blank.
2.6.2 LoRA Benchmarking
멀티 LoRA 서빙 시나리오를 시뮬레이션하는 데 사용돼요.
--lora-name: LoRA 어댑터 이름 목록 (예:--lora-nameadapter1 adapter2).--lora-request-distribution: 요청이 어댑터에 할당되는 방식:uniform: 동일 확률.distinct: 요청마다 새 어댑터.skewed: Zipf 분포를 따름 (hot/cold 어댑터 시뮬레이션).
--lora-zipf-alpha: Zipf 분포의 alpha 파라미터 (skewed사용 시).
2.6.3 Profiling
심층 성능 분석용 도구예요.
--profile: Torch Profiler 활성화 (서버에SGLANG_TORCH_PROFILER_DIR환경 변수 필요).--plot-throughput: 처리량/동시성 플롯 생성 (termplotlib와gnuplot필요).--profile-activities: 프로파일링할 활동 (CPU, GPU, CUDA_PROFILER).--profile-num-steps: 프로파일링할 스텝 수.--profile-by-stage/--profile-stages: 특정 처리 단계 프로파일링.
2.6.4 PD Disaggregation
Prefill-Decode (PD) 분리 아키텍처 벤치마킹용.
--pd-separated: PD disaggregation 벤치마킹 활성화.--profile-prefill-url: 프로파일링용 prefill 워커 URL.--profile-decode-url: 프로파일링용 decode 워커 URL.
Note: PD 모드에서는
prefill과decode를 따로 프로파일링해야 해요.
2.7 Specialized Datasets
2.7.1 Generated Shared Prefix (GSP):
시스템 프롬프트 캐싱/prefix 공유 성능을 테스트하도록 설계됐어요.
--gsp-num-groups: 고유 시스템 프롬프트 수.--gsp-prompts-per-group: 같은 시스템 프롬프트를 공유하는 사용자 질문 수.--gsp-system-prompt-len: 공유 prefix의 길이.--gsp-fast-prepare: 더 빠른 시작을 위해 일부 통계 계산 생략.
2.7.2 Mooncake
트레이스 재생(trace replay)을 위해 설계됐어요.
--mooncake-slowdown-factor: 트레이스 재생을 느리게 (예: 2.0 = 2배 느리게).--mooncake-num-rounds: 대화 라운드 수 (멀티 턴 지원).--use-trace-timestamps: 트레이스 파일에서 찾은 타임스탬프에 따라 요청 스케줄링.
3. Metrics (메트릭)
벤치마크 실행 후 도구가 일반적으로 보고하는 항목:
E2E(End-to-End Latency): 요청 전송부터 최종 토큰 수신까지의 총 시간.TTFT(Time To First Token): 요청 전송 후 첫 단어가 나타날 때까지의 시간. Prefill 시간(이미지와 텍스트 프롬프트 처리)을 나타내요.TPOT(Time per Output Token): 토큰 하나를 생성하는 평균 시간 (첫 번째 토큰 제외). 요청별로 계산돼요.ITL(Inter-Token Latency): 두 개별 스트리밍 패킷 사이의 시간 간격. TPOT이 평균이라면 ITL은 스트림의 "지터(jitter)" 또는 매끄러움을 측정해요.