- vLLM์ LLM ์ถ๋ก ๋ฐ ์๋น์ ์ํ ๊ณ ์ฒ๋ฆฌ๋ยท๊ณ ํจ์จ ๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ ์คํ์์ค ์์ง
- UC Berkeley Sky Computing Lab์์ ๊ฐ๋ฐ๋ PagedAttention ๊ธฐ๋ฐ ์ถ๋ก ํ๋ ์์ํฌ
- ๊ธฐ์กด ์์คํ ๋๋น KV Cache ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๋ฅผ 60~80%์์ 4% ๋ฏธ๋ง์ผ๋ก ์ค์ธ ๋ฉ๋ชจ๋ฆฌ ์ต์ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
ํด๋น ๊ฐ๋ ์ด ํ์ํ ์ด์
- LLM์ ํ๋ก๋์ ์ ๋ฐฐํฌํ ๋, GPU ๋ฉ๋ชจ๋ฆฌ ๋น์ฉ์ด ๊ฐ์ฅ ํฐ ๋ณ๋ชฉ
- ๊ธฐ์กด ์ถ๋ก ์์คํ ์ KV Cache์ 60~80%๋ฅผ ๋ญ๋นํ์ฌ ๋์ ์ฒ๋ฆฌ ๊ฐ๋ฅํ ์์ฒญ ์๊ฐ ์ ํ๋จ
- vLLM์ ๋์ผํ GPU ๋ฉ๋ชจ๋ฆฌ๋ก ๋ ๋ง์ ์์ฒญ์ ์ฒ๋ฆฌํ์ฌ ๋น์ฉ ๋๋น ์ฒ๋ฆฌ๋์ ๊ทน๋ํ
AS-IS
sequenceDiagram autonumber participant Client participant Server as ๊ธฐ์กด ์ถ๋ก ์๋ฒ participant GPU as GPU Memory Client->>Server: Request 1 (max_tokens=2048) Server->>GPU: KV Cache 2048 ์ฌ๋กฏ ์ฌ์ ํ ๋น Note over GPU: ์ค์ ์ฌ์ฉ: 512 ํ ํฐ<br/>๋ญ๋น: 1536 ์ฌ๋กฏ (75%) Client->>Server: Request 2 (max_tokens=2048) Server->>GPU: KV Cache 2048 ์ฌ๋กฏ ์ฌ์ ํ ๋น Note over GPU: ์ค์ ์ฌ์ฉ: 300 ํ ํฐ<br/>๋ญ๋น: 1748 ์ฌ๋กฏ (85%) Client->>Server: Request 3 Server--xClient: GPU ๋ฉ๋ชจ๋ฆฌ ๋ถ์กฑ โ ๊ฑฐ๋ถ
TO-BE
sequenceDiagram autonumber participant Client participant vLLM as vLLM (PagedAttention) participant GPU as GPU Memory (Block ๋จ์) Client->>vLLM: Request 1 vLLM->>GPU: Block 1~3 ๋์ ํ ๋น (ํ์ํ ๋งํผ) Note over GPU: ์ฌ์ฉ: 512 ํ ํฐ โ 32๋ธ๋ก<br/>๋ญ๋น: 4% ๋ฏธ๋ง Client->>vLLM: Request 2 vLLM->>GPU: Block 33~51 ๋์ ํ ๋น Note over GPU: ์ฌ์ฉ: 300 ํ ํฐ โ 19๋ธ๋ก<br/>๋จ์ ๋ธ๋ก ์ฌํ์ฉ ๊ฐ๋ฅ Client->>vLLM: Request 3 vLLM->>GPU: ๋น ๋ธ๋ก์์ ๋์ ํ ๋น Note over GPU: ๋ฉ๋ชจ๋ฆฌ ํจ์จ์ ์ฌ์ฉ โ ์์ฉ ๊ฐ๋ฅ
PagedAttention โ ํต์ฌ ๋ฉ์ปค๋์ฆ
OS์ ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ ํ์ด์ง ๊ฐ๋ ์ GPU์ KV Cache ๊ด๋ฆฌ์ ์ ์ฉํ ์๊ณ ๋ฆฌ์ฆ.
| ๊ฐ๋ | OS ๊ฐ์ ๋ฉ๋ชจ๋ฆฌ | PagedAttention |
|---|---|---|
| ๊ด๋ฆฌ ๋จ์ | Page Frame | KV Block (๋ณดํต 16ํ ํฐ) |
| ๋งคํ ํ ์ด๋ธ | Page Table | Block Table |
| ์ฃผ์ ๊ณต๊ฐ | Virtual โ Physical | Logical Block โ Physical GPU Block |
| ๊ณต์ ๋ฉ์ปค๋์ฆ | Copy-on-Write | Copy-on-Write |
Block Table: ๋ ผ๋ฆฌ์ KV Cache ์ฃผ์๋ฅผ ๋ฌผ๋ฆฌ์ GPU ๋ฉ๋ชจ๋ฆฌ ์์น๋ก ๋ณํํ๋ ๋งคํ ๊ตฌ์กฐ. ์ฐ์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น ์์ด ์์์ ์์น์ ๋ธ๋ก์ ๋ฐฐ์น ๊ฐ๋ฅ.
๊ธฐ์กด ์์คํ ์ 3๊ฐ์ง ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น
- Internal Fragmentation: ์ถ๋ ฅ ํ ํฐ ์๊ฐ ์์ธก ๋ถ๊ฐ๋ฅํ์ฌ ์ฌ์ ํ ๋น๋ ์ฌ๋กฏ์ด ๋ฏธ์ฌ์ฉ ์ํ๋ก ๋จ์
- Reservation: ์์ฒญ ๊ธฐ๊ฐ ๋์ ์ ์ฒด ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ์ ๊ธ โ ๋ถ๋ถ ์ฌ์ฉ ์์๋ ์ฌํ์ฉ ๋ถ๊ฐ
- External Fragmentation: ๊ฐ๋ณ ๊ธธ์ด ์ํ์ค ์ฌ์ด์ ๋น ๊ณต๊ฐ์ด ํ์ฉ ๋ถ๊ฐ
PagedAttention์ ์จ๋๋งจ๋ ๋์ ํ ๋น์ผ๋ก ์ธ ๊ฐ์ง๋ฅผ ๋ชจ๋ ํด๊ฒฐ.
์ฑ๋ฅ ๋น๊ต
| ๋น๊ต ๋์ | ์ฒ๋ฆฌ๋ ๊ฐ์ |
|---|---|
| HuggingFace Transformers | 24x |
| HuggingFace TGI | 3.5x |
| ์ผ๋ฐ์ ์ถ๋ก ์์คํ | 2~4x (๋์ผ latency ๊ธฐ์ค) |
์ฃผ์ ์ต์ ํ ๊ธฐ๋ฒ
Continuous Batching
์์ฒญ์ด ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ , ์ ์์ฒญ์ ์ฆ์ ๋ฐฐ์น์ ์ถ๊ฐ. Static batching ๋๋น GPU ํ์ฉ๋ฅ ๊ทน๋ํ.
Speculative Decoding
์์ draft ๋ชจ๋ธ์ด ํฐ ๋ชจ๋ธ์ ์ถ๋ ฅ์ ๋ฏธ๋ฆฌ ์์ธก โ ๊ฒ์ฆ ํ ์ฑํ. ์๋ ์ต๋ 2๋ฐฐ ํฅ์.
Prefix Caching
์์คํ ํ๋กฌํํธ ๋ฑ ๊ณตํต ์ ๋์ฌ์ KV Cache๋ฅผ ์ ์ฅยท์ฌ์ฌ์ฉ. ๋ฐ๋ณต ํ๋กฌํํธ ์ 400%+ ์ฑ๋ฅ ํฅ์.
Quantization
๋ชจ๋ธ ๊ฐ์ค์น๋ฅผ ๋ฎ์ ์ ๋ฐ๋(FP8, INT8, AWQ ๋ฑ)๋ก ๋ณํํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๊ฐ์.
- ์: Llama-13B โ FP32 ๊ธฐ์ค 52GB โ INT8๋ก 13GB
Memory Sharing
- Parallel Sampling: ํ๋์ ํ๋กฌํํธ์์ ์ฌ๋ฌ ์ถ๋ ฅ ์์ฑ ์ KV Cache ๊ณต์
- Beam Search: ๊ณตํต prefix์ KV Cache ๊ณต์
- Copy-on-Write: ๋ถ๊ธฐ ์์ ๊น์ง ๊ณต์ , ๋ณ๊ฒฝ ์์๋ง ๋ณต์ฌ
์ง์ ํ๊ฒฝ
| ์นดํ ๊ณ ๋ฆฌ | ์ง์ ํญ๋ชฉ |
|---|---|
| GPU | NVIDIA, AMD |
| CPU | Intel, ARM, PowerPC |
| ๊ฐ์๊ธฐ | TPU, Intel Gaudi, Huawei Ascend |
| ๋ชจ๋ธ | Llama, Qwen, Gemma, DeepSeek, Mixtral, LLaVA ๋ฑ |
| ๋ณ๋ ฌํ | Tensor, Pipeline, Data, Expert Parallelism |
| API | OpenAI-compatible REST API |