주제: IO-5 vLLM Paged Attention (KV Cache Paging 기반 서빙 최적화)
문제 설정
LLM inference에서 가장 큰 메모리 사용 요소 중 하나는 KV Cache입니다.
KV cache 메모리:
즉 sequence length가 증가할수록 KV cache가 크게 증가합니다.
문제는 실제 LLM 서비스에서는 요청마다 서로 다른 길이의 context가 존재한다는 점입니다.
직관 비유
- 기존 KV cache -> 메모리를 연속 공간으로 할당
- 문장 길이 다름 -> 메모리 낭비 발생
이를 해결하기 위해 vLLM은 Paged Attention을 도입했습니다.
1. 기존 KV Cache 문제
일반적인 KV cache는 sequence마다 연속 메모리를 할당합니다.
Request A: [KV KV KV KV KV ....]
Request B: [KV KV KV ....]
문제:
- 메모리 fragmentation
- batch scheduling 어려움
- GPU utilization 감소
수식
왜 문제인가
많은 요청을 동시에 처리하기 어렵습니다.
2. Paged Attention 아이디어
vLLM은 KV cache를 page 단위로 관리합니다.
Page1 Page2 Page3 Page4 ...
각 sequence는 여러 page를 참조합니다.
Request A → Page1 Page5 Page9
Request B → Page2 Page3
직관 설명
운영체제의 virtual memory paging과 유사합니다.
주의점
연속 메모리가 필요하지 않습니다.
3. KV Cache Paging 구조
KV cache는 다음 구조를 가집니다.
각 request는 page table을 가집니다.
기호 의미
- page_i : KV cache block
- page table : sequence → page mapping
왜 필요한가
메모리 사용을 유연하게 만들 수 있습니다.
4. Attention 계산
Paged attention에서는 KV cache를 page 단위로 읽습니다.
attention 식:
Attention(Q,K,V) = softmax(QKT/√d_k)V
하지만 K,V는 page에서 로드됩니다.
K = concat(K_page1, K_page5, K_page9)
왜 중요한가
sequence 메모리가 분산되어 있어도 attention 계산이 가능합니다.
5. Memory Fragmentation 감소
| 방법 | 메모리 효율 |
|---|---|
| contiguous KV cache | 낮음 |
| paged KV cache | 높음 |
Paged attention은 GPU 메모리를 더 효율적으로 사용합니다.
6. Continuous Batching
Paged attention은 continuous batching을 가능하게 합니다.
t1: request A 시작
t2: request B 추가
t3: request C 추가
새 요청이 batch에 동적으로 추가됩니다.
왜 중요한가
GPU utilization이 크게 향상됩니다.
7. Throughput 향상
Paged attention은 다음 효과를 가집니다.
- 메모리 낭비 감소
- 동시 요청 증가
- GPU utilization 증가
결과:
Throughput 2~4배 향상
8. vLLM 시스템 구조
Request Queue
↓
Continuous Batching
↓
Paged KV Cache
↓
GPU Inference
핵심 기술
- Paged attention
- dynamic batching
- efficient KV management
코드-수식 연결
| 개념 | 코드 | 설명 |
|---|---|---|
| vLLM engine | from vllm import LLM |
LLM inference engine |
| generate | llm.generate() |
paged attention 기반 생성 |
| KV cache | paged_kv_cache |
page 기반 cache |
자주 하는 오해 5개
- Paged attention은 attention 계산 자체를 변경한다고 생각한다
- KV cache는 항상 연속 메모리가 필요하다고 생각한다
- Paged attention은 latency만 개선한다고 생각한다
- GPU 메모리는 항상 충분하다고 생각한다
- vLLM은 모델 구조를 변경한다고 생각한다
체크리스트 (스스로 설명 가능해야 하는 질문)
- 기존 KV cache 방식의 문제는 무엇인가?
- Paged attention의 핵심 아이디어는 무엇인가?
- 왜 paging 방식이 메모리 fragmentation을 줄이는가?
- paged KV cache에서 attention 계산은 어떻게 수행되는가?
- vLLM이 throughput을 높이는 이유는 무엇인가?