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-nameimage로 설정된 경우에만 적용돼요.

  • --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-name adapter1 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: 처리량/동시성 플롯 생성 (termplotlibgnuplot 필요).
  • --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 모드에서는 prefilldecode를 따로 프로파일링해야 해요.

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)" 또는 매끄러움을 측정해요.

더 알아보기 (Learn more)