LLM Inference Scheduler Analysis
LLM Inference Scheduler ์ฌ์ธต ๋ถ์
Admission Control ยท Batching Policy ยท SLO Aware Queueing ยท Fairness ยท Token Budgeting
LLM inference scheduler๋ ๋จ์ํ ์์ฒญ ์์๋ฅผ ์ ํ๋ ํ ๊ด๋ฆฌ์๊ฐ ์๋๋ผ, latency์ throughput, fairness์ memory budget ์ฌ์ด์ ์ถฉ๋์ ๋งค step๋ง๋ค ์กฐ์ ํ๋ ์ ์ด๊ธฐ์ ๋๋ค. ํนํ continuous batching, chunked prefill, KV block pool, ๋ฉํฐํ ๋ํธ ์ฐ์ ์์๊ฐ ๊ฒฐํฉ๋ ํ๋ serving ์์ง์์๋ ์ค์ผ์ค๋ฌ์ ํ๋จ์ด ๊ณง ์ฌ์ฉ์ ์ฒด๊ฐ ์ฑ๋ฅ๊ณผ GPU ํ์ฉ๋ฅ ์ ๋์์ ์ข์ฐํฉ๋๋ค. ๋ณธ ๋ฌธ์๋ ๋ชฉํ ์งํ, scheduling loop, ๋ํ ์ ์ฑ , backpressure, ๊ทธ๋ฆฌ๊ณ cluster-level ๋ฐฐ์น ๊ด์ ์์ ์ด ๋ฌธ์ ๋ฅผ ์ ๋ฆฌํฉ๋๋ค.
๋ํ ์ค์ผ์ค๋ฌ๋ ๋ ๋ฆฝ๋ ํ๊ฐ ์๋๋ผ router, runtime, memory manager์ ๋ง๋ฌผ๋ฆฐ ์ํ ๊ธฐ๊ณ์ ๊ฐ๊น์ต๋๋ค. ์ด๋ค ์์ฒญ์ ์ง๊ธ admitํ ์ง, ์ด๋ค ์์ฒญ์ ๋ค์ token step์ผ๋ก ๋๊ธธ์ง, ์ด๋ค prefill์ chunk๋ก ์ชผ๊ฐค์ง, ์ด๋ค tenant๋ฅผ ๋จผ์ ๋ณดํธํ ์ง๊น์ง ํจ๊ป ๊ฒฐ์ ํด์ผ ํ๋ฏ๋ก, ์ค์ ๊ตฌํ์์๋ ์ ์ฑ ๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ ์ด๊ฐ ๋ถ๋ฆฌ๋์ง ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
ํต์ฌ ๊ฐ๋
- Admission control์ ๋จ์ํ ์ ์ฅ ํ๊ฐ๊ฐ ์๋๋ผ KV budget๊ณผ active sequence budget์ ํจ๊ป ๋ณด๋ ๋ฉ๋ชจ๋ฆฌ ๊ฒ์ดํธ์ ๋๋ค.
- Batching policy๋ prefill๊ณผ decode๋ฅผ ์ด๋ค ๋น์จ๊ณผ ์์๋ก ์์์ง ์ ํ๋ ๊ท์น์ด๋ฉฐ, utilization๊ณผ latency์ ๊ท ํ์ ์ข์ฐํฉ๋๋ค.
- Backpressure๋ active decode, prefill burst, remote KV ์ง์ฐ์ด ์์ ํ๋ก ์ ํ๋๋ ํ์์ด๋ฉฐ, ์ด์ ํ์ง์ ์ง์ ํ๋ญ๋๋ค.
- Fairness์ SLO๋ priority, aging, deadline-like rule๋ก ๊ตฌํ๋๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ณ , ๋ฉํฐํ ๋ํธ ํ๊ฒฝ์์๋ ํ์ ์ ์ฝ์ ๋๋ค.
1. ์ค์ผ์ค๋ฌ๋ ๋ฌด์์ ๋์์ ์ต์ ํํ๋๊ฐ
์ถ๋ก ์ค์ผ์ค๋ฌ๋ TTFT, ITL, tail latency ๊ฐ์ ์ฌ์ฉ์ ์งํ์ throughput, GPU utilization, KV ์ ์ ์จ ๊ฐ์ ์์คํ ์งํ๋ฅผ ๋์์ ๋ณธ๋ค๋ ์ ์์ ๋จ์ FCFS ํ์ ๋ค๋ฆ ๋๋ค. ๊ฒ๋ค๊ฐ fairness, tenant priority, active sequence ์ํ ๊ฐ์ ์ด์ ์ ์ฝ๋ ํจ๊ป ๋ง์กฑ์์ผ์ผ ํฉ๋๋ค.
์ฆ ์ค์ผ์ค๋ฌ๋ '๋๊ตฌ๋ฅผ ๋จผ์ ๋๋ฆด์ง'๋ง ์ ํ๋ ๊ฒ์ด ์๋๋ผ, ์ธ์ admitํ ์ง, ์ด๋ ๋ฐฐ์น์ ๋ฃ์์ง, prefill๊ณผ decode๋ฅผ ์ด๋ค ๋น์จ๋ก ์์์ง๊น์ง ํฌํจํ ์ ์ด ๋ฌธ์ ๋ฅผ ํ๊ณ ์์ต๋๋ค.
๊ทธ๋ฆผ 1. latency, efficiency, policy, system reality๋ฅผ ๋์์ ๋ง์ถ๋ scheduler objective
2. ์ค์ ๋์์ ingest -> admit -> batch -> refill์ ๋ฐ๋ณต์ด๋ค
์์ฒญ์ ingress์์ tenant, ๋ชจ๋ธ, SLO ์ ๋ณด๋ฅผ ๊ฐ์ง ์ฑ ํ์ ๋ค์ด์ค๊ณ , admission gate๋ KV budget๊ณผ active sequence budget์ ๋ณด๊ณ ์์ฒญ์ ๋ฐ์๋ค์ผ์ง ์ง์ฐ์ํฌ์ง ๊ฒฐ์ ํฉ๋๋ค. ์ดํ runtime์ prefill ๋๋ decode ๋ฐฐ์น๋ฅผ ๊ตฌ์ฑํ๊ณ , step์ด ๋๋ ๋๋ง๋ค ๋น slot์ ๋ค์ ์ฑ์๋๋ค.
์ค์ํ ์ ์ ์ด ๋ฃจํ๊ฐ ์์ฒญ ๋จ์๊ฐ ์๋๋ผ token step ๋จ์๋ก ๋งค์ฐ ์์ฃผ ๋ฐ๋ณต๋๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋์ ์์ ์ ์ฑ ์ฐจ์ด๋ TTFT์ ITL, ์ฌ์ง์ด tail latency์ ํฌ๊ฒ ๋์ ๋ ์ ์์ต๋๋ค.
๊ทธ๋ฆผ 2. ingest, admit, batch, refill๋ก ์ด์ด์ง๋ inference scheduler loop
Admission์ compute๋ณด๋ค memory ๋ฌธ์ ์ ๊ฐ๊น๋ค
ํ๋ LLM serving์์๋ admit ์ฌ๋ถ๊ฐ ๋จ์ํ GPU slot ์๋ณด๋ค KV block pool๊ณผ prefix cache ์ํ์ ๋ ๊ฐํ๊ฒ ์ข์ฐ๋ฉ๋๋ค. ๋ฐ๋ผ์ ์ค์ผ์ค๋ฌ๋ ์คํ๊ธฐ์ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ์๋ฅผ ๋ถ๋ฆฌํด ๋ณผ ์ ์์ต๋๋ค.
3. ๋ํ ์ ์ฑ ์ ๋จ์์ฑ, ํจ์จ, ์ฐ์ ์์ ์ ์ด ์ฌ์ด์ ์ ํ์ด๋ค
์ ์ ๋ฐฐ์น๋ FCFS๋ ๊ตฌํ์ด ๋จ์ํ๊ณ ์์ธก ๊ฐ๋ฅํ์ง๋ง, ์๋ก ๋ค๋ฅธ ๊ธธ์ด์ ์์ฒญ์ด ์์ด๋ฉด GPU์ ๋ฉ๋ชจ๋ฆฌ ๋น์นธ์ด ์์ฃผ ์๊น๋๋ค. ๋ฐ๋๋ก continuous batching์ utilization์ ๋์ด์ง๋ง fairness๋ฅผ ๋ณ๋๋ก ๊ด๋ฆฌํด์ผ ํ๋ฉฐ, queue ์ํ ๋ณํ์ ๋ ๋ฏผ๊ฐํฉ๋๋ค.
์ฐ์ ์์ ๊ธฐ๋ฐ ๋๋ SLO-aware ์ ์ฑ ์ ๊ธํ ์์ฒญ์ ๊ตฌ์ ํ๋ ๋ฐ ์ ๋ฆฌํ์ง๋ง, ์๋ชป ์ค๊ณํ๋ฉด ๋ฎ์ ์ฐ์ ์์ ์์ฒญ์ด ์ค๋ ๋ฐ๋ฆด ์ ์์ต๋๋ค. ๊ทธ๋์ ๋ง์ ์์คํ ์ด FCFS, priority, aging, deadline-like ์์๋ฅผ ์ ์ถฉํด์ ์ฌ์ฉํฉ๋๋ค.
๋น๊ต/๋ถ์
| ์ ์ฑ | ์ ๋ง๋ ์ํฉ | ๊ฐ์ | ์ฝ์ |
|---|---|---|---|
| FCFS / static batch | ์์ฒญ ๊ธธ์ด๊ฐ ๋น์ทํ๊ณ ๋ถํ๊ฐ ๋ฎ์ ๋ | ๊ตฌํ์ด ๋จ์ํ๊ณ ์์ธก ๊ฐ๋ฅํ๋ค | GPU ๋น์นธ์ด ์๊ธฐ๊ธฐ ์ฝ๊ณ utilization์ด ๋ฎ๋ค |
| Continuous batching | mixed workload, ๊ธด ๋๊ธฐ์ด, decode ์ค์ฌ ์๋น์ค | slot refill๋ก ํ์ฉ๋ฅ ์ ๋์ธ๋ค | fairness์ queue stability๋ฅผ ๋ฐ๋ก ๊ด๋ฆฌํด์ผ ํ๋ค |
| Chunked prefill + priority | ๊ธด prefill๊ณผ ์งง์ decode๊ฐ ์์ธ ์๋น์ค | TTFT์ ITL์ ํจ๊ป ๋ค๋ฃจ๊ธฐ ์ข๋ค | chunk ํฌ๊ธฐ์ ์ฐ์ ์์ ์กฐํฉ์ด ๋ฏผ๊ฐํ๋ค |
| SLO-aware priority / aging | ๋ฉํฐํ ๋ํธ ์๋น์ค, deadline-sensitive ์์ฒญ | ๊ธํ ์์ฒญ์ ๋ณดํธํ๊ธฐ ์ฝ๋ค | low-priority starvation ์ํ์ด ์๋ค |
| Cluster-level routing | ๋ฉํฐ GPU / ๋ฉํฐ ๋ ธ๋ serving | locality์ load balance๋ฅผ ํจ๊ป ๋ณธ๋ค | ๋ผ์ฐํ ๊ณผ ์ํ ๊ด๋ฆฌ๊ฐ ๋ณต์กํ๋ค |
๊ทธ๋ฆผ 3. static batch, continuous batching, priority-aware policy์ ๋น๊ต
4. Queueing๊ณผ Backpressure๋ ์ด์ ํ์ง์ ๊ฒฐ์ ํ๋ค
active decode๊ฐ block pool์ ๊ฑฐ์ ๋ค ์ฐ๋ฉด ์ ๊ท admit์ด ๋งํ๊ณ , prefill burst๊ฐ ๊ณผ๋ํ๋ฉด decode ITL์ด ํ๋ค๋ฆฝ๋๋ค. ์ฌ๊ธฐ์ remote KV๋ ๋คํธ์ํฌ ์ง์ฐ๊น์ง ๊ฒน์น๋ฉด backpressure๊ฐ ์๋จ ingress๊น์ง ์ ํ๋ฉ๋๋ค.
์ข์ ์ค์ผ์ค๋ฌ๋ ๋จ์ํ ํ๋ฅผ ๋น์ฐ๋ ๊ฒ์ด ์๋๋ผ, ์ด๋์์ ๋ณ๋ชฉ์ด ์์๋๋์ง ์กฐ๊ธฐ์ ๊ฐ์งํ๊ณ hold, reject, reroute, chunk resize ๊ฐ์ ์์ถฉ ์ ๋ต์ ์ ์ฉํฉ๋๋ค. ์ด ๊ณ์ธต์ด ์ฝํ๋ฉด GPU๋ ๋ฐ์๊ฒ ๋ณด์ฌ๋ ์ฌ์ฉ์ ๊ฒฝํ์ ๊ธ๊ฒฉํ ๋๋น ์ง๋๋ค.
๊ทธ๋ฆผ 4. ingress queue, admission gate, active decode pool, prefill pool ์ฌ์ด์ backpressure ์ ํ
5. ๋จ์ผ ๋ ธ๋๊ฐ ์๋๋ผ ํด๋ฌ์คํฐ ์ค์ผ์ค๋ง์ผ๋ก ํ์ฅ๋๋ค
๋ฉํฐ GPU ๋๋ ๋ฉํฐ ๋ ธ๋ serving์์๋ front router๊ฐ ๋ชจ๋ธ/ํ ๋ํธ/affinity๋ฅผ ๋ณด๊ณ ์์ฒญ์ ๋ถ์ฐํ๊ณ , global scheduler๊ฐ placement์ policy๋ฅผ ๊ฒฐ์ ํ ๋ค, ๊ฐ node runtime์ด local continuous batching์ ์ํํฉ๋๋ค. ์ฆ ์ ์ญ ์ ์ฑ ๊ณผ ๋ก์ปฌ ์ ์ฑ ์ด ๊ณ์ธต์ ์ผ๋ก ๋๋ฉ๋๋ค.
ํนํ disaggregated serving์ด๋ MoE serving์ฒ๋ผ ๋คํธ์ํฌ์ remote state๊ฐ ์ค์ํ ๊ตฌ์กฐ์์๋ global scheduler๊ฐ node ํผ์ก๋, KV locality, fabric ์ํ๋ฅผ ํจ๊ป ๋ด์ผ ํฉ๋๋ค. ์ด๋ ์ค์ผ์ค๋ฌ๋ ์ฌ์ค์ ๋ถ์ฐ ์์คํ ์ ์ด๊ธฐ ์ญํ ์ ํ๊ฒ ๋ฉ๋๋ค.
๊ทธ๋ฆผ 5. front router, global scheduler, node runtime, execution resource๋ก ์ด์ด์ง๋ cluster-level scheduler stack
6. ์ฅ๋จ์
์ฅ์ ์ scheduler๊ฐ ๋จ์ ๋ฐฐ์น๊ธฐ๋ณด๋ค ํจ์ฌ ์ ๊ตํ๊ฒ ์์์ ์ธ ์ ์๋ค๋ ์ ์ ๋๋ค. continuous batching, chunked prefill, prefix cache, KV budget์ ํจ๊ป ๋ณด๋ฉด ๊ฐ์ GPU์์๋ ๋ ๋์ utilization๊ณผ ๋ ๋ฎ์ tail latency๋ฅผ ๋์์ ๋ ธ๋ฆด ์ ์์ต๋๋ค. ๋ฉํฐํ ๋ํธ ํ๊ฒฝ์์๋ priority, aging, quota๋ฅผ ํตํด ํน์ ๊ณ ๊ฐ์ด๋ ์๋น์ค ๋ฑ๊ธ์ ๋ณดํธํ๊ธฐ๋ ์ฝ์ต๋๋ค.
๋ฐ๋ฉด ๋จ์ ์ ์ ์ฑ ๋ณต์ก๋๊ฐ ๋น ๋ฅด๊ฒ ์ปค์ง๋ค๋ ์ ์ ๋๋ค. decode๋ฅผ ์ฐ๋ํ๋ฉด ๊ธด prefill์ด ๋ฐ๋ฆฌ๊ณ , aggressive priority๋ฅผ ์ฐ๋ฉด starvation์ด ์๊ธฐ๋ฉฐ, memory pressure๋ฅผ ๋ณด์์ ์ผ๋ก ์ก์ผ๋ฉด throughput์ด ๋จ์ด์ง๋๋ค. ๋ถ์ฐ ํ๊ฒฝ์ผ๋ก ๊ฐ์๋ก router, node runtime, remote KV store์ ์ํ๊น์ง ์ฎ์ด๋ฏ๋ก ์์ธ ๋ถ์๊ณผ ํ๋๋ ์ด๋ ค์์ง๋๋ค.
๊ด๋ จ ๊ธฐ์
| ์๋ฃ | ๋งํฌ | ์ฐ๊ฒฐ์ |
|---|---|---|
| Continuous Batching Analysis | llm_0065_continuous_batching_analysis.html | token-level slot refill๊ณผ chunked prefill |
| Disaggregated LLM Serving Analysis | llm_0080_disaggregated_llm_serving_analysis.html | prefill/decode ๋ถ๋ฆฌ์ KV handoff |
| Prefix Caching Analysis | llm_0045_prefix_caching_analysis.html | shared prefix ์ฌ์ฌ์ฉ๊ณผ admission ์ํธ์์ฉ |
| Speculative Decoding Analysis | llm_0070_speculative_decoding_analysis.html | draft/verify ๋จ๊ณ๊ฐ scheduler์ ์ฃผ๋ ์ํฅ |
| vLLM | https://github.com/vllm-project/vllm | continuous batching๊ณผ KV ๊ด๋ฆฌ ๊ตฌํ์ฒด |
| TensorRT-LLM | https://nvidia.github.io/TensorRT-LLM/ | serving runtime๊ณผ ๋ฐฐ์น ์ต์ ํ ์ฐธ๊ณ |
| Sarathi-Serve | https://arxiv.org/abs/2403.02310 | chunked prefill๊ณผ stall-free batching |
7. ํต์ฌ ์ ๋ฆฌ
LLM inference scheduler์ ๋ณธ์ง์ batch๋ฅผ ์์๊ฒ ๋ง๋๋ ๊ฒ์ด ์๋๋ผ, ์ ํ๋ memory์ compute ์์์ latency, throughput, fairness๋ฅผ ๋์์ ๊ด๋ฆฌํ๋ ์จ๋ผ์ธ ์ ์ด ๋ฌธ์ ์ ๋๋ค. ๊ทธ๋์ ์ข์ ์ ์ฑ ์ ์ด๋ก ์ ์ผ๋ก๋ง ๊น๋ํ ๊ท์น๋ณด๋ค, ์ค์ block pool๊ณผ queue dynamics๋ฅผ ์ ๋ฐ์ํ๋ ๊ท์น์ธ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
๊ฒฐ๊ตญ scheduler๋ serving ์์ง์ ์ฃผ๋ณ ๊ธฐ๋ฅ์ด ์๋๋ผ ์ค์ฌ๋ถ์ ๋๋ค. continuous batching, prefix caching, remote KV, ๋ฉํฐํ ๋ํธ ์ ์ฑ ๊น์ง ๋ชจ๋ ์ค์ผ์ค๋ฌ๋ฅผ ํตํด ํ์ค์ ์ธ ํ์ง๋ก ์ฐ๊ฒฐ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.