1. 개요
동시 요청(Concurrency)은 같은 순간 서버가 처리 중인 요청 수다. 늘리면 처리량은 늘다가 평평해지고, 지연은 어느 지점부터 꺾여 오른다. GPU 한 장이 몇 명을 받을 수 있는지는 이 수로 정한다.
2. 사용자 수와의 차이
동시 요청은 사용자 수가 아니다. 둘 사이는 리틀의 법칙으로 이어진다.1
동시 요청 = 초당 들어오는 요청 수 × 요청 하나에 걸리는 시간
답 하나에 5초 걸리고 1분에 한 번 묻는 사용자라면, 190명이 쉬지 않고 써도 초당 약 3.2개 요청 × 5초 ≈ 동시 16 이다.
3. 지연이 꺾이는 지점
개념도 — 처리량이 평평해지는 지점부터 요청은 대기 줄에 쌓이고 지연이 꺾여 오른다
| 구간 | 서버 안에서 일어나는 일 |
|---|---|
| 동시가 적을 때 | GPU 가 놀고 있어 요청을 더 받아도 지연이 거의 그대로다. 처리량은 동시에 비례해 는다 |
| 꺾이는 지점 | 한 번에 묶어 처리(배치)하는 양이 GPU 연산이나 KV 캐시 메모리의 한계에 닿는다 |
| 그 너머 | 새 요청은 대기 줄(num_requests_waiting)에서 기다린다. 처리량은 그대로인데 TTFT 가 대기 시간만큼 늘어난다 |
그래서 “GPU 한 장이 몇 명을 받나"는 SLA 를 넘기기 직전 동시 요청 수로 정한다. 게이트웨이는 그 수를 넘는 요청을 줄 세우거나 429 로 돌려보내는 기준선으로 쓴다.
4. 먼저 깨지는 지표
어느 지표가 먼저 SLA 를 넘는지는 모델마다 다르다.
| 먼저 깨지는 것 | 원인 | 흔한 경우 |
|---|---|---|
| TTFT | 입력 처리(prefill)가 몰려 대기 줄이 생김, KV 캐시 부족 | 큰 dense 모델, 긴 입력 |
| ITL | 한 번에 묶은 요청이 많아 토큰 하나 만드는 단계가 길어짐 | MoE 모델의 높은 동시 |
5. 재는 방법
vLLM 은 OpenAI 호환 서버와 벤치마크 도구를 함께 준다. 동시 요청 상한을 1, 2, 4 … 처럼 단계로 올리며 잰다.
vllm bench serve --backend vllm --base-url http://127.0.0.1:8000 \
--model <모델> --dataset-name random \
--random-input-len 1000 --random-output-len 200 --ignore-eos \
--max-concurrency 16 --num-prompts 128 \
--percentile-metrics ttft,tpot,itl,e2el --metric-percentiles 50,95,99 \
--save-result --result-filename c16.json
| 옵션 | 이유 |
|---|---|
--dataset-name random | 입력·출력 길이를 고정해 모델끼리 같은 조건으로 비교 |
--ignore-eos | 모델이 일찍 끝내지 않고 정해진 출력 길이를 채우게 함 |
--max-concurrency | 동시 요청 수 상한 |
같은 시간 동안 서버의 /metrics 를 기록하면 왜 꺾였는지 함께 본다.
| 지표 | 뜻 |
|---|---|
vllm:num_requests_running | 지금 처리 중인 요청 수 |
vllm:num_requests_waiting | 대기 줄 길이. 0 보다 크면 TTFT 가 대기 시간만큼 는다 |
vllm:kv_cache_usage_perc | KV 캐시 사용률. 1 에 가까우면 메모리가 한계 |
6. 여담
- 지연 그래프가 꺾이는 지점을 영어로는 흔히 knee(무릎)라고 부른다. 그래프가 무릎처럼 굽어서다.
- 리틀의 법칙은 큐의 종류나 도착 분포와 상관없이 성립한다. 은행 창구, 식당 대기 줄, LLM 서버 모두 같은 식으로 계산된다.
- “동시 접속자 1만 명"과 “동시 요청 1만"은 전혀 다른 말이다.
앞의 것은 마케팅, 뒤의 것은 GPU 견적서다
7. 관련 문서
8. 출처
- vLLM — vllm bench serve
- vLLM — Metrics
- NVIDIA — LLM Inference Benchmarking: Fundamental Concepts
- Wikipedia — Little’s law
존 리틀(John D. C. Little)이 1961년에 증명한 식으로, 줄 안에 있는 평균 개수(L)는 도착률(λ)과 머무는 시간(W)의 곱이다. ↩︎